def test_logout(self): """ :desc: Test to check `logout` method successfully logs out a user. """ login(TEST_USERNAME, TEST_PASSWORD, True) resps = logout() self.assertEqual(resps[0]['data'], LOGOUT_SUCCESS_MSG) self.assertEqual(resps[0].get('code'), None)
def test_logout_from_existing_session(self): """ :desc: Test to check if user is logged out successfully from an existing session. """ login(TEST_USERNAME, TEST_PASSWORD, True) session = get_session() resps = logout(session=session) self.assertEqual(resps[0]['data'], LOGOUT_SUCCESS_MSG) self.assertEqual(resps[0].get('code'), None)
def test_session_limit_exceeded(self): """ :desc: Test to check `disconnect_session` argument in `login` method. """ # Log a user in forcefully to further check if `disconnect_session` # flag works or not. login(TEST_USERNAME, TEST_PASSWORD, True) resps = login(TEST_USERNAME, TEST_PASSWORD, False) self.assertEqual(resps[0]['data'], SESSION_LIMIT_MSG) self.assertEqual(resps[0]['code'], 400) resps = login(TEST_USERNAME, TEST_PASSWORD, True) self.assertEqual(resps[0]['data'], LOGIN_SUCCESS_MSG) self.assertEqual(resps[0].get('code'), None)
def test_session_limit_exceeded_disconnect(self): """Should disconnect active sessions and login in the current returning login success msg""" def mock_request(*args, **kwargs): if kwargs.get('method'): return MockHTMLResponse(data=f'<input id="{SESSION_LIMIT_FORM_ID[1:]}" />') else: return MockHTMLResponse(data=f"<input id='{CSRF_TOKEN_INPUT_ID}' value='ab' />") def mock_logout(*args, **kwargs): pass def mock_disconnect(*args, **kwargs): return [{'data': LOGIN_SUCCESS_MSG}] def mock_save_cookies(*args, **kwargs): pass self.monkeypatch.setattr(auth, 'request', mock_request) self.monkeypatch.setattr(auth, 'logout', mock_logout) self.monkeypatch.setattr(auth, 'disconnect_active_sessions', mock_disconnect) self.monkeypatch.setattr(auth, 'save_session_cookies', mock_save_cookies) resps = login(username='******', password='******', disconnect_sessions=True) self.assertEqual(resps[0]['data'], LOGIN_SUCCESS_MSG)
def test_no_csrf_token(self): """Should return csrf token missing message when there isn't one in the response html""" def mock_request(*args, **kwargs): return MockHTMLResponse(data="<input id='invalid-token-id' value='aaa' />") self.monkeypatch.setattr(auth, 'request', mock_request) resps = login(username='******', password='******', disconnect_sessions=False) self.assertEqual(resps[0]['data'], CSRF_TOKEN_MISSING) self.assertEqual(resps[0]['code'], 500)
def test_correct_auth_data(self): """ :desc: Test to check if correct data and code is returned when user provides correct authorization data. """ resps = login(TEST_USERNAME, TEST_PASSWORD, False) self.assertEqual(resps[0]['data'], LOGIN_SUCCESS_MSG) # absence of code in response indicates code=200 self.assertEqual(resps[0].get('code'), None)
def test_incorrect_auth_data(self): """ :desc: Test to check if correct data and code is returned when user provides incorrect authorization data. """ username = '******' password = '******' resps = login(username, password, False) self.assertEqual(resps[0]['data'], INCORRECT_CREDS_MSG) self.assertEqual(resps[0]['code'], 400)
def test_empty_auth_data(self): """ :desc: Test to check if correct data and code is returned when user provides empty authorization data. """ username = '' password = '' resps = login(username, password, False) self.assertEqual(resps[0]['data'], EMPTY_AUTH_DATA_MSG) self.assertEqual(resps[0]['code'], 400)
def test_status_code_not_200(self): """Should return code 503 when status code is not 200""" def mock_request(*args, **kwargs): if kwargs.get('method'): return MockHTMLResponse(status_code=500) else: return MockHTMLResponse(data=f"<input id='{CSRF_TOKEN_INPUT_ID}' value='ab' />") self.monkeypatch.setattr(auth, 'request', mock_request) resps = login(username='******', password='******', disconnect_sessions=False) self.assertEqual(resps[0]['code'], 503)
def test_incorrect_auth_data(self): """Should return incorrect creds message""" def mock_request(*args, **kwargs): if kwargs.get('method'): return MockHTMLResponse(data='<button>Login</button>') else: return MockHTMLResponse(data=f"<input id='{CSRF_TOKEN_INPUT_ID}' value='ab' />") self.monkeypatch.setattr(auth, 'request', mock_request) resps = login(username='******', password='******', disconnect_sessions=False) self.assertEqual(resps[0]['data'], INCORRECT_CREDS_MSG) self.assertEqual(resps[0]['code'], 400)
def test_correct_auth_data(self): """Should login on correct auth data""" def mock_request(*args, **kwargs): if kwargs.get('method'): return MockHTMLResponse( data=f'<button class="{LOGOUT_BUTTON_CLASS[1:]}">Logout</button>') else: return MockHTMLResponse(data=f"<input id='{CSRF_TOKEN_INPUT_ID}' value='ab' />") def mock_save_cookies(*args, **kwargs): pass self.monkeypatch.setattr(auth, 'request', mock_request) self.monkeypatch.setattr(auth, 'save_session_cookies', mock_save_cookies) resps = login(username='******', password='******', disconnect_sessions=False) self.assertEqual(resps[0]['data'], LOGIN_SUCCESS_MSG)
def test_session_limit_exceeded_no_disconnect(self): """Should return session limit msg on no disconnect""" def mock_request(*args, **kwargs): if kwargs.get('method'): return MockHTMLResponse(data=f'<input id="{SESSION_LIMIT_FORM_ID[1:]}" />') else: return MockHTMLResponse(data=f"<input id='{CSRF_TOKEN_INPUT_ID}' value='ab' />") def mock_logout(*args, **kwargs): pass self.monkeypatch.setattr(auth, 'request', mock_request) self.monkeypatch.setattr(auth, 'logout', mock_logout) resps = login(username='******', password='******', disconnect_sessions=False) self.assertEqual(resps[0]['data'], SESSION_LIMIT_MSG) self.assertEqual(resps[0]['code'], 400)
def test_empty_auth_data(self): """Should return empty auth data message""" resps = login(username='', password='', disconnect_sessions=False) self.assertEqual(resps[0]['data'], EMPTY_AUTH_DATA_MSG) self.assertEqual(resps[0]['code'], 400)
def main(argv=None): if argv is None: argv = sys.argv try: parser = create_parser() args = parser.parse_args(argv[1:]) username = args.login is_logout = args.logout disconnect_sessions = args.disconnect_sessions user = args.user team = args.team ratings = args.ratings country = args.country institution = args.institution institution_type = args.institution_type problem_code = args.problem submit = args.submit search = args.search contest = args.contest contests = args.contests show_past = args.show_past tags = args.tags solutions = args.solutions solution_code = args.solution language = args.language result = args.result lines = args.lines sort = args.sort order = args.order page = args.page resps = [] if username != INVALID_USERNAME: resps = login(username=username, disconnect_sessions=disconnect_sessions) elif is_logout: resps = logout() elif problem_code: resps = get_description(problem_code, contest or CC_PRACTICE) elif submit: resps = submit_problem(*submit) elif search: resps = search_problems(sort, order, search) elif contest: resps = get_contest_problems(sort, order, contest) elif contests: resps = get_contests(show_past) elif isinstance(tags, list): resps = get_tags(sort, order, tags) elif solutions: resps = get_solutions(sort, order, solutions, page, language, result, user) elif solution_code: resps = get_solution(solution_code) elif user: resps = get_user(user) elif team: resps = get_team(team) elif ratings: resps = get_ratings(sort, order, country, institution, institution_type, page, lines) else: parser.print_help() if not resps: resps = [GENERIC_RESP] for resp in resps: print_response(**resp) return resps except KeyboardInterrupt: print('\nBye.') return [{"data": "\nBye."}] return [{"data": "0"}]