"""Test the grass model.""" import flexmock import pytest import requests from requests import sessions from auth.models import grass @pytest.fixture def json_response(): """Create a json response.""" response = requests.Response() response._content = b'{"key": "value"}' response.status_code = 200 return response @pytest.fixture def text_response(): """Create a text response.""" response = requests.Response() response._content = b'Hello World' response.status_code = 200 return response @pytest.fixture def error_json_response(): """Create a json error response.""" response = requests.Response() response._content = b'{"code": "not_found"}' response.status_code = 404 return response def test_request_with_wrong_verb(): """Test making a request with a wrong verb.""" with pytest.raises(AssertionError) as exception: assert grass.request('false', '') assert exception.value.msg == grass.INVALID_VERB def test_request_with_wrong_resource(): """Test making a request with a wrong resource.""" with pytest.raises(AssertionError) as exception: assert grass.request(grass.GET, 'resource') assert exception.value.msg == grass.INVALID_RESOURCE def test_request_with_text(text_response): """Test making a request with text as a response.""" session = sessions.Session mock = flexmock(session).should_receive('request') mock.and_return(text_response).once() result = grass.request('GET', '/resource') assert result.message == text_response.content.decode('utf8') assert result.status is text_response.status_code def test_request_with_json(json_response): """Test making a request with json as a response.""" session = sessions.Session mock = flexmock(session).should_receive('request') mock.and_return(json_response).once() result = grass.request('GET', '/resource') assert isinstance(result.message, dict) assert result.message.get('key') == 'value' assert result.status is json_response.status_code def test_request_with_json_error(error_json_response): """Test making a request with json error as a response.""" session = sessions.Session mock = flexmock(session).should_receive('request') mock.and_return(error_json_response).once() result = grass.request('GET', '/resource') assert isinstance(result.errors, dict) assert result.errors.get('code') == 'not_found' assert result.status is error_json_response.status_code