diff --git a/lib/diaspora_federation/schemas/federation_entities.json b/lib/diaspora_federation/schemas/federation_entities.json index 1226694..98ec53a 100644 --- a/lib/diaspora_federation/schemas/federation_entities.json +++ b/lib/diaspora_federation/schemas/federation_entities.json @@ -17,8 +17,17 @@ "definitions": { "signature": { - "type": "string", - "minLength": 30 + "oneOf" : [ + { + "type": "string", + "minLength": 30 + }, + { + "type": "string", + "maxLength": 0, + "description": "Allow empty string when no signature is provided" + } + ] }, "guid": { diff --git a/spec/lib/diaspora_federation/entities/comment_spec.rb b/spec/lib/diaspora_federation/entities/comment_spec.rb index c59cfc9..e47a364 100644 --- a/spec/lib/diaspora_federation/entities/comment_spec.rb +++ b/spec/lib/diaspora_federation/entities/comment_spec.rb @@ -55,6 +55,8 @@ JSON it_behaves_like "a relayable Entity" + it_behaves_like "a relayable JSON entity" + describe "#created_at" do it "has a created_at after parse" do entity = described_class.from_xml(Nokogiri::XML::Document.parse(xml).root) diff --git a/spec/lib/diaspora_federation/entities/like_spec.rb b/spec/lib/diaspora_federation/entities/like_spec.rb index 800f0bc..ae3534d 100644 --- a/spec/lib/diaspora_federation/entities/like_spec.rb +++ b/spec/lib/diaspora_federation/entities/like_spec.rb @@ -56,6 +56,8 @@ JSON it_behaves_like "a relayable Entity" + it_behaves_like "a relayable JSON entity" + context "invalid XML" do it "raises a ValidationError if the parent_type is missing" do broken_xml = <<-XML diff --git a/spec/lib/diaspora_federation/entities/participation_spec.rb b/spec/lib/diaspora_federation/entities/participation_spec.rb index 2ceb84e..4f7a34c 100644 --- a/spec/lib/diaspora_federation/entities/participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/participation_spec.rb @@ -53,6 +53,8 @@ JSON it_behaves_like "a relayable Entity" + it_behaves_like "a relayable JSON entity" + describe "#sender_valid?" do let(:entity) { Entities::Participation.new(data) } diff --git a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb index 8d64df5..e81c52e 100644 --- a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb @@ -51,5 +51,7 @@ JSON it_behaves_like "a JSON Entity" it_behaves_like "a relayable Entity" + + it_behaves_like "a relayable JSON entity" end end diff --git a/spec/support/shared_entity_specs.rb b/spec/support/shared_entity_specs.rb index 9f5c9f5..b869fc0 100644 --- a/spec/support/shared_entity_specs.rb +++ b/spec/support/shared_entity_specs.rb @@ -188,3 +188,12 @@ shared_examples "a JSON Entity" do expect(described_class.from_json(JSON.parse(entity_json)).to_json.to_json).to eq(entity_json) end end + +shared_examples "a relayable JSON entity" do + it "matches JSON schema with empty string signatures" do + json = described_class.new(data).to_json + json[:entity_data][:author_signature] = "" + json[:entity_data][:parent_author_signature] = "" + expect(json.to_json).to match_json_schema(:entity_schema) + end +end