def test_empty_document(self):
        """Provide an empty Authentication For OPDS document to test
        default values.
        """
        place = MockPlace()
        everywhere = place.everywhere(None)
        parsed = AuthDoc.from_string(None, "{}", place)

        # In the absence of specific information, it's assumed the
        # OPDS server is open to everyone.
        eq_(([everywhere], {}, {}), parsed.service_area)
        eq_(([everywhere], {}, {}), parsed.focus_area)
        eq_([parsed.PUBLIC_AUDIENCE], parsed.audiences)

        eq_(None, parsed.id)
        eq_(None, parsed.title)
        eq_(None, parsed.service_description)
        eq_(None, parsed.color_scheme)
        eq_(None, parsed.collection_size)
        eq_(None, parsed.public_key)
        eq_(None, parsed.website)
        eq_(False, parsed.online_registration)
        eq_(None, parsed.root)
        eq_([], parsed.links)
        eq_(None, parsed.logo)
        eq_(None, parsed.logo_link)
        eq_(False, parsed.anonymous_access)
    def test_real_document(self):
        """Test an Authentication For OPDS document that demonstrates
        most of the features we're looking for.
        """
        document = {
            "id":
            "http://library/authentication-for-opds-file",
            "title":
            "Ansonia Public Library",
            "links": [{
                "rel": "logo",
                "href": "data:image/png;base64,some-image-data",
                "type": "image/png"
            }, {
                "rel": "alternate",
                "href": "http://ansonialibrary.org",
                "type": "text/html"
            }, {
                "rel": "register",
                "href": "http://example.com/get-a-card/",
                "type": "text/html"
            }, {
                "rel": "start",
                "href": "http://catalog.example.com/",
                "type": "text/html/"
            }, {
                "rel": "start",
                "href": "http://opds.example.com/",
                "type": "application/atom+xml;profile=opds-catalog"
            }],
            "service_description":
            "Serving Ansonia, CT",
            "color_scheme":
            "gold",
            "collection_size": {
                "eng": 100,
                "spa": 20
            },
            "public_key":
            "a public key",
            "features": {
                "disabled": [],
                "enabled":
                ["https://librarysimplified.org/rel/policy/reservations"]
            },
            "authentication": [{
                "type": "http://opds-spec.org/auth/basic",
                "description": "Log in with your library barcode",
                "inputs": {
                    "login": {
                        "keyboard": "Default"
                    },
                    "password": {
                        "keyboard": "Default"
                    }
                },
                "labels": {
                    "login": "******",
                    "password": "******"
                }
            }]
        }

        place = MockPlace()
        everywhere = place.everywhere(None)
        parsed = AuthDoc.from_dict(None, document, place)

        # Information about the OPDS server has been extracted from
        # JSON and put into the AuthenticationDocument object.
        eq_("http://library/authentication-for-opds-file", parsed.id)
        eq_("Ansonia Public Library", parsed.title)
        eq_("Serving Ansonia, CT", parsed.service_description)
        eq_("gold", parsed.color_scheme)
        eq_({"eng": 100, "spa": 20}, parsed.collection_size)
        eq_("a public key", parsed.public_key)
        eq_(
            {
                u'rel': 'alternate',
                u'href': u'http://ansonialibrary.org',
                u'type': u'text/html'
            }, parsed.website)
        eq_(True, parsed.online_registration)
        eq_(
            {
                "rel": "start",
                "href": "http://opds.example.com/",
                "type": "application/atom+xml;profile=opds-catalog"
            }, parsed.root)
        eq_("data:image/png;base64,some-image-data", parsed.logo)
        eq_(None, parsed.logo_link)
        eq_(False, parsed.anonymous_access)