module DiasporaFederation describe WebFinger::HostMeta do base_url = "https://pod.example.tld/" xml = <<-XML XML it "must not create blank instances" do expect { WebFinger::HostMeta.new }.to raise_error(NoMethodError) end context "#to_xml" do it "creates a nice XML document" do hm = WebFinger::HostMeta.from_base_url(base_url) expect(hm.to_xml).to eq(xml) end it "appends a '/' if necessary" do hm = WebFinger::HostMeta.from_base_url("https://pod.example.tld") expect(hm.to_xml).to eq(xml) end it "fails if the base_url was omitted" do expect { WebFinger::HostMeta.from_base_url("") }.to raise_error(WebFinger::HostMeta::InvalidData) end end context "#webfinger_template_url" do it "parses its own output" do hm = WebFinger::HostMeta.from_xml(xml) expect(hm.webfinger_template_url).to eq("#{base_url}webfinger?q={uri}") end it "also reads old-style XML" do historic_xml = <<-XML XML hm = WebFinger::HostMeta.from_xml(historic_xml) expect(hm.webfinger_template_url).to eq("#{base_url}webfinger?q={uri}") end it "fails if the document does not contain a webfinger url" do invalid_xml = < XML expect { WebFinger::HostMeta.from_xml(invalid_xml) }.to raise_error(WebFinger::HostMeta::InvalidData) end it "fails if the document contains a malformed webfinger url" do invalid_xml = < XML expect { WebFinger::HostMeta.from_xml(invalid_xml) }.to raise_error(WebFinger::HostMeta::InvalidData) end it "fails if the document is invalid" do expect { WebFinger::HostMeta.from_xml("") }.to raise_error(WebFinger::XrdDocument::InvalidDocument) end end end end