def test_retrieve_should_call_getStorageKey_to_fetch_correct_storage_key(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.getStorageKey = Mock()
        storage.getStorageKey.return_value = "some_key"

        storage.retrieve("some_key", "some_value", {"prepend": "true"})

        storage.getStorageKey.assert_called_with("some_key", "some_value", {"prepend": "true"})
    def test_retrieve_should_call_retrieveResultSet_if_type_is_not_set(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.getStorageKey = Mock()
        storage.getStorageKey.return_value = "some_key"
        storage.retrieveResultSet = Mock()

        storage.retrieve("some_key")

        storage.retrieveResultSet.assert_called_with("some_key")
    def test_retrieve_should_call_retrieveResultSet_if_type_is_not_set(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.getStorageKey = Mock()
        storage.getStorageKey.return_value = "some_key"
        storage.retrieveResultSet = Mock()

        storage.retrieve("some_key")

        storage.retrieveResultSet.assert_called_with("some_key")
    def test_retrieve_should_call_getStorageKey_to_fetch_correct_storage_key(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.getStorageKey = Mock()
        storage.getStorageKey.return_value = "some_key"

        storage.retrieve("some_key", "some_value", {"prepend": "true"})

        storage.getStorageKey.assert_called_with("some_key", "some_value",
                                                 {"prepend": "true"})
    def test_getReversePlaylistOrder_should_call_retrieve_to_fetch_reverse_value(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "true"

        result = storage.getReversePlaylistOrder({"playlist": "some_playlists"})

        assert result == True
    def test_getStoredArtists_should_call_retrieve_to_get_list_of_artists(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = []
        # storage.retrieve.return_value = [("some_title", "some_artist")]

        storage.getStoredArtists({"store": "somestore"})

        storage.retrieve.assert_called_with({"store": "somestore"})
    def test_deleteStoredSearch_should_remove_search_from_list_before_calling_store(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})

        storage.storeSettings.assert_called_with({"delete": "some_search2"}, [])
    def test_reversePlaylistOrder_should_call_store_to_save_reverse_value(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({"playlist": "some_playlists"})

        storage.store.assert_called_with({"playlist": "some_playlists"}, "true", "value")
    def test_reversePlaylistOrder_should_executebuiltin_on_succes(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({"playlist": "some_playlists"})

        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with("Container.Refresh")
    def test_getReversePlaylistOrder_should_return_false_if_playlist_is_not_in_params(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "true"
        storage.store = Mock()

        result = storage.getReversePlaylistOrder()

        assert result == False
    def test_deleteStoredSearch_should_call_executebuiltin(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})

        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with("Container.Refresh")
    def test_deleteStoredSearch_should_call_executebuiltin(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})

        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with(
            'Container.Refresh')
    def test_saveStoredSearch_should_exit_cleanly_if_search_is_not_in_params(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({})

        assert storage.retrieve.call_count == 0
        assert storage.storeSettings.call_count == 0
    def test_reversePlaylistOrder_should_exit_cleanly_if_playlist_params_is_missing(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({})

        assert storage.retrieve.call_count == 0
        assert storage.store.call_count == 0
    def test_getReversePlaylistOrder_should_call_retrieve_to_fetch_reverse_value(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "true"

        result = storage.getReversePlaylistOrder(
            {"playlist": "some_playlists"})

        assert (result == True)
    def test_getReversePlaylistOrder_should_return_false_if_playlist_is_not_in_params(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "true"
        storage.store = Mock()

        result = storage.getReversePlaylistOrder()

        assert (result == False)
    def test_reversePlaylistOrder_should_executebuiltin_on_succes(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({"playlist": "some_playlists"})

        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with(
            'Container.Refresh')
    def test_getStoredArtists_should_call_retrieve_to_get_list_of_artists(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = []
        #storage.retrieve.return_value = [("some_title", "some_artist")]

        storage.getStoredArtists({"store": "somestore"})

        storage.retrieve.assert_called_with({"store": "somestore"})
    def test_getStoredArtists_should_return_proper_list_structure(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = [("some_title", "some_artist")]

        (result, status) = storage.getStoredArtists({"path": "some_path", "store": "somestore"})
        assert result[0]["artist"] == "some_artist"
        assert result[0]["Title"] == "some_title"
        assert result[0]["scraper"] == "music_artist"
        assert result[0].has_key("icon")
        assert result[0].has_key("thumbnail")
    def test_reversePlaylistOrder_should_call_store_to_save_reverse_value(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({"playlist": "some_playlists"})

        storage.store.assert_called_with({'playlist': 'some_playlists'},
                                         'true', 'value')
    def test_reversePlaylistOrder_should_exit_cleanly_if_playlist_params_is_missing(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = "false"
        storage.store = Mock()

        storage.reversePlaylistOrder({})

        assert (storage.retrieve.call_count == 0)
        assert (storage.store.call_count == 0)
    def test_saveStoredSearch_should_exit_cleanly_if_search_is_not_in_params(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({})

        assert (storage.retrieve.call_count == 0)
        assert (storage.storeSettings.call_count == 0)
    def test_deleteStoredSearch_should_remove_search_from_list_before_calling_store(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})

        storage.storeSettings.assert_called_with({"delete": "some_search2"},
                                                 [])
    def test_editStoredSearch_should_exit_cleanly_if_search_param_is_missing(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules["__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.editStoredSearch({})

        assert storage.storeSettings.call_count == 0
        assert storage.retrieve.call_count == 0
    def test_editStoredSearch_should_call_saveStoredSearch(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules["__main__"].language.return_value = "some_title"
        sys.modules["__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()
        storage.saveStoredSearch = Mock()

        storage.editStoredSearch({"search": "some_search1", "action": "edit_disco"})

        storage.saveStoredSearch.assert_called_with({"search": "some_search3", "scraper": "search_disco"})
    def test_getStoredArtists_should_return_proper_list_structure(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = [("some_title", "some_artist")]

        (result, status) = storage.getStoredArtists({
            "path": "some_path",
            "store": "somestore"
        })
        assert (result[0]["artist"] == "some_artist")
        assert (result[0]["Title"] == "some_title")
        assert (result[0]["scraper"] == "music_artist")
        assert (result[0].has_key("icon"))
        assert (result[0].has_key("thumbnail"))
    def test_editStoredSearch_should_exit_cleanly_if_search_param_is_missing(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules[
            "__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.editStoredSearch({})

        assert (storage.storeSettings.call_count == 0)
        assert (storage.retrieve.call_count == 0)
    def test_editStoredSearch_should_remove_old_search_param_before_exiting(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules["__main__"].language.return_value = "some_title"
        sys.modules["__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()
        storage.saveStoredSearch = Mock()
        params = {"search": "some_search1", "action": "edit_disco", "old_search": "some_search4"}

        storage.editStoredSearch(params)

        assert params.has_key("old_search") == False
    def test_deleteStoredSearch_should_call_unquote_on_delete_param(self):
        patcher = patch("urllib.unquote_plus")
        patcher.start()
        import urllib
        urllib.unquote_plus.return_value = "some_unquoted_search"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search1"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})
        args = urllib.unquote_plus.call_args
        patcher.stop()

        assert (args[0][0] == "some_search2")
    def test_deleteStoredSearch_should_call_unquote_on_delete_param(self):
        patcher = patch("urllib.unquote_plus")
        patcher.start()
        import urllib

        urllib.unquote_plus.return_value = "some_unquoted_search"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search1"]
        storage.storeSettings = Mock()

        storage.deleteStoredSearch({"delete": "some_search2"})
        args = urllib.unquote_plus.call_args
        patcher.stop()

        assert args[0][0] == "some_search2"
    def test_getStoredArtists_should_call_retrieve_to_get_artist_thumbnails(self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = [("some_title", "some_artist")]

        storage.getStoredArtists({"path": "some_path", "store": "somestore"})

        storage.retrieve.assert_called_with(
            {"path": "some_path", "store": "somestore"},
            "thumbnail",
            {
                "artist": "some_artist",
                "Title": "some_title",
                "scraper": "music_artist",
                "path": "some_path",
                "thumbnail": [("some_title", "some_artist")],
                "icon": "music",
            },
        )
    def test_editStoredSearch_should_call_saveStoredSearch(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules["__main__"].language.return_value = "some_title"
        sys.modules[
            "__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()
        storage.saveStoredSearch = Mock()

        storage.editStoredSearch({
            "search": "some_search1",
            "action": "edit_disco"
        })

        storage.saveStoredSearch.assert_called_with({
            'search': 'some_search3',
            'scraper': 'search_disco'
        })
    def test_editStoredSearch_should_set_search_params_before_exiting(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        sys.modules["__main__"].language.return_value = "some_title"
        sys.modules[
            "__main__"].common.getUserInput.return_value = "some_search3"
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = ["some_search2"]
        storage.storeSettings = Mock()
        storage.saveStoredSearch = Mock()
        params = {
            "search": "some_search1",
            "action": "edit_disco",
            "old_search": "some_search4"
        }

        storage.editStoredSearch(params)

        assert (params.has_key("search"))
        assert (params["search"] == "some_search3")
    def test_getStoredArtists_should_call_retrieve_to_get_artist_thumbnails(
            self):
        storage = YouTubeStorage()
        storage.retrieve = Mock()
        storage.retrieve.return_value = [("some_title", "some_artist")]

        storage.getStoredArtists({"path": "some_path", "store": "somestore"})

        storage.retrieve.assert_called_with(
            {
                "path": "some_path",
                "store": "somestore"
            }, "thumbnail", {
                'artist': 'some_artist',
                'Title': 'some_title',
                'scraper': 'music_artist',
                'path': "some_path",
                'thumbnail': [('some_title', 'some_artist')],
                'icon': 'music'
            })