Create: collector_api tests

This commit is contained in:
Stepan Zhukovsky 2023-08-29 16:02:52 +09:00
parent 5fd2bc953e
commit 30939755f7
3 changed files with 142 additions and 0 deletions

View File

@ -0,0 +1,31 @@
from django.urls import resolve, reverse
from django.test import TestCase
from collector.api import views
class TestUrls(TestCase):
def test_list_all_archives_url_is_resolved(self):
url = reverse('collector_api:archive-list')
self.assertEquals(resolve(url).func.cls, views.ArchiveViewSet)
def test_detail_archive_url_is_resolved(self):
url = reverse('collector_api:archive-detail', args=[1])
self.assertEquals(resolve(url).func.cls, views.ArchiveViewSet)
def test_list_all_tickets_url_is_resolved(self):
url = reverse('collector_api:ticket-list')
self.assertEquals(resolve(url).func.cls, views.TicketViewSet)
def test_detail_ticket_url_is_resolved(self):
url = reverse('collector_api:ticket-detail', args=[1488228])
self.assertEquals(resolve(url).func.cls, views.TicketViewSet)
def test_list_all_platforms_url_is_resolved(self):
url = reverse('collector_api:platform-list')
self.assertEquals(resolve(url).func.cls, views.PlatformViewSet)
def test_detail_platform_url_is_resolved(self):
url = reverse('collector_api:platform-detail', args=['vm6'])
self.assertEquals(resolve(url).func.cls, views.PlatformViewSet)

View File

@ -0,0 +1,111 @@
from pathlib import Path
from django.core.files.base import ContentFile
from django.conf import settings
from django.contrib.auth.models import User
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from collector.models import Archive, Platform, Ticket
def delete_test_files(ticket):
test_file = settings.MEDIA_ROOT_FOR_SENSITIVE_FILES / Path(str(ticket))
test_file.unlink(missing_ok=True)
class TestViews(APITestCase):
def setUp(self):
self.test_user = User.objects.create(
username='oops',
password='hG2wS231YPWmj3'
)
self.test_platform = Platform.objects.create(
name='vm6',
pretty_name='VMmanager 6'
)
self.test_ticket = Ticket.objects.create(
number=1488228,
platform=self.test_platform,
token='e04f4c3c-ef80-49ee-a2c3-89b737a67cdb',
user=self.test_user
)
self.archive_list_url = reverse('collector_api:archive-list')
self.test_file = ContentFile(b'...', name='test.tar.gz')
self.test_upload_data = {'file': self.test_file}
def test_success_upload_file_from_anon_user(self):
response = self.client.post(
self.archive_list_url,
self.test_upload_data,
format='multipart',
headers={'Upload-Token': self.test_ticket.token}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
test_archive = Archive.objects.last()
# ? workaround delete test file:
delete_test_files(test_archive.file)
def test_deny_401_upload_file_from_anon_user(self):
response = self.client.post(
self.archive_list_url,
self.test_upload_data,
format='multipart',
# missing header: Upload-Token
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_deny_403_wrong_token_upload_file_from_anon_user(self):
response = self.client.post(
self.archive_list_url,
self.test_upload_data,
format='multipart',
headers={'Upload-Token': 'wrong-token'}
)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_deny_423_expired_token_upload_file_from_anon_user(self):
# attribute overload (expired):
self.test_ticket.attempts = 0
self.test_ticket.save()
response = self.client.post(
self.archive_list_url,
self.test_upload_data,
format='multipart',
headers={'Upload-Token': self.test_ticket.token}
)
self.assertEqual(response.status_code, status.HTTP_423_LOCKED)
def test_deny_423_resolved_ticket_state_upload_file_from_anon_user(self):
# attribute overload (ticket resolved):
self.test_ticket.resolved = True
self.test_ticket.save()
response = self.client.post(
self.archive_list_url,
self.test_upload_data,
format='multipart',
headers={'Upload-Token': self.test_ticket.token}
)
self.assertEqual(response.status_code, status.HTTP_423_LOCKED)
def test_deny_archive_list_GET_method_for_anon_user(self):
response = self.client.get(self.archive_list_url)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_deny_archive_list_PUT_method_for_anon_user(self):
response = self.client.put(
self.archive_list_url,
self.test_upload_data,
format='multipart',
headers={'Upload-Token': self.test_ticket.token}
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_deny_archive_list_DELETE_method_for_anon_user(self):
response = self.client.delete(
reverse('collector_api:archive-list'),
data={'id': 1},
)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)