class BaseResourceTestCase(BaseTestCase, ResourceTestCase): def setUp(self): self.user_resource = UserResource() self.user_resource_uri = self.user_resource.get_resource_uri() self.client = TestApiClient() super(BaseResourceTestCase, self).setUp() def login(self, email=None, password=None): if email is None: email = self.user.email if password is None: password = self.password url = "%slogin/" % self.user_resource_uri data = { "email": email, "password": password, } if isinstance(self.client, Client): data = json.dumps(data) response = self.client.post(url, data=data, content_type="application/json") self.assertEqual( response.status_code, 200, "On '{}', expected status code: {}. Got {}: {}".format( url, 200, response.status_code, response.content ) ) def logout(self): uri = "%slogout/" % self.user_resource_uri data = { } response = self.client.get(uri, data=data, content_type="application/json") self.assertEqual(response.status_code, 200) def create(self, resource, endpoint='', expected_code=201, **data): return self.post(resource, expected_code=expected_code, **data) def get(self, *args, **kwargs): return self.call_api(method='get', *args, **kwargs) def post(self, *args, **kwargs): return self.call_api(method='post', *args, **kwargs) def put(self, *args, **kwargs): return self.call_api(method='put', *args, **kwargs) def patch(self, *args, **kwargs): return self.call_api(method='patch', *args, **kwargs) def call_api(self, resource, obj=None, endpoint='', expected_code=200, data=None, method='get', multipart=False): if multipart: self.client = Client() self.login() if isinstance(resource, basestring): resource = api.canonical_resource_for(resource) url = resource.get_resource_uri(obj) if endpoint: url = '{}{}/'.format(url, endpoint) method = getattr(self.client, method.lower()) response = method(url, data=data) self.assertEqual( response.status_code, expected_code, "On '{}', expected status code: {}. Got {}: {}".format( url, expected_code, response.status_code, response.content ) ) try: return json.loads(response.content) except: return response.content