diff --git a/lib/diaspora_federation/discovery/h_card.rb b/lib/diaspora_federation/discovery/h_card.rb index 049a656..1bed928 100644 --- a/lib/diaspora_federation/discovery/h_card.rb +++ b/lib/diaspora_federation/discovery/h_card.rb @@ -48,7 +48,7 @@ module DiasporaFederation # @!attribute [r] nickname # The first part of the diaspora* ID # @return [String] nickname - property :nickname + property :nickname, default: nil # @!attribute [r] full_name # @return [String] display name of the user @@ -253,8 +253,7 @@ module DiasporaFederation # @param [LibXML::XML::Document] doc HTML document # @return [Boolean] validation result private_class_method def self.html_document_complete?(doc) - !(doc.at_css(SELECTORS[:fn]).nil? || doc.at_css(SELECTORS[:nickname]).nil? || - doc.at_css(SELECTORS[:photo]).nil?) + !(doc.at_css(SELECTORS[:fn]).nil? || doc.at_css(SELECTORS[:photo]).nil?) end private_class_method def self.parse_html_and_validate(html_string) @@ -270,7 +269,7 @@ module DiasporaFederation end private_class_method def self.content_from_doc(doc, content_selector) - element_from_doc(doc, content_selector).content + element_from_doc(doc, content_selector).try(:content) end private_class_method def self.photo_from_doc(doc, photo_selector) diff --git a/spec/lib/diaspora_federation/discovery/h_card_spec.rb b/spec/lib/diaspora_federation/discovery/h_card_spec.rb index 0376373..728ff16 100644 --- a/spec/lib/diaspora_federation/discovery/h_card_spec.rb +++ b/spec/lib/diaspora_federation/discovery/h_card_spec.rb @@ -134,6 +134,96 @@ HTML expect(hcard.last_name).to eq(person.last_name) end + it "reads minimal hCard" do + minimal_html = <<-HTML + + + + + + #{person.full_name} + + +
+

#{person.full_name}

+
+

User profile

+
+
Uid
+
+ #{person.guid} +
+
+
+
Full_name
+
+ #{person.full_name} +
+
+
+
Searchable
+
+ #{person.searchable} +
+
+
+
Key
+
+
#{person.serialized_public_key}
+
+
+
+
First_name
+
+ #{person.first_name} +
+
+
+
Family_name
+
+ #{person.last_name} +
+
+
+
Photo
+
+ +
+
+
+
Photo_medium
+
+ +
+
+
+
Photo_small
+
+ +
+
+
+
+ + +HTML + + hcard = Discovery::HCard.from_html(minimal_html) + expect(hcard.guid).to eq(person.guid) + expect(hcard.full_name).to eq(person.full_name) + expect(hcard.photo_large_url).to eq(photo_large_url) + expect(hcard.photo_medium_url).to eq(photo_medium_url) + expect(hcard.photo_small_url).to eq(photo_small_url) + expect(hcard.public_key).to eq(person.serialized_public_key) + expect(hcard.searchable).to eq(person.searchable) + + expect(hcard.first_name).to eq(person.first_name) + expect(hcard.last_name).to eq(person.last_name) + + expect(hcard.nickname).to be_nil + expect(hcard.url).to be_nil + end + it "is frozen after parsing" do hcard = Discovery::HCard.from_html(html) expect(hcard).to be_frozen