From d4b982ea166d5ebe947dee9263d5c6a19c312361 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Sun, 30 Jun 2024 09:14:55 +0100 Subject: [PATCH] Add deserialize method to CharacterSheetSection --- app/models/character_sheet_section.rb | 18 ++++++++++++++++++ test/services/template_builder_test.rb | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 test/services/template_builder_test.rb diff --git a/app/models/character_sheet_section.rb b/app/models/character_sheet_section.rb index 2a6798a..1101919 100644 --- a/app/models/character_sheet_section.rb +++ b/app/models/character_sheet_section.rb @@ -25,4 +25,22 @@ class CharacterSheetSection < ApplicationRecord def highest_order_index character_sheet_features.maximum(:order_index) || 1 end + + def self.deserialize(h) + section = new + + h["character_sheet_subsections"].each do |sub| + section.character_sheet_subsections.deserialize(sub) + end + + h["stats"].each do |stat| + section.stats.build(stat) + end + + h["text_fields"].each do |text_field| + section.text_fields.build(text_field) + end + + section + end end diff --git a/test/services/template_builder_test.rb b/test/services/template_builder_test.rb new file mode 100644 index 0000000..cbfedc0 --- /dev/null +++ b/test/services/template_builder_test.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require "test_helper" + +class TemplateBuilderTest < ActiveSupport::TestCase + test "creates template from a CharacterSheetSection" do + section = character_sheet_sections(:stats) + template = TemplateBuilder.create!( + name: "Test template", + game_system: GameSystem.last, + from: section, + ) + template_hash = JSON.parse(template.content) + assert_equal 1, template_hash["character_sheet_subsections"].count + assert_equal 3, template_hash["stats"].count + assert_equal "Stats", template_hash["name"] + end +end