diff --git a/spec/lib/diaspora_federation/discovery/h_card_spec.rb b/spec/lib/diaspora_federation/discovery/h_card_spec.rb index 507a265..687645a 100644 --- a/spec/lib/diaspora_federation/discovery/h_card_spec.rb +++ b/spec/lib/diaspora_federation/discovery/h_card_spec.rb @@ -5,6 +5,23 @@ module DiasporaFederation let(:photo_medium_url) { "#{person.url}/upload/medium.png" } let(:photo_small_url) { "#{person.url}/upload/small.png" } + let(:data) { + { + guid: person.guid, + nickname: person.nickname, + full_name: person.full_name, + url: person.url, + photo_large_url: photo_large_url, + photo_medium_url: photo_medium_url, + photo_small_url: photo_small_url, + public_key: person.serialized_public_key, + searchable: person.searchable, + first_name: person.first_name, + last_name: person.last_name + } + } + let(:klass) { Discovery::HCard } + let(:html) { <<-HTML @@ -92,31 +109,13 @@ module DiasporaFederation HTML } - it "must not create blank instances" do - expect { Discovery::HCard.new({}) }.to raise_error ArgumentError - end + it_behaves_like "an Entity subclass" context "generation" do it "creates an instance from a data hash" do - hcard = Discovery::HCard.new( - guid: person.guid, - nickname: person.nickname, - full_name: person.full_name, - url: person.url, - photo_large_url: photo_large_url, - photo_medium_url: photo_medium_url, - photo_small_url: photo_small_url, - public_key: person.serialized_public_key, - searchable: person.searchable, - first_name: person.first_name, - last_name: person.last_name - ) + hcard = Discovery::HCard.new(data) expect(hcard.to_html).to eq(html) end - - it "fails if nil was given" do - expect { Discovery::HCard.new(nil) }.to raise_error ArgumentError, "expected a Hash" - end end context "parsing" do diff --git a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb index dbc372f..79d3e4f 100644 --- a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb +++ b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb @@ -4,6 +4,21 @@ module DiasporaFederation let(:acct) { "acct:#{person.diaspora_id}" } let(:public_key_base64) { Base64.strict_encode64(person.serialized_public_key) } + let(:data) { + { + acct_uri: "acct:#{person.diaspora_id}", + alias_url: person.alias_url, + hcard_url: person.hcard_url, + seed_url: person.url, + profile_url: person.profile_url, + atom_url: person.atom_url, + salmon_url: person.salmon_url, + guid: person.guid, + public_key: person.serialized_public_key + } + } + let(:klass) { Discovery::WebFinger } + let(:xml) { <<-XML @@ -21,29 +36,13 @@ module DiasporaFederation XML } - it "must not create blank instances" do - expect { Discovery::WebFinger.new({}) }.to raise_error ArgumentError - end + it_behaves_like "an Entity subclass" context "generation" do it "creates a nice XML document" do - wf = Discovery::WebFinger.new( - acct_uri: "acct:#{person.diaspora_id}", - alias_url: person.alias_url, - hcard_url: person.hcard_url, - seed_url: person.url, - profile_url: person.profile_url, - atom_url: person.atom_url, - salmon_url: person.salmon_url, - guid: person.guid, - public_key: person.serialized_public_key - ) + wf = Discovery::WebFinger.new(data) expect(wf.to_xml).to eq(xml) end - - it "fails if nil was given" do - expect { Discovery::WebFinger.new(nil) }.to raise_error ArgumentError, "expected a Hash" - end end context "parsing" do diff --git a/spec/lib/diaspora_federation/entities/person_spec.rb b/spec/lib/diaspora_federation/entities/person_spec.rb new file mode 100644 index 0000000..f4091ec --- /dev/null +++ b/spec/lib/diaspora_federation/entities/person_spec.rb @@ -0,0 +1,8 @@ +module DiasporaFederation + describe Entities::Person do + let(:data) { FactoryGirl.attributes_for(:person_entity) } + let(:klass) { Entities::Person } + + it_behaves_like "an Entity subclass" + end +end diff --git a/spec/lib/diaspora_federation/entities/profile_spec.rb b/spec/lib/diaspora_federation/entities/profile_spec.rb new file mode 100644 index 0000000..398f601 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/profile_spec.rb @@ -0,0 +1,8 @@ +module DiasporaFederation + describe Entities::Profile do + let(:data) { FactoryGirl.attributes_for(:profile_entity) } + let(:klass) { Entities::Profile } + + it_behaves_like "an Entity subclass" + end +end diff --git a/spec/support/shared_entity_specs.rb b/spec/support/shared_entity_specs.rb new file mode 100644 index 0000000..8946cee --- /dev/null +++ b/spec/support/shared_entity_specs.rb @@ -0,0 +1,33 @@ +shared_examples "an Entity subclass" do + it "should be an Entity" do + expect(klass).to be < DiasporaFederation::Entity + end + + it "has its properties set" do + expect(klass.class_prop_names).to include(*data.keys) + end + + context "behaviour" do + let(:instance) { klass.new(data) } + + describe "initialize" do + it "must not create blank instances" do + expect { klass.new({}) }.to raise_error ArgumentError + end + + it "fails if nil was given" do + expect { klass.new(nil) }.to raise_error ArgumentError, "expected a Hash" + end + + it "should be frozen" do + expect(instance).to be_frozen + end + end + + describe "#to_h" do + it "should resemble the input data" do + expect(instance.to_h).to eq(data) + end + end + end +end