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