def test_saveStoredSearch_should_limit_search_collection_before_calling_store(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = [
            "some_search4",
            "some_search2",
            "some_search3",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
        ]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({"search": "some_search1", "old_search": "some_search2"})

        assert len(storage.storeSettings.call_args[0][1]) == 10
        storage.storeSettings.assert_called_with(
            {"search": "some_search1", "old_search": "some_search2"},
            ["some_search1", "some_search4", "some_search3", "", "", "", "", "", "", ""],
        )
    def test_saveStoredSearch_should_limit_search_collection_before_calling_store(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = [
            "some_search4", "some_search2", "some_search3", "", "", "", "", "",
            "", "", ""
        ]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({
            "search": "some_search1",
            "old_search": "some_search2"
        })

        assert (len(storage.storeSettings.call_args[0][1]) == 10)
        storage.storeSettings.assert_called_with(
            {
                "search": "some_search1",
                "old_search": "some_search2"
            }, [
                'some_search1', 'some_search4', 'some_search3', "", "", "", "",
                "", "", ""
            ])
    def test_saveStoredSearch_should_call_store_to_save_searches_collection(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({"search": "some_search1", "old_search": "some_search2"})

        assert storage.storeSettings.call_count > 0
    def test_saveStoredSearch_should_call_getSettings_to_get_max_searches_count(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({"search": "some_search1", "old_search": "some_search2"})

        sys.modules["__main__"].settings.getSetting.assert_called_with("saved_searches")
    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_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_saveStoredSearch_should_remove_old_search_from_collection_and_prepend_new_search(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search4", "some_search2", "some_search3"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({"search": "some_search1", "old_search": "some_search2"})

        storage.storeSettings.assert_called_with(
            {"search": "some_search1", "old_search": "some_search2"}, ["some_search1", "some_search4", "some_search3"]
        )
    def test_saveStoredSearch_should_call_store_to_save_searches_collection(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({
            "search": "some_search1",
            "old_search": "some_search2"
        })

        assert (storage.storeSettings.call_count > 0)
    def test_saveStoredSearch_should_call_getSettings_to_get_max_searches_count(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search2"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({
            "search": "some_search1",
            "old_search": "some_search2"
        })

        sys.modules["__main__"].settings.getSetting.assert_called_with(
            "saved_searches")
    def test_saveStoredSearch_should_call_unquote_on_search_param(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        patcher = patch("urllib.unquote_plus")
        patcher.start()
        import urllib
        urllib.unquote_plus.return_value = "some_unquoted_search"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = ["some_search1"]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({"search": "some_search"})

        args = urllib.unquote_plus.call_args
        patcher.stop()

        assert (args[0][0] == "some_search")
    def test_saveStoredSearch_should_call_unquote_on_search_param(self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        patcher = patch("urllib.unquote_plus")
        patcher.start()
        import urllib

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

        storage.saveStoredSearch({"search": "some_search"})

        args = urllib.unquote_plus.call_args
        patcher.stop()

        assert args[0][0] == "some_search"
    def test_saveStoredSearch_should_remove_old_search_from_collection_and_prepend_new_search(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "0"
        storage = YouTubeStorage()
        storage.retrieveSettings = Mock()
        storage.retrieveSettings.return_value = [
            "some_search4", "some_search2", "some_search3"
        ]
        storage.storeSettings = Mock()

        storage.saveStoredSearch({
            "search": "some_search1",
            "old_search": "some_search2"
        })

        storage.storeSettings.assert_called_with(
            {
                "search": "some_search1",
                "old_search": "some_search2"
            }, ['some_search1', 'some_search4', 'some_search3'])
    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_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_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_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'
        })