/
Anubis55
/
Web-Polytech
Обзор
Документация
Войти
/
Anubis55
/
Web-Polytech
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
comics/tests.py
132 строки
5 KB
Anubis4904
Добавлен REST API для моделей ComicVerse с использованием DRF (сериализаторы, ViewSetы, маршруты)
23 июн 2026, 01:23
23 июн 2026, 01:23
09aa93a
Код
Авторство
О чём код?
from django.test import TestCase, Client from django.urls import reverse from django.contrib.auth.models import User from django.core.files.uploadedfile import SimpleUploadedFile from .models import Comic, Genre, Author, Chapter, Comment, Favorite, Rating class ComicVerseTests(TestCase): def setUp(self): self.client = Client() self.user = User.objects.create_user(username='testuser', password='testpass123') self.other_user = User.objects.create_user(username='otheruser', password='testpass123') self.author = Author.objects.create(name='Test Author', slug='test-author') self.genre = Genre.objects.create(name='Test Genre', slug='test-genre') image = SimpleUploadedFile("test_cover.jpg", b"file_content", content_type="image/jpeg") self.comic = Comic.objects.create( title='Test Comic', slug='test-comic', status='ongoing', views=10, cover=image ) self.comic.authors.add(self.author) self.comic.genres.add(self.genre) self.chapter = Chapter.objects.create( comic=self.comic, number=1, title='Chapter 1', content='Content' ) self.comment = Comment.objects.create( user=self.user, comic=self.comic, text='Test comment' ) self.rating = Rating.objects.create( user=self.user, comic=self.comic, score=5 ) self.favorite = Favorite.objects.create( user=self.user, comic=self.comic, status='reading' ) def test_comic_creation(self): comic_count = Comic.objects.count() self.assertEqual(comic_count, 1) self.assertEqual(self.comic.title, 'Test Comic') def test_chapter_creation(self): chapter_count = Chapter.objects.count() self.assertEqual(chapter_count, 1) self.assertEqual(self.chapter.comic, self.comic) def test_comment_creation(self): comment_count = Comment.objects.count() self.assertEqual(comment_count, 1) self.assertEqual(self.comment.user, self.user) def test_comment_update_only_author(self): self.client.login(username='testuser', password='testpass123') url = reverse('comics:comment_edit', args=[self.comment.pk]) response = self.client.post(url, {'text': 'Updated comment'}) self.assertEqual(response.status_code, 302) self.comment.refresh_from_db() self.assertEqual(self.comment.text, 'Updated comment') self.client.logout() self.client.login(username='otheruser', password='testpass123') response = self.client.post(url, {'text': 'Hack attempt'}) self.assertEqual(response.status_code, 403) def test_comment_delete_only_author(self): comment_pk = self.comment.pk self.client.login(username='otheruser', password='testpass123') url = reverse('comics:comment_delete', args=[comment_pk]) response = self.client.post(url) self.assertEqual(response.status_code, 403) self.client.logout() self.client.login(username='testuser', password='testpass123') response = self.client.post(url) self.assertEqual(response.status_code, 302) with self.assertRaises(Comment.DoesNotExist): Comment.objects.get(pk=comment_pk) def test_favorite_add(self): fav_count = Favorite.objects.count() self.assertEqual(fav_count, 1) favorite = Favorite.objects.get(user=self.user, comic=self.comic) self.assertEqual(favorite.status, 'reading') def test_rating_create(self): rating_count = Rating.objects.count() self.assertEqual(rating_count, 1) rating = Rating.objects.get(user=self.user, comic=self.comic) self.assertEqual(rating.score, 5) def test_manga_list_view(self): url = reverse('comics:manga_list') response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Test Comic') self.assertTemplateUsed(response, 'comics/manga_list.html') def test_filter_by_status(self): url = reverse('comics:manga_list') + '?status=ongoing' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Test Comic') url = reverse('comics:manga_list') + '?status=completed' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertNotContains(response, 'Test Comic') def test_search_by_title(self): url = reverse('comics:manga_list') + '?search=Test' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Test Comic') url = reverse('comics:manga_list') + '?search=NonExistent' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertNotContains(response, 'Test Comic') def test_manga_detail_view_with_annotations(self): url = reverse('comics:manga_detail', args=[self.comic.slug]) + '?tab=chapters' response = self.client.get(url) self.assertEqual(response.status_code, 200) self.assertContains(response, 'Test Comic') self.assertContains(response, 'Глава 1') self.assertContains(response, 'Test comment')