def test_client_initialization_with_invalid_requests_handler(): with pytest.raises(RuntimeError) as exc_info: MinimalClient( authentication_method=NoAuthentication(), response_handler=MockResponseHandler, request_formatter=None, ) assert str(exc_info.value) == "provided request_formatter must be a subclass of BaseRequestFormatter."
def test_no_authentication_method_does_not_alter_client(): client = APIClient( authentication_method=NoAuthentication(), response_handler=BaseResponseHandler, request_formatter=BaseRequestFormatter, ) assert client.get_default_query_params() == {} assert client.get_default_headers() == {} assert client.get_default_username_password_authentication() is None
def client_factory(build_with=None, request_strategy=None): """Return an initialized client class.""" factory_floor = { "json": MinimalClient( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ), "mocker": MinimalClient( authentication_method=NoAuthentication(), response_handler=MockResponseHandler, request_formatter=MockRequestFormatter, ), } client = factory_floor.get(build_with, factory_floor["mocker"]) if request_strategy is not None: client.set_request_strategy(request_strategy) return client
def test_client_initialization_with_invalid_request_strategy(): with pytest.raises(RuntimeError) as exc_info: MinimalClient( authentication_method=NoAuthentication(), response_handler=MockResponseHandler, request_formatter=MockRequestFormatter, request_strategy=object(), ) assert str( exc_info.value ) == "provided request_strategy must be an instance of BaseRequestStrategy."
def test_bad_response_error_codes(user_id, expected_error, expected_message, error_cassette): # Error cassette has been configured so that different users respond with different error codes client = Client( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ) url = Urls.user.format(id=user_id) # Test GET request with pytest.raises(expected_error) as exc_info: client.get(url) assert str(exc_info.value) == expected_message error_cassette.rewind() # Test POST request with pytest.raises(expected_error) as exc_info: client.post(url, data={"clientId": "1234"}) assert str(exc_info.value) == expected_message error_cassette.rewind() # Test PUT request with pytest.raises(expected_error) as exc_info: client.put(url, data={"clientId": "1234"}) assert str(exc_info.value) == expected_message error_cassette.rewind() # Test PATCH request with pytest.raises(expected_error) as exc_info: client.patch(url, data={"clientId": "1234"}) assert str(exc_info.value) == expected_message error_cassette.rewind() # Test DELETE request with pytest.raises(expected_error) as exc_info: client.delete(url) assert str(exc_info.value) == expected_message
def test_client_response_with_jsonmarshal(cassette): client = ClientWithJson( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ) users = client.list_users() assert len(users) == 3 assert users == [ User(user_id=1, first_name="Mike", last_name="Foo"), User(user_id=2, first_name="Sarah", last_name="Bar"), User(user_id=3, first_name="Barry", last_name="Baz"), ] assert cassette.play_count == 1 # User 1 requested successfully on first attempt user = client.get_user(user_id=1) assert user == User(user_id=1, first_name="Mike", last_name="Foo") assert cassette.play_count == 2 # User 2 failed on first attempt, succeeded on second user = client.get_user(user_id=2) assert user == User(user_id=2, first_name="Sarah", last_name="Bar") assert cassette.play_count == 4 new_user = client.create_user(first_name="Lucy", last_name="Qux") assert new_user == User(user_id=4, first_name="Lucy", last_name="Qux") assert cassette.play_count == 5 overwritten_user = client.overwrite_user(user_id=4, first_name="Lucy", last_name="Foo") assert overwritten_user == User(user_id=4, first_name="Lucy", last_name="Foo") assert cassette.play_count == 6 updated_user = client.update_user(user_id=4, first_name="Lucy", last_name="Qux") assert updated_user == User(user_id=4, first_name="Lucy", last_name="Qux") assert cassette.play_count == 7 # DELETE cassette doesn't seem to be working correctly. # deleted_user = client.delete_user(user_id=4) # assert deleted_user is None # assert cassette.play_count == 8 # paginated responds with a generator, so need to cast to list. pages = list(client.list_user_accounts_paginated(user_id=1)) assert len(pages) == 3 assert pages == [ AccountPage( results=[ Account(account_name="business", number="1234"), Account(account_name="expense", number="2345"), ], page=1, next_page=2, ), AccountPage( results=[ Account(account_name="fun", number="6544"), Account(account_name="holiday", number="9283"), ], page=2, next_page=3, ), AccountPage( results=[ Account(account_name="gifts", number="7827"), Account(account_name="home", number="1259"), ], page=3, next_page=None, ), ] # Fails to connect when connecting to non-existent url. with pytest.raises(UnexpectedError) as exc_info: client.get("mock://testserver") assert str(exc_info.value) == "Error when contacting 'mock://testserver'"
def test_client_response(cassette): client = Client( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ) users = client.list_users() assert len(users) == 3 assert users == [ { "userId": 1, "firstName": "Mike", "lastName": "Foo" }, { "userId": 2, "firstName": "Sarah", "lastName": "Bar" }, { "userId": 3, "firstName": "Barry", "lastName": "Baz" }, ] assert cassette.play_count == 1 # User 1 requested successfully on first attempt user = client.get_user(user_id=1) assert user == {"userId": 1, "firstName": "Mike", "lastName": "Foo"} assert cassette.play_count == 2 # User 2 failed on first attempt, succeeded on second user = client.get_user(user_id=2) assert user == {"userId": 2, "firstName": "Sarah", "lastName": "Bar"} assert cassette.play_count == 4 new_user = client.create_user(first_name="Lucy", last_name="Qux") assert new_user == {"userId": 4, "firstName": "Lucy", "lastName": "Qux"} assert cassette.play_count == 5 overwritten_user = client.overwrite_user(user_id=4, first_name="Lucy", last_name="Foo") assert overwritten_user == { "userId": 4, "firstName": "Lucy", "lastName": "Foo" } assert cassette.play_count == 6 updated_user = client.update_user(user_id=4, first_name="Lucy", last_name="Qux") assert updated_user == { "userId": 4, "firstName": "Lucy", "lastName": "Qux" } assert cassette.play_count == 7 # DELETE cassette doesn't seem to be working correctly. # deleted_user = client.delete_user(user_id=4) # assert deleted_user is None # assert cassette.play_count == 8 pages = list(client.list_user_accounts_paginated(user_id=1)) assert len(pages) == 3 assert pages == [ { "results": [ { "accountName": "business", "number": "1234" }, { "accountName": "expense", "number": "2345" }, ], "page": 1, "nextPage": 2, }, { "results": [ { "accountName": "fun", "number": "6544" }, { "accountName": "holiday", "number": "9283" }, ], "page": 2, "nextPage": 3, }, { "results": [ { "accountName": "gifts", "number": "7827" }, { "accountName": "home", "number": "1259" }, ], "page": 3, "nextPage": None, }, ] # Fails to connect when connecting to non-existent url. with pytest.raises(UnexpectedError) as exc_info: client.get("mock://testserver") assert str(exc_info.value) == "Error when contacting 'mock://testserver'"
def test_client_response(cassette): client = Client( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ) users = client.list_users() assert len(users) == 3 assert users == [ { 'userId': 1, 'firstName': 'Mike', 'lastName': 'Foo', }, { 'userId': 2, 'firstName': 'Sarah', 'lastName': 'Bar', }, { 'userId': 3, 'firstName': 'Barry', 'lastName': 'Baz', }, ] assert cassette.play_count == 1 # User 1 requested successfully on first attempt user = client.get_user(user_id=1) assert user == {'userId': 1, 'firstName': 'Mike', 'lastName': 'Foo'} assert cassette.play_count == 2 # User 2 failed on first attempt, succeeded on second user = client.get_user(user_id=2) assert user == {'userId': 2, 'firstName': 'Sarah', 'lastName': 'Bar'} assert cassette.play_count == 4 new_user = client.create_user(first_name='Lucy', last_name='Qux') assert new_user == {'userId': 4, 'firstName': 'Lucy', 'lastName': 'Qux'} assert cassette.play_count == 5 overwritten_user = client.overwrite_user(user_id=4, first_name='Lucy', last_name='Foo') assert overwritten_user == {'userId': 4, 'firstName': 'Lucy', 'lastName': 'Foo'} assert cassette.play_count == 6 updated_user = client.update_user(user_id=4, first_name='Lucy', last_name='Qux') assert updated_user == {'userId': 4, 'firstName': 'Lucy', 'lastName': 'Qux'} assert cassette.play_count == 7 pages = list(client.list_user_accounts_paginated(user_id=1)) assert len(pages) == 3 assert pages == [ { 'results': [ { 'accountName': 'business', 'number': '1234', }, { 'accountName': 'expense', 'number': '2345', }, ], 'page': 1, 'nextPage': 2, }, { 'results': [ { 'accountName': 'fun', 'number': '6544', }, { 'accountName': 'holiday', 'number': '9283', }, ], 'page': 2, 'nextPage': 3, }, { 'results': [ { 'accountName': 'gifts', 'number': '7827', }, { 'accountName': 'home', 'number': '1259', }, ], 'page': 3, 'nextPage': None, }, ] # Fails to connect when connecting to non-existent url. with pytest.raises(UnexpectedError) as exc_info: client.get('mock://testserver') assert str(exc_info.value) == "Error when contacting 'mock://testserver'"
def test_client_response_with_pydantic(cassette): client = ClientWithPydantic( authentication_method=NoAuthentication(), response_handler=JsonResponseHandler, request_formatter=JsonRequestFormatter, ) users = client.list_users() assert len(users) == 3 assert users == [ User(user_id=1, first_name='Mike', last_name='Foo'), User(user_id=2, first_name='Sarah', last_name='Bar'), User(user_id=3, first_name='Barry', last_name='Baz'), ] assert cassette.play_count == 1 # User 1 requested successfully on first attempt user = client.get_user(user_id=1) assert user == User(user_id=1, first_name='Mike', last_name='Foo') assert cassette.play_count == 2 # User 2 failed on first attempt, succeeded on second user = client.get_user(user_id=2) assert user == User(user_id=2, first_name='Sarah', last_name='Bar') assert cassette.play_count == 4 new_user = client.create_user(first_name='Lucy', last_name='Qux') assert new_user == User(user_id=4, first_name='Lucy', last_name='Qux') assert cassette.play_count == 5 overwritten_user = client.overwrite_user(user_id=4, first_name='Lucy', last_name='Foo') assert overwritten_user == User(user_id=4, first_name='Lucy', last_name='Foo') assert cassette.play_count == 6 updated_user = client.update_user(user_id=4, first_name='Lucy', last_name='Qux') assert updated_user == User(user_id=4, first_name='Lucy', last_name='Qux') assert cassette.play_count == 7 # paginated responds with a generator, so need to cast to list. # Need fix pagination in api-client # pages = list(client.list_user_accounts_paginated(user_id=1)) # assert len(pages) == 3 # assert pages == [ # AccountPage( # results=[ # Account(account_name='business', number='1234'), # Account(account_name='expense', number='2345'), # ], # page=1, # next_page=2, # ), # AccountPage( # results=[ # Account(account_name='fun', number='6544'), # Account(account_name='holiday', number='9283'), # ], # page=2, # next_page=3, # ), # AccountPage( # results=[ # Account(account_name='gifts', number='7827'), # Account(account_name='home', number='1259'), # ], # page=3, # next_page=None, # ), # ] # Fails to connect when connecting to non-existent url. with pytest.raises(UnexpectedError) as exc_info: client.get('mock://testserver') assert str(exc_info.value) == "Error when contacting 'mock://testserver'"