taiga-back/tests/integration/test_userstorage_api.py

210 lines
8.8 KiB
Python

import pytest
from rest_framework.reverse import reverse
from .. import factories
import json
pytestmark = pytest.mark.django_db
class TestListStorageEntries:
def _load_initial_data(self):
self.user1 = factories.UserFactory()
self.user2 = factories.UserFactory()
self.storage11 = factories.StorageEntryFactory(owner=self.user1)
self.storage12 = factories.StorageEntryFactory(owner=self.user1)
self.storage21 = factories.StorageEntryFactory(owner=self.user2)
def test_list_by_anonymous_user(self, client):
self._load_initial_data()
response = client.get(reverse("user-storage-list"))
assert response.status_code == 401
def test_list_only_user1_entriees(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.get(reverse("user-storage-list"))
assert response.status_code == 200
entries = response.data
assert len(entries) == 2
response = client.logout()
def test_list_only_user2_entriees(self, client):
self._load_initial_data()
response = client.login(username=self.user2.username, password=self.user2.username)
response = client.get(reverse("user-storage-list"))
assert response.status_code == 200
entries = response.data
assert len(entries) == 1
response = client.logout()
class TestViewStorageEntries:
def _load_initial_data(self):
self.user1 = factories.UserFactory()
self.user2 = factories.UserFactory()
self.storage11 = factories.StorageEntryFactory(owner=self.user1)
def test_view_an_entry_by_anonymous_user(self, client):
self._load_initial_data()
response = client.get(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 401
def test_view_an_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.get(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 200
entry = response.data
assert entry["key"] == self.storage11.key
assert entry["value"] == self.storage11.value
response = client.logout()
def test_view_an_entry_by_incorrect_user(self, client):
self._load_initial_data()
response = client.login(username=self.user2.username, password=self.user2.username)
response = client.get(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 404
response = client.logout()
def test_view_non_existent_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.get(reverse("user-storage-detail", args=["foo"]))
assert response.status_code == 404
response = client.logout()
class TestCreateStorageEntries:
@classmethod
def setup_class(cls):
cls.form = {"key": "foo",
"value": "bar"}
cls.form_without_key = {"value": "bar"}
cls.form_without_value = {"key": "foo"}
def _load_initial_data(self):
self.user1 = factories.UserFactory()
self.user2 = factories.UserFactory()
self.storage11 = factories.StorageEntryFactory(owner=self.user1)
def test_create_entry_by_anonymous_user_with_error(self, client):
self._load_initial_data()
response = client.post(reverse("user-storage-list"), self.form)
assert response.status_code == 401
def test_create_entry_successfully(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.post(reverse("user-storage-list"), self.form)
assert response.status_code == 201
response = client.get(reverse("user-storage-detail", args=[self.form["key"]]))
assert response.status_code == 200
response = client.logout()
def test_create_entry_with_incorret_form_error(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.post(reverse("user-storage-list"), self.form_without_key)
assert response.status_code == 400
response = client.post(reverse("user-storage-list"), self.form_without_value)
assert response.status_code == 400
response = client.logout()
def test_create_entry_with_integrity_error(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
error_form = {"key": self.storage11.key,
"value": "bar"}
response = client.post(reverse("user-storage-list"), error_form)
assert response.status_code == 400
response = client.logout()
class TestUpdateStorageEntries:
@classmethod
def setup_class(cls):
cls.form = {"value": "bar"}
def _load_initial_data(self):
self.user1 = factories.UserFactory()
self.user2 = factories.UserFactory()
self.storage11 = factories.StorageEntryFactory(owner=self.user1)
def test_update_entry_by_anonymous_user(self, client):
self._load_initial_data()
self.form["key"] = self.storage11.key
response = client.put(reverse("user-storage-detail", args=[self.storage11.key]),
json.dumps(self.form),
content_type='application/json')
assert response.status_code == 401
def test_update_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
self.form["key"] = self.storage11.key
response = client.put(reverse("user-storage-detail", args=[self.storage11.key]),
json.dumps(self.form),
content_type='application/json')
assert response.status_code == 200
response = client.get(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 200
entry = response.data
assert entry["value"] == self.form["value"]
response = client.logout()
def test_update_non_existent_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
self.form["key"] = "foo"
response = client.get(reverse("user-storage-detail", args=[self.form["key"]]))
assert response.status_code == 404
response = client.put(reverse("user-storage-detail", args=[self.form["key"]]),
json.dumps(self.form),
content_type='application/json')
assert response.status_code == 201
response = client.get(reverse("user-storage-detail", args=[self.form["key"]]))
assert response.status_code == 200
entry = response.data
assert entry["value"] == self.form["value"]
response = client.logout()
class TestDeleteStorageEntries:
def _load_initial_data(self):
self.user1 = factories.UserFactory()
self.user2 = factories.UserFactory()
self.storage11 = factories.StorageEntryFactory(owner=self.user1)
def test_delete_entry_by_anonymous_user(self, client):
self._load_initial_data()
response = client.delete(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 401
def test_delete_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
key = self.storage11.key
response = client.delete(reverse("user-storage-detail", args=[key]))
assert response.status_code == 204
response = client.get(reverse("user-storage-detail", args=[key]))
assert response.status_code == 404
response = client.logout()
def test_delete_entry_by_incorrect_user(self, client):
self._load_initial_data()
response = client.login(username=self.user2.username, password=self.user2.username)
response = client.delete(reverse("user-storage-detail", args=[self.storage11.key]))
assert response.status_code == 404
response = client.logout()
def test_delete_non_existent_entry(self, client):
self._load_initial_data()
response = client.login(username=self.user1.username, password=self.user1.username)
response = client.delete(reverse("user-storage-detail", args=["foo"]))
assert response.status_code == 404
response = client.logout()