def test_staff_can_create_delete_and_update(self) -> None: with token_auth(self, self.staff_token): response = self.client.post(f'{self.api_uri}/', { 'name': 'beer', 'price': '3.20' }, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) response = self.client.put( self.beverage_type_uri, { 'name': 'espresso', 'price': '3.20' }, format='json', ) self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.patch(self.beverage_type_uri, {'price': '3.30'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.delete(self.beverage_type_uri) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) # Restore beverage type self.beverage_type1.save()
def test_name_query(self) -> None: with token_auth(self, self.user1_token): response = self.client.get(f'{self.api_uri}/?name=coff') self.assertEqual(response.status_code, status.HTTP_200_OK) for user in response.data: self.assertIn('coff', user['name'].lower())
def test_users_can_list_and_retrieve(self) -> None: with token_auth(self, self.user1_token): response = self.client.get(f'{self.api_uri}/') self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.get(self.beverage_type_uri) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_users_cant_create_delete_or_update(self) -> None: with token_auth(self, self.user1_token): response = self.client.post(f'{self.api_uri}/', { 'name': 'beer', 'price': '3.20' }, format='json') self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) response = self.client.put( self.beverage_type_uri, { 'name': 'espresso', 'price': '3.20' }, format='json', ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) response = self.client.patch(self.beverage_type_uri, {'price': '3.30'}, format='json') self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) response = self.client.delete(self.beverage_type_uri) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_user_query(self) -> None: with token_auth(self, self.user1_token): response = self.client.get(f'{self.api_uri}/?user=1') self.assertEqual(response.status_code, status.HTTP_200_OK) for purchase in response.data: self.assertIn(self.user1_uri, purchase['user'])
def test_staff_can_create_purchases_for_others(self) -> None: with token_auth(self, self.staff_token): response = self.client.post( f'{self.api_uri}/', { 'beverage_type': self.beverage_type_uri, 'user': self.user2_uri }, format='json', ) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
def test_purchase_creation_updates_profile_balance(self) -> None: with token_auth(self, self.user1_token): self.user1.refresh_from_db() previous_balance = self.user1.profile.balance response = self.client.post( f'{self.api_uri}/', { 'beverage_type': self.beverage_type_uri, 'user': self.user1_uri }, ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.user1.refresh_from_db() new_balance = self.user1.profile.balance self.assertEqual(new_balance, previous_balance - self.beverage_type.price)
def test_users_cant_delete_or_update_purchases(self) -> None: with token_auth(self, self.user1_token): response = self.client.put( self.purchase1_uri, {'beverage_type': self.beverage_type_uri}, format='json', ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) response = self.client.patch( self.purchase1_uri, {'beverage_type': self.beverage_type_uri}, format='json', ) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) response = self.client.delete(self.purchase1_uri) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_admins_can_delete_and_update_purchases(self) -> None: with token_auth(self, self.staff_token): response = self.client.put( self.purchase1_uri, { 'beverage_type': self.beverage_type_uri, 'user': self.user1_uri }, format='json', ) self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.patch( self.purchase1_uri, {'beverage_type': self.beverage_type_uri}, format='json', ) self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.delete(self.purchase1_uri) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) # Restore purchase self.purchase1.save()
def test_beverage_type_query_ignores_wrong_type(self) -> None: with token_auth(self, self.user1_token): response = self.client.get( f'{self.api_uri}/?beverage_type=has-to-be-0-or-1') self.assertEqual(response.status_code, status.HTTP_200_OK)