This repository has been archived by the owner on Oct 16, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
tests.py
111 lines (94 loc) · 5.14 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import datetime
import itertools
import urllib.parse
from django.test import TestCase
class RoutesTest(TestCase):
def setUp(self):
self.today = datetime.date.today().isoformat().encode('ascii')
def test_home(self):
# Добавить в наше приложение обработчик для главной страницы.
#
# В теле ответа должно возвращатся текущая дата в формате ISO
# Для этого можно использовать метод `isoformat` у экземпляра даты.
response = self.client.get('/')
assert response.status_code == 200
assert self.today in response.content
def test_calculate(self):
# Добавить в наше приложение обработчик для URL'а `calculate`
# для проведения математических операций над двумя числами.
#
# Аргументы передаются в запросе URL'е:
# - `op` - тип операции:
# * '+' - сложение
# * '-' - вычитание
# * '*' = умножения
# * '/' = деление
# - `left` и `right` - операнды
#
# При ошибке (неизвестная операция или деление на 0) отправлять 400 статус
def calculate(op, left, right):
op = urllib.parse.quote(op)
response = self.client.get(f'/calculate/?op={op}&left={left}&right={right}')
self.assertEquals(response.status_code, 200)
return float(response.content)
def calculate_zero(op, left, right):
op = urllib.parse.quote(op)
response = self.client.get(f'/calculate/?op={op}&left={left}&right={right}')
assert response.status_code == 400
return None
# декартово произведение: (1, 1), (1, 2), (1, 3), ..., (4, 4)
for l, r in itertools.product([1, 2, 3, 4], repeat=2):
self.assertEquals(calculate('+', l, r), l + r)
self.assertEquals(calculate('-', l, r), l - r)
self.assertEquals(calculate('*', l, r), l * r)
if r == 0:
self.assertIsNone(calculate_zero('/', l, r))
else:
self.assertEquals(calculate('/', l, r), l / r)
self.assertIsNone(calculate_zero('|', 1, 2))
def test_articles(self):
# Добавить обработчики для архива статей:
#
# 1. Со списком всех статей (`articles/`),
# возвращает названия статей разделенных переносом строки ('\n`)
# 2. С отдельной статьи (`articles/3/`),
# возвращает название отдельной статьи, если она отсуствует - вернуть статус 404.
# 3. Со списком статей за отдельный год (`articles/archive/2012/`),
# возвращает названия статей разделенных переносом строки ('\n`)
#
# Все шаблоны и обработчики URL должны находиться в пакете `blog.articles`.
#
# Данные для вывода находяться в словаре `ARTICLES` в модуле
# `blog.articles.models`.
response = self.client.get('/articles/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, ('\n'.join([
'Заглавная статья',
'Вышел Python 3.6',
'Вышел Python 3.7'
])).encode('utf-8'))
response = self.client.get('/articles/1/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'Заглавная статья'.encode('utf-8'))
response = self.client.get('/articles/2/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'Вышел Python 3.6'.encode('utf-8'))
response = self.client.get('/articles/3/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'Вышел Python 3.7'.encode('utf-8'))
response = self.client.get('/articles/4/')
self.assertEqual(response.status_code, 404)
response = self.client.get('/articles/archive/2016/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'')
response = self.client.get('/articles/archive/2017/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, ('\n'.join([
'Заглавная статья',
'Вышел Python 3.6',
])).encode('utf-8'))
response = self.client.get('/articles/archive/2018/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, ('\n'.join([
'Вышел Python 3.7'
])).encode('utf-8'))