async def test_when_fetch_fails_bad_repo(self, loop):
        handler = WordPressRepository(loop=loop,
                                      storage=MagicMock(),
                                      repository_checker=MagicMock())
        handler.current_themes = lambda: {'hello-world', 'unknown-theme'}
        handler.enumerate_themes = lambda: fake_future(
            {'hello-world', 'a', 'b'}, loop)

        handler.fetch_theme = MagicMock()
        handler.fetch_theme.side_effect = PluginNotFound('A side effect!')
        handler.checker.has_content.return_value = fake_future(False, loop)
        await handler.perform_theme_lookup()

        handler.fetch_theme.assert_has_calls([
            call('a'),
            call('b'),
        ],
                                             any_order=True)
        handler.storage.write_meta.assert_not_called()
        handler.checker.has_content.assert_has_calls([
            call(
                Repository(type="subversion",
                           location="https://themes.svn.wordpress.org/a/")),
            call(
                Repository(type="subversion",
                           location="https://themes.svn.wordpress.org/b/")),
        ],
                                                     any_order=True)
        handler.storage.append.assert_has_calls([
            call("themes-ignore.txt", "a"),
            call("themes-ignore.txt", "b"),
        ],
                                                any_order=True)
    async def test_no_calls_made_when_nothing_new(self, loop):
        handler = WordPressRepository(loop=loop)
        handler.current_themes = lambda: {'hello-world', 'unknown-theme'}
        handler.enumerate_themes = lambda: fake_future({'hello-world'}, loop)

        handler.fetch_theme = MagicMock()
        handler.fetch_theme.assert_not_called()
        await handler.perform_theme_lookup()
    async def test_calls_made_when_new_themes_arrive(self, loop):
        handler = WordPressRepository(loop=loop, storage=MagicMock())
        handler.current_themes = lambda: {'hello-world', 'unknown-theme'}
        handler.enumerate_themes = lambda: fake_future(
            {'hello-world', 'a', 'b'}, loop)

        handler.fetch_theme = MagicMock()
        handler.fetch_theme.return_value = fake_future(Meta(key="a", name="A"),
                                                       loop)
        await handler.perform_theme_lookup()

        handler.fetch_theme.assert_has_calls([
            call('a'),
            call('b'),
        ],
                                             any_order=True)
        handler.storage.write_meta.assert_called_with(Meta(key="a", name="A"))