def test_addListItem_should_call_addFolderListItem_if_item_doesnt_have_an_action(self):
     navigation = BlipTVNavigation()
     navigation.addFolderListItem = Mock()
     
     navigation.addListItem({}, {})
     
     navigation.addFolderListItem.assert_called_with({}, {})
 def test_addListItem_should_call_addActionListItem_if_item_has_action(self):
     navigation = BlipTVNavigation()
     navigation.addActionListItem = Mock()
     
     navigation.addListItem({}, {"action": "some_action"})
     
     navigation.addActionListItem.assert_called_with({}, {"action": "some_action"})
    def test_addListItem_should_call_addVideoListItem_if_item_action_is_play_video(self):
        navigation = BlipTVNavigation()
        navigation.addVideoListItem = Mock()

        navigation.addListItem({}, {"action": "play_video"})

        navigation.addVideoListItem.assert_called_with({}, {"action": "play_video"}, 0)
    def test_listMenu_should_call_list_if_store_in_params(self):
        sys.argv = ["something", -1, "something_else"]
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()
        navigation.listMenu({"path": "/root/some_other_path", "store": "some_store"})

        navigation.list.assert_called_with({"path": "/root/some_other_path", "store": "some_store"})
    def test_listMenu_should_call_settings_getSetting_to_get_listview(self):
        sys.argv = ["something", -1, "something_else"]
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/some_other_path"})

        sys.modules["__main__"].settings.getSetting.assert_called_with("list_view")
    def test_listMenu_should_call_xbmc_plugin_end_of_directory_correctly(self):
        sys.argv = ["something", -1, "something_else"]
        settings = ["1", "true", "1"]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: settings.pop()
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/some_other_path"})

        sys.modules["__main__"].xbmcplugin.endOfDirectory.assert_called_with(cacheToDisc=True, handle=-1, succeeded=True)
    def test_listMenu_should_call_xbmc_executeBuiltin_correctly_if_list_view_is_set(self):
        sys.argv = ["something", -1, "something_else"]
        settings = ["1", "true", "1"]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: settings.pop()
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/some_other_path"})

        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with('Container.SetViewMode(500)')
    def test_listMenu_should_check_if_download_path_is_set_to_decide_if_download_folder_is_visible(self):
        sys.argv = ["something", -1, "something_else"]
        list = ["true", "true", "true", "", "true"]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: list.pop()
        navigation = BlipTVNavigation()
        navigation.categories = ({"path": "/root/my_first_level/my_second_level1", "feed": "downloads"}, {"path": "/root/my_first_level/my_second_level2", "feed": "downloads"})
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/my_first_level", "feed": "downloads"})

        navigation.addListItem.assert_called_with({'feed': 'downloads', 'path': '/root/my_first_level'}, {'feed': 'downloads', 'path': '/root/my_first_level/my_second_level1'})
    def test_listMenu_should_only_list_subfolders_to_a_path(self):
        sys.argv = ["something", -1, "something_else"]
        list = ["", "", "", ""]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: list.pop()
        navigation = BlipTVNavigation()
        navigation.categories = ({"path": "/root/my_first_level"}, {"path": "/root/my_first_level/my_second_level"}, {"path": "/root/my_other_first_level"}, {"path": "/root/my_other_first_level/my_other_second_level"})
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/my_first_level"})

        navigation.addListItem.assert_called_with({"path": "/root/my_first_level"}, {"path": "/root/my_first_level/my_second_level"})
    def test_listMenu_should_use_visibility_from_settings_to_decide_if_items_are_displayed(self):
        sys.argv = ["something", -1, "something_else"]
        list = ["false", "true", "false", "true"]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: list.pop()
        navigation = BlipTVNavigation()
        navigation.categories = ({"path": "/root/my_first_level"}, {"path": "/root/my_first_level/my_second_level1"}, {"path": "/root/my_first_level/my_second_level2"}, {"path": "/root/my_first_level/my_second_level3"})
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/my_first_level"})

        navigation.addListItem.assert_any_call({"path": "/root/my_first_level"}, {"path": "/root/my_first_level/my_second_level1"})
        navigation.addListItem.assert_any_call({"path": "/root/my_first_level"}, {"path": "/root/my_first_level/my_second_level3"})
    def test_listMenu_should_traverse_menustructure_correctly(self):
        sys.argv = ["something", -1, "something_else"]
        sys.modules["__main__"].settings.getSetting.return_value = "true"
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu()

        args = navigation.addListItem.call_args_list

        for arg in args:
            assert(arg[0][1]["path"].replace('/root/', '').find('/') < 0)
        assert(navigation.addListItem.call_count > 1)
    def test_listMenu_should_call_settings_getSetting_to_get_listview_twice(self):
        sys.argv = ["something", -1, "something_else"]
        settings = ["0", "0", "true"]
        sys.modules["__main__"].settings.getSetting.side_effect = lambda x: settings.pop()
        navigation = BlipTVNavigation()
        navigation.list = Mock()
        navigation.addListItem = Mock()

        navigation.listMenu({"path": "/root/some_other_path"})

        sys.modules["__main__"].settings.getSetting.assert_called_with("list_view")
        counter = 0
        for arg in sys.modules["__main__"].settings.getSetting.call_args_list:
            if arg[0][0] == "list_view":
                counter += 1
        assert(counter == 1)