def test_writes_new_token_if_re_authenticating(self, mock_auth_resp_url, mock_open, mock_get): mock_auth_resp_url.return_value = ( f'{FAKE_API_URL}/?code=banana&state={FAKE_STATE}') send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) prefs = load_prefs(TEMP_FILE) assert prefs['oauth2']['access_token'] == NEW_ACCESS_TOKEN
def test_re_authentication_allows_webbrowser_to_fail( self, mock_auth_resp_url, mock_open, mock_get): mock_open.side_effect = explode(NotADirectoryError) mock_auth_resp_url.return_value = ( f'{FAKE_API_URL}/?code=banana&state={FAKE_STATE}') send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert self.sesh.token['access_token'] == NEW_ACCESS_TOKEN
def test_if_method_isnt_off_it_blows_up(self, mock_get): self.opts['<method>'] = 'banana' try: send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) except APIBuddyException as err: assert 'went wrong' in err.title assert 'http method' in err.message else: assert False
def test_checks_internet_connection(self): try: send_request( self.sesh, self.prefs, self.opts, TEMP_FILE, ) except ConnectionException: assert True else: assert False
def test_exits_gracefully_on_keyboard_interrupt(self): try: send_request( self.sesh, self.prefs, self.opts, TEMP_FILE, ) except SystemExit as err: assert err.code == 130 else: assert False
def test_can_timeout_on_internet_connection(self): try: send_request( self.sesh, self.prefs, self.opts, TEMP_FILE, ) except TimeoutException: assert True else: assert False
def test_uses_api_version_if_given(self, mock_get): params = {'fake_param': 'fake_value'} self.prefs['api_version'] = FAKE_API_VERSION self.opts['<params>'] = params mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert (mock_resp.url == f'{FAKE_API_URL}/{FAKE_API_VERSION}/{FAKE_ENDPOINT}')
def test_adds_json_to_requests(self, mock_get): data = '{"dis":"json"}' self.opts['<data>'] = data for method in HTTP_METHODS: self.opts['<method>'] = method mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) if method == GET: assert mock_resp.data is None else: assert mock_resp.data == data
def test_can_print_request_details(self, mock_get): self.opts['<params>'] = { 'name': 'george-costanza', 'occupations': [ 'architect', 'marine-biologist', ], 'has_hair': 'false', } self.opts['<data>'] = { 'name': 'Cosmo Kramer', 'occupations': [ 'Bagelrista', 'Car Parker', ], 'has_hair': True, } self.opts['<method>'] = 'post' self.prefs['verboseness']['request'] = True # should not raise any errors send_request(self.sesh, self.prefs, self.opts, TEMP_FILE)
def test_re_authenticates_if_token_is_expired(self, mock_auth_resp_url, mock_open, mock_get): mock_auth_resp_url.return_value = ( f'{FAKE_API_URL}/?code=banana&state={FAKE_STATE}') send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert self.sesh.token['access_token'] == NEW_ACCESS_TOKEN
def test_skips_authentication_if_token_is_valid(self, mock_authenticate, mock_get): mock_authenticate.side_effect = explode() # should not get called send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert self.sesh.token['access_token'] == FAKE_ACCESS_TOKEN
def test_honors_verify_prefs(self, mock_get): mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert mock_resp.verify is True self.prefs['verify_ssl'] = False mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert mock_resp.verify is False
def test_uses_params(self, mock_get): params = {'fake_param': 'fake_value'} self.opts['<params>'] = params mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert mock_resp.params == params
def test_adds_endpoint_to_api_url(self, mock_get): mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert mock_resp.url == f'{FAKE_API_URL}/{FAKE_ENDPOINT}'
def test_checks_method(self, mock_get): for method in HTTP_METHODS: self.opts['<method>'] = method resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert resp.json()[method] is True
def test_returns_a_response(self, mock_get): mock_resp = send_request(self.sesh, self.prefs, self.opts, TEMP_FILE) assert mock_resp.status_code == 200