Ejemplo n.º 1
0
 def test_default_with_explicit_default(self):
     locale_configuration_a = LocaleConfiguration('nl-NL')
     locale_configuration_b = LocaleConfiguration('en-US')
     sut = LocalesConfiguration([
         locale_configuration_a,
     ])
     sut.default = locale_configuration_b
     self.assertEquals(locale_configuration_b, sut.default)
Ejemplo n.º 2
0
 def setUp(self):
     GenerateTestCase.setUp(self)
     configuration = Configuration(
         self._outputDirectory.name, 'https://ancestry.example.com')
     configuration.locales.clear()
     configuration.locales['nl'] = LocaleConfiguration('nl')
     configuration.locales['en'] = LocaleConfiguration('en')
     self.site = Site(configuration)
Ejemplo n.º 3
0
 def test_len(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     locale_configuration_b = LocaleConfiguration('en-US')
     sut = LocalesConfiguration([
         locale_configuration_a,
         locale_configuration_b,
     ])
     with assert_in_scope(sut):
         self.assertEquals(2, len(sut))
Ejemplo n.º 4
0
 def test_generate_multilingual(self):
     configuration = Configuration('/tmp', 'https://example.com')
     configuration.locales.clear()
     configuration.locales['nl'] = LocaleConfiguration('nl')
     configuration.locales['en'] = LocaleConfiguration('en')
     sut = LocalizedPathUrlGenerator(configuration)
     self.assertEquals('/nl/index.html',
                       sut.generate('/index.html', 'text/html'))
     self.assertEquals(
         '/en/index.html', sut.generate('/index.html', 'text/html', locale='en'))
Ejemplo n.º 5
0
    async def test_empty(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration) as site:
                indexed = [item for item in await Index(site).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 6
0
 def test_delitem(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     locale_configuration_b = LocaleConfiguration('en-US')
     sut = LocalesConfiguration([
         locale_configuration_a,
         locale_configuration_b,
     ])
     with assert_scope_empty():
         with assert_reactor_called(sut):
             del sut['nl-NL']
     self.assertCountEqual([locale_configuration_b], sut)
Ejemplo n.º 7
0
 async def test_root_redirect(self):
     configuration = Configuration(self._output_directory.name,
                                   'https://ancestry.example.com')
     configuration.locales.replace([
         LocaleConfiguration('nl'),
         LocaleConfiguration('en'),
     ])
     async with App(configuration) as app:
         await generate(app)
     with open(self.assert_betty_html(app, '/index.html')) as f:
         meta_redirect = '<meta http-equiv="refresh" content="0; url=/nl/index.html">'
         self.assertIn(meta_redirect, f.read())
Ejemplo n.º 8
0
    async def test_populate_should_add_translation_links(self,
                                                         m_retriever) -> None:
        sut = Populator(m_retriever)

        entry_language = 'en'
        entry_name = 'Amsterdam'
        entry_title = 'Amsterdam'
        entry_content = 'Capitol of the Netherlands'
        entry = Entry(entry_language, entry_name, entry_title, entry_content)
        added_entry_language = 'nl'
        added_entry_name = 'Amsterdam'
        added_entry_title = 'Amsterdam'
        added_entry_content = 'Hoofdstad van Nederland'
        added_entry = Entry(added_entry_language, added_entry_name,
                            added_entry_title, added_entry_content)
        m_retriever.get_entry.side_effect = [entry, added_entry]

        m_retriever.get_translations.return_value = {
            entry_language: entry_name,
            added_entry_language: added_entry_name,
        }

        resource = IdentifiableSource('the_source', 'The Source')
        link_en = Link('https://en.wikipedia.org/wiki/Amsterdam')
        resource.links.add(link_en)
        ancestry = Ancestry()
        ancestry.sources[resource.id] = resource
        with TemporaryDirectory() as output_directory_path:
            with TemporaryDirectory() as cache_directory_path:
                configuration = Configuration(output_directory_path,
                                              'https://example.com')
                configuration.cache_directory_path = cache_directory_path
                configuration.locales.clear()
                configuration.locales['en-US'] = LocaleConfiguration(
                    'en-US', 'en')
                configuration.locales['nl-NL'] = LocaleConfiguration(
                    'nl-NL', 'nl')
                async with Site(configuration) as site:
                    await sut.populate(ancestry, site)

        m_retriever.get_entry.assert_has_calls([
            call(entry_language, entry_name),
            call(added_entry_language, added_entry_name),
        ])
        m_retriever.get_translations.assert_called_once_with(
            entry_language, entry_name)
        self.assertEqual(2, len(resource.links))
        link_nl = resource.links.difference({link_en}).pop()
        self.assertEqual('Amsterdam', link_nl.label)
        self.assertEqual('nl', link_nl.locale)
        self.assertEqual('text/html', link_nl.media_type)
        self.assertIsNotNone(link_nl.description)
        self.assertEqual('external', link_nl.relationship)
Ejemplo n.º 9
0
    def test_empty(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            site = Site(configuration)
            environment = create_environment(site)

            indexed = list(index(site, environment))

            self.assertEquals([], indexed)
Ejemplo n.º 10
0
 def assert_encodes(self, expected, data, schema_definition: str):
     with TemporaryDirectory() as output_directory:
         configuration = Configuration(
             output_directory, '')
         configuration.locales.clear()
         configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
         configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
         site = Site(configuration)
         encoded_data = stdjson.loads(stdjson.dumps(data, cls=JSONEncoder.get_factory(
             site, configuration.default_locale)))
         json.validate(encoded_data, schema_definition, site)
         self.assertEquals(expected, encoded_data)
Ejemplo n.º 11
0
    async def test_empty(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales.replace([
                LocaleConfiguration('en-US', 'en'),
                LocaleConfiguration('nl-NL', 'nl'),
            ])
            async with App(configuration) as app:
                indexed = [item for item in Index(app).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 12
0
    async def test_file_without_description(self):
        file_id = 'F1'
        file = File(file_id, __file__)

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration) as site:
                site.ancestry.files[file_id] = file
                indexed = [item for item in await Index(site).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 13
0
    async def test_person_without_names(self):
        person_id = 'P1'
        person = Person(person_id)

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration) as site:
                site.ancestry.people[person_id] = person
                indexed = [item for item in await Index(site).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 14
0
    def test_person_without_names(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            site = Site(configuration)
            environment = create_environment(site)
            person_id = 'P1'
            person = Person(person_id)
            site.ancestry.people[person_id] = person

            indexed = list(index(site, environment))

            self.assertEquals([], indexed)
Ejemplo n.º 15
0
    def test_file_without_description(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            site = Site(configuration)
            environment = create_environment(site)
            file_id = 'F1'
            file = File(file_id, __file__)
            site.ancestry.files[file_id] = file

            indexed = list(index(site, environment))

            self.assertEquals([], indexed)
Ejemplo n.º 16
0
    async def test_place(self, expected: str, locale: str):
        place_id = 'P1'
        place = Place(place_id, [PlaceName('Netherlands', 'en'), PlaceName('Nederland', 'nl')])

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(
                output_directory_path, 'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with App(configuration).with_locale(locale) as app:
                app.ancestry.places[place_id] = place
                indexed = [item for item in Index(app).build()]

        self.assertEquals('netherlands nederland', indexed[0]['text'])
        self.assertIn(expected, indexed[0]['result'])
Ejemplo n.º 17
0
 async def test_public_localized_resource(self):
     configuration = Configuration(self._output_directory.name,
                                   'https://ancestry.example.com')
     configuration.locales.replace([
         LocaleConfiguration('nl'),
         LocaleConfiguration('en'),
     ])
     async with App(configuration) as app:
         await generate(app)
     with open(self.assert_betty_html(app, '/nl/index.html')) as f:
         translation_link = '<a href="/en/index.html" hreflang="en" lang="en" rel="alternate">English</a>'
         self.assertIn(translation_link, f.read())
     with open(self.assert_betty_html(app, '/en/index.html')) as f:
         translation_link = '<a href="/nl/index.html" hreflang="nl" lang="nl" rel="alternate">Nederlands</a>'
         self.assertIn(translation_link, f.read())
Ejemplo n.º 18
0
    def test_post_render_config_multilingual(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(
                output_directory_path, 'http://example.com')
            configuration.plugins[Nginx] = {}
            configuration.locales.clear()
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            site = Site(configuration)
            render(site)
            expected = '''server {
	listen 80;
	server_name example.com;
	root %s;
	add_header Cache-Control "max-age=86400";
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_types text/css application/javascript application/json application/xml;

        set $content_type_extension html;
    index index.$content_type_extension;

        location ~ ^/(en|nl)(/|$) {
            set $locale $1;

            add_header Content-Language "$locale" always;

            # Handle HTTP error responses.
            error_page 401 /$locale/.error/401.$content_type_extension;
            error_page 403 /$locale/.error/403.$content_type_extension;
            error_page 404 /$locale/.error/404.$content_type_extension;
            location ~ ^/$locale/\.error {
                internal;
            }

            try_files $uri $uri/ =404;
        }
        location @localized_redirect {
                set $locale_alias en;
            return 301 /$locale_alias$uri;
        }
        location / {
            try_files $uri @localized_redirect;
        }
}''' % configuration.www_directory_path  # noqa: E101 W191
            with open(join(configuration.output_directory_path, 'nginx', 'nginx.conf')) as f:  # noqa: E101
                self.assertEquals(expected, f.read())
Ejemplo n.º 19
0
 def test_delitem_with_one_remaining_locale_configuration(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     sut = LocalesConfiguration([
         locale_configuration_a,
     ])
     with self.assertRaises(ConfigurationError):
         del sut['nl-NL']
Ejemplo n.º 20
0
    async def test_file_without_description(self):
        file_id = 'F1'
        file = File(file_id, __file__)

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales.replace([
                LocaleConfiguration('en-US', 'en'),
                LocaleConfiguration('nl-NL', 'nl'),
            ])
            async with App(configuration) as app:
                app.ancestry.entities.append(file)
                indexed = [item for item in Index(app).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 21
0
 def test_getitem(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     sut = LocalesConfiguration([
         locale_configuration_a,
     ])
     with assert_in_scope(sut):
         self.assertEquals(locale_configuration_a, sut['nl-NL'])
Ejemplo n.º 22
0
    async def test_file(self, expected: str, locale: str):
        file_id = 'F1'
        file = File(file_id, __file__)
        file.description = '"file" is Dutch for "traffic jam"'

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(
                output_directory_path, 'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with App(configuration).with_locale(locale) as app:
                app.ancestry.files[file_id] = file
                indexed = [item for item in Index(app).build()]

        self.assertEquals('"file" is dutch for "traffic jam"', indexed[0]['text'])
        self.assertIn(expected, indexed[0]['result'])
Ejemplo n.º 23
0
 def test_repr(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     sut = LocalesConfiguration([
         locale_configuration_a,
     ])
     with assert_in_scope(sut):
         self.assertIsInstance(repr(sut), str)
Ejemplo n.º 24
0
    async def test_person_without_names(self):
        person_id = 'P1'
        person = Person(person_id)

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales.replace([
                LocaleConfiguration('en-US', 'en'),
                LocaleConfiguration('nl-NL', 'nl'),
            ])
            async with App(configuration) as app:
                app.ancestry.entities.append(person)
                indexed = [item for item in Index(app).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 25
0
 async def assert_encodes(self, expected, data, schema_definition: str):
     with TemporaryDirectory() as output_directory:
         configuration = Configuration(output_directory,
                                       'https://example.com')
         configuration.locales.replace([
             LocaleConfiguration('en-US', 'en'),
             LocaleConfiguration('nl-NL', 'nl'),
         ])
         async with App(configuration) as app:
             encoded_data = stdjson.loads(
                 stdjson.dumps(data,
                               cls=JSONEncoder.get_factory(
                                   app,
                                   configuration.locales.default.locale)))
         json.validate(encoded_data, schema_definition, app)
         self.assertEquals(expected, encoded_data)
Ejemplo n.º 26
0
    async def test_post_render_config_multilingual(self):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'http://example.com')
            configuration.extensions[Nginx] = Nginx.configuration_schema({})
            configuration.locales.clear()
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            expected = r'''
server {
    listen 80;
    server_name example.com;
    root %s;
    add_header Cache-Control "max-age=86400";
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_types text/css application/javascript application/json application/xml;

    set $media_type_extension html;
    index index.$media_type_extension;

    location ~ ^/(en|nl)(/|$) {
        set $locale $1;

        add_header Content-Language "$locale" always;

        # Handle HTTP error responses.
        error_page 401 /$locale/.error/401.$media_type_extension;
        error_page 403 /$locale/.error/403.$media_type_extension;
        error_page 404 /$locale/.error/404.$media_type_extension;
        location ~ ^/$locale/\.error {
            internal;
        }

        try_files $uri $uri/ =404;
    }
    location @localized_redirect {
        set $locale_alias en;
        return 301 /$locale_alias$uri;
    }
    location / {
        try_files $uri @localized_redirect;
    }
}
''' % configuration.www_directory_path
            await self._assert_configuration_equals(expected, configuration)
Ejemplo n.º 27
0
 def test_contains(self) -> None:
     locale_configuration_a = LocaleConfiguration('nl-NL')
     sut = LocalesConfiguration([
         locale_configuration_a,
     ])
     with assert_in_scope(sut):
         self.assertIn('nl-NL', sut)
         self.assertNotIn('en-US', sut)
Ejemplo n.º 28
0
    async def test_private_person(self):
        person_id = 'P1'
        individual_name = 'Jane'
        person = Person(person_id)
        person.names.append(PersonName(individual_name))
        person.private = True

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration) as site:
                site.ancestry.people[person_id] = person
                indexed = [item for item in await Index(site).build()]

        self.assertEquals([], indexed)
Ejemplo n.º 29
0
    async def test_person_with_affiliation_name(self, expected: str, locale: str):
        person_id = 'P1'
        affiliation_name = 'Doughnut'
        person = Person(person_id)
        person.names.append(PersonName(None, affiliation_name))

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(
                output_directory_path, 'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with App(configuration).with_locale(locale) as app:
                app.ancestry.people[person_id] = person
                indexed = [item for item in Index(app).build()]

        self.assertEquals('doughnut', indexed[0]['text'])
        self.assertIn(expected, indexed[0]['result'])
Ejemplo n.º 30
0
    async def test_person_with_individual_name(self, expected: str,
                                               locale: str):
        person_id = 'P1'
        individual_name = 'Jane'
        person = Person(person_id)
        person.names.append(PersonName(individual_name))

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration).with_locale(locale) as site:
                site.ancestry.people[person_id] = person
                indexed = [item for item in await Index(site).build()]

        self.assertEquals('jane', indexed[0]['text'])
        self.assertIn(expected, indexed[0]['result'])