def test_login_should_tell_xbmc_to_refresh_the_current_folder_listing_if_login_was_success_full(self):
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login()
        
        sys.modules["__main__"].xbmc.executebuiltin.assert_called_with("Container.Refresh")
    def test_login_should_call_xbmc_open_settings_to_allow_user_to_revise_credentials(self):
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login()

        sys.modules["__main__"].settings.openSettings.assert_called_with()
    def test_login_should_check_debug_flag_to_ensure_we_get_proper_debug_incase_of_errors(self):
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login()

        sys.modules["__main__"].pluginsettings.debugModeIsEnabled.assert_called_with()
    def test_getLoginInfo_should_ask_for_cookies(self):
        sys.modules["__main__"].settings.getSetting.return_value = "" 
        sys.modules["__main__"].common.parseDOM.side_effect = [["honk honk"], ["honk honk2"]] 
        sys.modules["__main__"].common.getCookieInfoAsHTML.return_value = ""
        login = YouTubeLogin()

        result = login._getLoginInfo("   USERNAME', 'some_value" + '")')
        sys.modules["__main__"].common.getCookieInfoAsHTML.assert_called_with()
 def test_apiLogin_should_follow_redirect_if_statewrapper_present(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.side_effect = ["", "","", ["some_code"], "", "", "", ""]
     login = YouTubeLogin()
     
     login._apiLogin()
     
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
    def test_apiLogin_should_call_oauth2_login_url_only_one_time_if_url_fails(self):
        sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        login._apiLogin()

        assert(sys.modules["__main__"].core._fetchPage.call_count == 1)
 def test_httpLogin_should_fail_with_captcha(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":" captcha","status":200}
     sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
     sys.modules["__main__"].common.parseDOM.return_value = ""
     login = YouTubeLogin()
     result = login._httpLogin({"new":"true"})
     print repr(result)
     assert(result == ({'content': ' captcha', 'status': 200},500))
 def test_apiLogin_should_request_token_if_code_present(self):
     dom_values = ["","","",["some_code"],"",""]
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "", y ="",attrs = {},ret = {}: dom_values.pop()
     login = YouTubeLogin()
     
     login._apiLogin()
     
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
 def test_apiLogin_should_follow_redirect_if_statewrapper_present(self):
     dom_values = ["","","",["some_state_wrapper"],["some_new_url"]]
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "", y ="",attrs = {},ret = {}: dom_values.pop()
     login = YouTubeLogin()
     
     login._apiLogin()
     
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
    def test_login_should_call_authorize_if_refresh_token_didnt_work(self):
        sys.modules["__main__"].core._oRefreshToken.return_value = False
        login = YouTubeLogin()
        login.authorize = Mock(return_value=("",303))

        login.login()
        
        sys.modules["__main__"].core._oRefreshToken.assert_called_with()
        login.authorize.assert_called_with()
    def test_fillLoginInfo_should_use_parseDOM(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "value1"
        sys.modules["__main__"].pluginsettings.userPassword.return_value = "value1"
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        result = login._fillLoginInfo("new")

        assert(sys.modules["__main__"].common.parseDOM.call_count > 0)
    def test_authorize_should_call_apiLogin_if_httplogin_succeded(self):
        login = YouTubeLogin()
        login._apiLogin = Mock(return_value=("",200))
        login._httpLogin = Mock(return_value=("",200))

        login.authorize()

        login._httpLogin.assert_any_call({ "new": "true"})
        login._apiLogin.assert_any_call()
    def test_fillLoginInfo_should_use_parseDOM(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "value1"
        sys.modules["__main__"].pluginsettings.userPassword.return_value = "value1"
        sys.modules["__main__"].common.parseDOM.side_effect = [["smsToken", "GALX"], ["value2"], ["value2"]]
        login = YouTubeLogin()
        
        result = login._fillLoginInfo({"content": "new", "new_url": "url"})

        assert(sys.modules["__main__"].common.parseDOM.call_count > 0)
 def test_apiLogin_should_provide_correct_message_and_failure_status_code_on_failure(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.return_value = ""
     login = YouTubeLogin()
     
     result = login._apiLogin()
     
     sys.modules["__main__"].language.assert_called_with(30609)
     assert(result[1] == 303)	
 def test_apiLogin_should_request_token_if_code_present(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.side_effect = ["", "","", ["some_code"], "", "", "", ""]
     login = YouTubeLogin()
     
     login._apiLogin()
     
     print(repr(sys.modules["__main__"].core._fetchPage.call_count))
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
 def test_apiLogin_should_call_fetchPage_with_correct_params(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":""}
     sys.modules["__main__"].common.parseDOM.return_value = ""
     login = YouTubeLogin()
     
     login._apiLogin()
     
     args = sys.modules["__main__"].core._fetchPage.call_args
     assert(args[0][0].has_key("link"))
    def test_login_should_get_both_old_and_new_user_name_to_check_for_user_changes(self):
        sys.modules["__main__"].settings.getSetting.return_value = ""
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login()

        sys.modules["__main__"].pluginsettings.userName.call_count = 2
        sys.modules["__main__"].pluginsettings.userPassword.call_count = 2
    def test_login_should_exit_cleanly_if_user_hasnt_entered_a_username(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = ""
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        (result, status) = login.login()

        assert (result == "")
        assert (status == 200)
    def test_httpLogin_should_call_findErrors_on_login_failure(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {"content":"","status":200}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        result = login._httpLogin({"new":"true"})

        sys.modules["__main__"].core._findErrors.assert_called_with({'content': '', 'status': 200})
    def test_login_should_ask_core_to_refresh_security_token_if_we_have_an_existing_token_and_credentials_are_unchanged(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "some_user"
        sys.modules["__main__"].pluginsettings.userPassword.return_value = "some_pass"
        sys.modules["__main__"].pluginsettings.authenticationRefreshRoken.return_value = "some_token"
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login({"new":"false"})

        sys.modules["__main__"].core._oRefreshToken.assert_any_call()
 def test_httpLogin_should_check_if_new_is_in_params_collection_before_resetting_login_info(self):
     sys.modules["__main__"].core._fetchPage.return_value = {"content":"","status":200}
     sys.modules["__main__"].settings.getSetting.return_value = "true" 
     sys.modules["__main__"].common.parseDOM.return_value = ""
     login = YouTubeLogin()
     
     result = login._httpLogin({"new":"false"})
     
     assert(sys.modules["__main__"].settings.setSetting.call_count == 0)
     assert(sys.modules["__main__"].core._fetchPage.call_count == 0)
    def test_authorize_should_reset_oauth2_data_when_refreshing(self):
        sys.modules["__main__"].settings.getSetting.return_value = ""
        login = YouTubeLogin()
        login._httpLogin = Mock(return_value=("",303))

        login.authorize()

        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_access_token","")
        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_refresh_token","")
        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_expires_at","")
 def test_fillUserPin_should_ask_user_for_user_pin(self):
     sys.modules["__main__"].settings.getSetting.return_value = "" 
     sys.modules["__main__"].common.parseDOM.return_value = "something"
     sys.modules["__main__"].language.return_value = "someTitle"
     sys.modules["__main__"].common.getUserInputNumbers.return_value = "123456"
     login = YouTubeLogin()
     
     result = login._fillUserPin("new")
     
     sys.modules["__main__"].common.getUserInputNumbers.assert_called_with('someTitle')
    def test_login_should_not_ask_core_to_refresh_security_token_if_user_password_has_changed(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "some_user"
        sys.modules["__main__"].pluginsettings.userPassword.side_effect = ["some_pass","some_other_pass"]
        sys.modules["__main__"].pluginsettings.authenticationRefreshRoken.return_value = "some_token"
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([],200))

        login.login({"new":"false"})

        assert(sys.modules["__main__"].core._oRefreshToken.call_count == 0)
    def test_fillUserPin_should_not_return_url_data_structure_if_values_are_missing(self):
        sys.modules["__main__"].settings.getSetting.return_value = ""
        sys.modules["__main__"].common.parseDOM.return_value = ""
        sys.modules["__main__"].language.return_value = ""
        sys.modules["__main__"].common.getUserInput.return_value = ""
        sys.modules["__main__"].common.getUserInputNumbers.return_value = ""
        login = YouTubeLogin()
        
        result = login._fillUserPin("new")

        assert(result == {})                
    def test_fillLoginInfo_should_ask_user_for_password_if_not_set(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = ""
        sys.modules["__main__"].pluginsettings.userPassword.return_value = ""
        sys.modules["__main__"].common.parseDOM.side_effect = [["GALX"], [""]]
        sys.modules["__main__"].language.return_value = "someTitle"
        sys.modules["__main__"].common.getUserInput.return_value = "somePword"
        login = YouTubeLogin()
        
        result = login._fillLoginInfo({"content": "new", "new_url": "url"})

        sys.modules["__main__"].common.getUserInput.assert_any_call('someTitle', hidden=True)
    def test_authorize_should_show_refreshing_folder_message_on_success(self):
        sys.modules["__main__"].language.side_effect = ["string1", "string2"]

        login = YouTubeLogin()
        login._apiLogin = Mock(return_value=("",200))
        login._httpLogin = Mock(return_value=("",200))

        login.authorize()

        sys.modules["__main__"].utils.showErrorMessage.assert_called_with("string1","",303)
        sys.modules["__main__"].language.assert_called_with(30031)
    def test_authorize_should_show_error_message_on_api_login_failure(self):
        sys.modules["__main__"].language.side_effect = ["string1", "string2"]

        login = YouTubeLogin()
        login._apiLogin = Mock(return_value=("",500))
        login._httpLogin = Mock(return_value=("",200))

        login.authorize()

        sys.modules["__main__"].utils.showErrorMessage.assert_called_with("string1","",500)
        sys.modules["__main__"].language.assert_called_with(30609)
 def test_apiLogin_should_provide_correct_message_and_success_status_code_on_success(self):
     fetch_values = [{"content":""},{"content":'{"expires_in":"12", "access_token":"my_favorite_access_token", "refresh_token":"my_favorite_refresh_token" }'}]
     sys.modules["__main__"].core._fetchPage.side_effect = lambda x: fetch_values.pop()
     sys.modules["__main__"].settings.getSetting.return_value = "" 
     sys.modules["__main__"].common.parseDOM.return_value = ""
     login = YouTubeLogin()
     
     result = login._apiLogin()
     
     sys.modules["__main__"].language.assert_called_with(30030)
     assert(result[1] == 200)
    def test_httpLogin_should_look_save_cookiejar_on_login_success(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {"content": "logged_in","status":200}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.side_effect = [ ["USERNAME"], ["USERNAME"]]
        login = YouTubeLogin()

        result = login._httpLogin({"new":"true"})

        assert(sys.modules["__main__"].core._fetchPage.call_count == 1)
        assert(sys.modules["__main__"].cookiejar.save.call_count == 1)
Example #31
0
    def test_getLoginInfo_should_return_proper_status_on_success(self):
        dummy_content = Mock()
        dummy_content.find.return_value = -1
        sys.modules["__main__"].settings.getSetting.return_value = ""
        sys.modules["__main__"].common.parseDOM.side_effect = [["honk"],
                                                               ["honk honk"],
                                                               ["honk honk2"]]
        sys.modules["__main__"].common.getCookieInfoAsHTML.return_value = ""

        login = YouTubeLogin()

        result = login._getLoginInfo("")

        assert (result == 200)
    def test_httpLogin_should_check_if_new_is_in_params_collection_before_resetting_login_info(
            self):
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()

        result = login._httpLogin({"new": "false"})

        assert (sys.modules["__main__"].settings.setSetting.call_count == 0)
        assert (sys.modules["__main__"].core._fetchPage.call_count == 0)
Example #33
0
    def test_fillUserPin_should_call_parseDOM_for_smsToken(self):
        sys.modules["__main__"].settings.getSetting.return_value = ""
        sys.modules["__main__"].common.parseDOM.return_value = "something"
        sys.modules["__main__"].language.return_value = ""
        sys.modules["__main__"].common.getUserInput.return_value = ""
        sys.modules[
            "__main__"].common.getUserInputNumbers.return_value = "123456"
        login = YouTubeLogin()

        result = login._fillUserPin("new")

        args = sys.modules["__main__"].common.parseDOM.call_args_list
        assert (args[0][0] == ("new", "input"))
        assert (args[0][1] == {'attrs': {'name': 'smsToken'}, 'ret': 'value'})
    def test_apiLogin_should_search_for_state_wrapper_and_new_url(self):
        sys.modules["__main__"].core._fetchPage.return_value = {"content": ""}
        sys.modules["__main__"].common.parseDOM.side_effect = [
            "", "", "", "", "some_state_wrapper", "some_new_url"
        ]
        login = YouTubeLogin()

        login._apiLogin()

        args = sys.modules["__main__"].common.parseDOM.call_args
        assert (args[0] == ("", "input"))
        assert (args[1].has_key("attrs"))
        assert (args[1]["attrs"].has_key("id"))
        assert (args[1]["attrs"]["id"] == "code")
    def test_login_should_ask_core_to_refresh_security_token_if_we_have_an_existing_token_and_credentials_are_unchanged(
            self):
        sys.modules[
            "__main__"].pluginsettings.userName.return_value = "some_user"
        sys.modules[
            "__main__"].pluginsettings.userPassword.return_value = "some_pass"
        sys.modules[
            "__main__"].pluginsettings.authenticationRefreshRoken.return_value = "some_token"
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([], 200))

        login.login({"new": "false"})

        sys.modules["__main__"].core._oRefreshToken.assert_any_call()
    def test_fillLoginInfo_should_get_username_and_passwords_from_pluginsettings(
            self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "value1"
        sys.modules[
            "__main__"].pluginsettings.userPassword.return_value = "value1"

        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.side_effect = [["GALX"], [""]]
        login = YouTubeLogin()

        result = login._fillLoginInfo({"content": "new", "new_url": "url"})

        sys.modules["__main__"].pluginsettings.userName.assert_any_call()
        sys.modules["__main__"].pluginsettings.userPassword.assert_any_call()
Example #37
0
    def test_fillLoginInfo_should_get_username_and_passwords_from_pluginsettings(
            self):
        sys.modules["__main__"].pluginsettings.userName.return_value = "value1"
        sys.modules[
            "__main__"].pluginsettings.userPassword.return_value = "value1"

        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()

        result = login._fillLoginInfo("new")

        sys.modules["__main__"].pluginsettings.userName.assert_any_call()
        sys.modules["__main__"].pluginsettings.userPassword.assert_any_call()
    def test_login_should_not_ask_core_to_refresh_security_token_if_user_password_has_changed(
            self):
        sys.modules[
            "__main__"].pluginsettings.userName.return_value = "some_user"
        sys.modules["__main__"].pluginsettings.userPassword.side_effect = [
            "some_pass", "some_other_pass"
        ]
        sys.modules[
            "__main__"].pluginsettings.authenticationRefreshRoken.return_value = "some_token"
        login = YouTubeLogin()
        login.authorize = Mock(return_value=([], 200))

        login.login({"new": "false"})

        assert (sys.modules["__main__"].core._oRefreshToken.call_count == 0)
Example #39
0
    def test_fillUserPin_should_call_parseDOM_for_smsToken(self):
        sys.modules["__main__"].settings.getSetting.return_value = "" 
        sys.modules["__main__"].common.parseDOM.side_effect = [["form"], ["smsToken"], ["value2"]]
        sys.modules["__main__"].language.return_value = ""
        sys.modules["__main__"].common.getUserInput.return_value = ""
        sys.modules["__main__"].common.getUserInputNumbers.return_value = "123456"
        login = YouTubeLogin()
        
        result = login._fillUserPin("new")

        args = sys.modules["__main__"].common.parseDOM.call_args_list

        print(repr(args))
        assert(args[0][0] == ("new","form"))
        assert(args[2][1] == {'attrs': {'name': 'smsToken'}, 'ret': 'value'})
Example #40
0
 def test_httpLogin_should_call_fetchPage_with_correct_fetch_options_if_fillUserPin_succeded(self):
     sys.modules["__main__"].core._findErrors.return_value = False
     page_values = [ {"content":" captcha","status":200, "location": "here"}, { "new_url": "http://www.mock.com", "content":"something,smsUserPin,somethingElse","status":200, "location": "here"}]
     sys.modules["__main__"].core._fetchPage.side_effect = lambda x: page_values.pop() 
     sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
     dom_values = [["Login"], [], [], [], []]
     sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "",y = "",attrs = {},ret = "": dom_values.pop()
     login = YouTubeLogin()
     login._fillUserPin = Mock()
     login._fillUserPin.return_value = "some_url_data"
     
     result = login._httpLogin({"new":"true"})
     
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
     sys.modules["__main__"].core._fetchPage.assert_called_with({'referer': 'http://www.mock.com', 'link': 'Login', 'url_data': 'some_url_data'})
Example #41
0
    def test_fillLoginInfo_should_not_return_login_info_if_values_are_missing(self):
        sys.modules["__main__"].pluginsettings.userName.return_value = ""
        sys.modules["__main__"].pluginsettings.userPassword.return_value = ""
        sys.modules["__main__"].common.parseDOM.side_effect = [["GALX"], [""]]
        sys.modules["__main__"].language.return_value = "someTitle"
        sys.modules["__main__"].common.getUserInput.return_value = "somePword"
        sys.modules["__main__"].common.makeAscii.return_value = ""
        login = YouTubeLogin()
        
        (galx, url_data) = login._fillLoginInfo({"content": "new", "new_url": "url"})

        print(repr(url_data))

        assert(galx == "")        
        assert(url_data == {'Passwd': 'somePword', 'GALX': '', 'Email': ''})
    def test_httpLogin_should_look_save_cookiejar_on_login_success(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "logged_in",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.side_effect = [["USERNAME"],
                                                               ["USERNAME"]]
        login = YouTubeLogin()

        result = login._httpLogin({"new": "true"})

        assert (sys.modules["__main__"].core._fetchPage.call_count == 1)
        assert (sys.modules["__main__"].cookiejar.save.call_count == 1)
Example #43
0
    def test_httpLogin_should_use_parseDOM_to_find_smsToken(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {"content":"","status":200}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        result = login._httpLogin({"new":"true"})

        args = sys.modules["__main__"].common.parseDOM.call_args_list

        print repr(args)
        assert(sys.modules["__main__"].core._fetchPage.call_count == 1)
        assert(args[4][0] == ('', 'input'))
        assert(args[4][1] == {'attrs': {'name': 'smsToken'}, 'ret': 'value'})
Example #44
0
    def test_httpLogin_should_use_parseDOM_to_check_for_login_form(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {"content":"","status":200}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        result = login._httpLogin({"new":"true"})

        args = sys.modules["__main__"].common.parseDOM.call_args_list

        print repr(args)
        assert(sys.modules["__main__"].core._fetchPage.call_count == 1)
        assert(args[2][0] == ("","form"))
        assert(args[2][1] == {'attrs': {'id': 'gaia_loginform'}, 'ret': 'action'})
Example #45
0
 def test_httpLogin_should_call_fetchPage_with_proper_fetch_options_if_fillLoginInfo_succeded(self):
     sys.modules["__main__"].core._findErrors.return_value = False
     dom_values = ["","","","","","","","",["someURL"],"", ""]
     sys.modules["__main__"].core._fetchPage.return_value = {"content":"somePage","status":200, "location": "here"}
     sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
     sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "",y = "",attrs = {},ret = "": dom_values.pop()
     login = YouTubeLogin()
     login._fillLoginInfo = Mock()
     login._fillLoginInfo.return_value = ("some_galx_value",{"some_key":"some_value"})
     
     result = login._httpLogin({"new":"true"})
     
     login._fillLoginInfo.assert_called_with({'content': 'somePage', 'status': 200, 'location': 'here'})
     assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
     sys.modules["__main__"].core._fetchPage.assert_called_with({'url_data': {'some_key': 'some_value'}, 'referer': 'here', 'link': 'someURL', 'hidden': 'true'})
    def test_fillLoginInfo_should_not_return_login_info_if_values_are_missing(
            self):
        sys.modules["__main__"].pluginsettings.userName.return_value = ""
        sys.modules["__main__"].pluginsettings.userPassword.return_value = ""
        sys.modules["__main__"].common.parseDOM.return_value = ""
        sys.modules["__main__"].language.return_value = "someTitle"
        sys.modules["__main__"].common.getUserInput.return_value = "somePword"
        login = YouTubeLogin()

        (galx, url_data) = login._fillLoginInfo({
            "content": "new",
            "new_url": "url"
        })

        assert (galx == "")
        assert (url_data == {})
    def test_fillUserPin_should_return_url_data_structure_if_all_values_are_found(
            self):
        sys.modules["__main__"].settings.getSetting.return_value = "value1"
        sys.modules["__main__"].common.parseDOM.side_effect = [["form"],
                                                               ["smsToken"],
                                                               ["value2"]]
        sys.modules["__main__"].language.return_value = "someTitle"
        sys.modules[
            "__main__"].common.getUserInputNumbers.return_value = "value3"
        login = YouTubeLogin()

        result = login._fillUserPin("new")

        print(repr(result))
        assert (result["smsUserPin"] == "value3")
        assert (result["smsToken"] == "value2")
    def test_apiLogin_should_call_fetchPage_with_correct_params_when_fetching_request_token(
            self):
        sys.modules["__main__"].core._fetchPage.return_value = {"content": ""}
        sys.modules["__main__"].common.parseDOM.side_effect = [
            "", "", ["some_code"], "", "", ""
        ]
        login = YouTubeLogin()

        login._apiLogin()

        args = sys.modules["__main__"].core._fetchPage.call_args[0][0]

        assert (args["link"] == "https://accounts.google.com/o/oauth2/token")
        assert (args.has_key("url_data"))
        assert (args["url_data"]["code"] == "some_code")
        assert (args["url_data"]["grant_type"] == "authorization_code")
    def test_httpLogin_should_call_fetchPage_with_proper_fetch_options_on_first_run(
            self):
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()

        result = login._httpLogin({"new": "true"})

        args = sys.modules["__main__"].core._fetchPage.call_args
        assert (sys.modules["__main__"].core._fetchPage.call_count == 1)
        print repr(args)
        assert (args[0][0] == {"link": "http://www.youtube.com/"})
    def test_httpLogin_should_call_getLoginInfo_on_login_success(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "<span class='masthead-user-username'>USERNAME</class>",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.side_effect = [["USERNAME"],
                                                               ["USERNAME"]]
        login = YouTubeLogin()
        login._getLoginInfo = Mock()
        login._getLoginInfo.return_value = 200

        result = login._httpLogin({"new": "true"})

        login._getLoginInfo.assert_called_with(["USERNAME"])
    def test_apiLogin_should_call_fetchPage_with_correct_params_on_redirect(
            self):
        sys.modules["__main__"].core._fetchPage.return_value = {"content": ""}
        sys.modules["__main__"].common.parseDOM.side_effect = [
            "", ["some_new_url"], ["some_state_wrapper"], "", "", "", ""
        ]
        login = YouTubeLogin()

        login._apiLogin()

        args = sys.modules["__main__"].core._fetchPage.call_args
        print(repr(args))
        assert (args[0][0]["link"] == "some_new_url")
        assert (args[0][0]["url_data"]["submit_access"] == "true")
        assert (
            args[0][0]["url_data"]["state_wrapper"] == "some_state_wrapper")
Example #52
0
    def test_httpLogin_should_call_fillUserPin_if_2factor_login_needs_smsUserPin(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        page_values = [ {"content":" captcha","status":200, "location": "here"}, { "new_url": "http://www.mock.com/", "content":"something,smsUserPin,somethingElse","status":200, "location": "here"}]
        sys.modules["__main__"].core._fetchPage.side_effect = lambda x: page_values.pop() 
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        dom_values = [["Login"], [], [], [], []]
        sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "",y = "",attrs = {},ret = "": dom_values.pop()

        login = YouTubeLogin()
        login._fillUserPin = Mock()
        login._fillUserPin.return_value = "123456"
        
        result = login._httpLogin({"new":"true"})
        
        assert(sys.modules["__main__"].core._fetchPage.call_count == 2)
        login._fillUserPin.assert_called_with("something,smsUserPin,somethingElse")
    def test_apiLogin_should_call_fetchPage_with_correct_params_on_redirect(
            self):
        dom_values = ["", "", "", ["some_state_wrapper"], ["some_new_url"]]
        sys.modules["__main__"].core._fetchPage.return_value = {"content": ""}
        sys.modules[
            "__main__"].common.parseDOM.side_effect = lambda x="", y="", attrs={
            }, ret={}: dom_values.pop()
        login = YouTubeLogin()

        login._apiLogin()

        args = sys.modules["__main__"].core._fetchPage.call_args
        assert (args[0][0]["link"] == "some_new_url")
        assert (args[0][0]["no-language-cookie"] == "true")
        assert (args[0][0]["url_data"]["submit_access"] == "true")
        assert (
            args[0][0]["url_data"]["state_wrapper"] == "some_state_wrapper")
    def test_httpLogin_should_return_existing_http_login_info_if_new_is_not_in_params(
            self):
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()

        result = login._httpLogin()

        sys.modules["__main__"].settings.getSetting.assert_called_with(
            "login_info")
        assert (sys.modules["__main__"].core._fetchPage.call_count == 0)
        assert (result[1] == 200)
        assert (result[0] == "smokey")
    def test_httpLogin_should_look_for_user_name_to_indicate_login_success(
            self):
        sys.modules["__main__"].core._findErrors.return_value = False
        sys.modules["__main__"].core._fetchPage.return_value = {
            "content": "logged_in",
            "status": 200
        }
        sys.modules["__main__"].settings.getSetting.return_value = "smokey"
        sys.modules["__main__"].common.parseDOM.side_effect = [["USERNAME"],
                                                               ["USERNAME"]]
        login = YouTubeLogin()
        login._getLoginInfo = Mock()

        result = login._httpLogin({"new": "true"})

        assert (sys.modules["__main__"].core._fetchPage.call_count == 1)
        login._getLoginInfo.assert_called_with(["USERNAME"])
    def test_getLoginInfo_should_call_setSetting_to_save_login_info(self):
        dummy_content = Mock()
        dummy_content.find.return_value = -1
        sys.modules["__main__"].settings.getSetting.return_value = ""
        sys.modules["__main__"].common.parseDOM.side_effect = [["honk honk"],
                                                               ["honk honk2"]]
        sys.modules["__main__"].common.getCookieInfoAsHTML.return_value = ""
        login = YouTubeLogin()

        result = login._getLoginInfo("")

        sys.modules["__main__"].common.getCookieInfoAsHTML.assert_called_with()
        assert (sys.modules["__main__"].settings.setSetting.call_count == 3)
        sys.modules["__main__"].settings.setSetting.assert_any_call(
            "login_info", "honk honk")
        sys.modules["__main__"].settings.setSetting.assert_any_call(
            "SID", "honk honk2")
Example #57
0
    def test_apiLogin_should_set_oauth_specific_values_on_success(self):
        patcher = patch("time.time")
        patcher.start()
        import time
        time.time = Mock(return_value=1)

        sys.modules["__main__"].core._fetchPage.side_effect = [{"content":'{"expires_in":"12", "access_token":"my_favorite_access_token", "refresh_token":"my_favorite_refresh_token" }'},{"content":""}]
        sys.modules["__main__"].settings.getSetting.return_value = ""
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        login._apiLogin()
        patcher.stop()

        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_expires_at", '13')
        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_access_token", "my_favorite_access_token")
        sys.modules["__main__"].settings.setSetting.assert_any_call("oauth2_refresh_token", "my_favorite_refresh_token")
Example #58
0
    def test_httpLogin_should_search_fetchPage_result_to_check_for_2factor_login(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        dummy_content = Mock()
        dummy_content.find.return_value = -1
        page_values = [ {"content":"","status":200}, {"content":dummy_content,"status":200}]
        sys.modules["__main__"].core._fetchPage.side_effect = lambda x: page_values.pop() 
        sys.modules["__main__"].core._fetchPage.return_value = {"content":dummy_content,"status":200}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.return_value = ""
        login = YouTubeLogin()
        
        result = login._httpLogin({"new":"true"})
        
        args = dummy_content.find.call_args_list

        assert(sys.modules["__main__"].core._fetchPage.call_count == 1)
        print repr(args)
        assert(args[1][0] == ("smsUserPin",))
Example #59
0
    def test_httpLogin_should_call_fetchPage_with_correct_fetch_options_if_smsToken_is_found(self):
        sys.modules["__main__"].core._findErrors.return_value = False
        dom_values = ["USERNAME", ["some cont"], ["some smsToken"], "", "", "", "", ["galx"], "", ""]
        login_values = [("",""), ("some_galx", "some_url_data")]
        sys.modules["__main__"].core._fetchPage.return_value = {"content":"","status":200, "location": "here"}
        sys.modules["__main__"].settings.getSetting.return_value = "smokey" 
        sys.modules["__main__"].common.parseDOM.side_effect = lambda x = "",y = "",attrs = {},ret = "": dom_values.pop()

        login = YouTubeLogin()
        login._fillLoginInfo = Mock()
        login._fillLoginInfo.side_effect = lambda x: login_values.pop()

        result = login._httpLogin({"new":"true"})

        print sys.modules["__main__"].core._fetchPage.call_count
        assert(sys.modules["__main__"].core._fetchPage.call_count == 3)
        print repr(sys.modules["__main__"].core._fetchPage.call_args_list)
        sys.modules["__main__"].core._fetchPage.assert_called_with({'referer': 'here', 'link': 'some cont', 'url_data': {'service': 'youtube', 'GALX': 'some_galx', 'PersistentCookie': 'yes', 'smsToken': 'some smsToken'}})
Example #60
0
 def test_fillLoginInfo_should_return_login_info_if_all_values_are_found(self):
     sys.modules["__main__"].pluginsettings.userName.return_value = "value1"
     sys.modules["__main__"].pluginsettings.userPassword.return_value = "value1"
     sys.modules["__main__"].common.parseDOM.side_effect = [["uilel", "dsh", "rmShown", "GALX"], ["value2"], ["value2"], ["value2"], ["value2"]]
     sys.modules["__main__"].language.return_value = "someTitle"
     sys.modules["__main__"].common.getUserInput.return_value = "somePword"
     sys.modules["__main__"].common.makeAscii.return_value = "value2"
     login = YouTubeLogin()
     
     (galx, url_data) = login._fillLoginInfo({"content": "new", "new_url": "url"})
     
     assert(galx == "value2")
     assert(url_data["uilel"] == "value2")
     assert(url_data["dsh"] == "value2")
     assert(url_data["rmShown"] == "value2")
     assert(url_data["GALX"] == "value2")
     assert(url_data["Passwd"] == "value1")
     assert(url_data["Email"] == "value1")