# frozen_string_literal: true shared_examples_for "signature data" do let(:relayable) { FactoryBot.create(relayable_type) } let(:signature) { described_class.new( relayable_type => relayable, :author_signature => "signature", :additional_data => {"additional_data" => "some data"}, :signature_order => SignatureOrder.new(order: "author guid parent_guid") ) } describe "#order" do it "it returns the order as array" do expect(signature.order).to eq(%w(author guid parent_guid)) end end describe "#additional_data" do it "is stored as hash" do signature.save entity = described_class.reflect_on_association(relayable_type).klass.find(relayable.id) expect(entity.signature.additional_data).to eq("additional_data" => "some data") end it "can be missing" do signature.additional_data = nil signature.save entity = described_class.reflect_on_association(relayable_type).klass.find(relayable.id) expect(entity.signature.additional_data).to eq({}) end end context "validation" do it "is valid" do expect(signature).to be_valid end it "requires a linked relayable" do signature.public_send("#{relayable_type}=", nil) expect(signature).not_to be_valid end it "requires a signature_order" do signature.signature_order = nil expect(signature).not_to be_valid end it "requires a author_signature" do signature.author_signature = nil expect(signature).not_to be_valid end end end