nickname is optional in the hCard

This commit is contained in:
Benjamin Neff 2016-07-10 00:55:52 +02:00
parent f7d269cd6a
commit 4b949491df
2 changed files with 93 additions and 4 deletions

View file

@ -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)

View file

@ -134,6 +134,96 @@ HTML
expect(hcard.last_name).to eq(person.last_name)
end
it "reads minimal hCard" do
minimal_html = <<-HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="UTF-8" />
<title>#{person.full_name}</title>
</head>
<body>
<div id="content">
<h1>#{person.full_name}</h1>
<div id="content_inner" class="entity_profile vcard author">
<h2>User profile</h2>
<dl class="entity_uid">
<dt>Uid</dt>
<dd>
<span class="uid">#{person.guid}</span>
</dd>
</dl>
<dl class="entity_full_name">
<dt>Full_name</dt>
<dd>
<span class="fn">#{person.full_name}</span>
</dd>
</dl>
<dl class="entity_searchable">
<dt>Searchable</dt>
<dd>
<span class="searchable">#{person.searchable}</span>
</dd>
</dl>
<dl class="entity_key">
<dt>Key</dt>
<dd>
<pre class="key">#{person.serialized_public_key}</pre>
</dd>
</dl>
<dl class="entity_first_name">
<dt>First_name</dt>
<dd>
<span class="given_name">#{person.first_name}</span>
</dd>
</dl>
<dl class="entity_family_name">
<dt>Family_name</dt>
<dd>
<span class="family_name">#{person.last_name}</span>
</dd>
</dl>
<dl class="entity_photo">
<dt>Photo</dt>
<dd>
<img class="photo avatar" width="300" height="300" src="#{photo_large_url}" />
</dd>
</dl>
<dl class="entity_photo_medium">
<dt>Photo_medium</dt>
<dd>
<img class="photo avatar" width="100" height="100" src="#{photo_medium_url}" />
</dd>
</dl>
<dl class="entity_photo_small">
<dt>Photo_small</dt>
<dd>
<img class="photo avatar" width="50" height="50" src="#{photo_small_url}" />
</dd>
</dl>
</div>
</div>
</body>
</html>
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