Esempio n. 1
0
 def test_04_correct_currencies_in_page(self):
     """ Коректність відораження валют на головній сторінці.
     Намагаємося відкрити головну сторінку "/" .
     Очікуємо, що статус відповіді буде "200 OK".
     Очікуємо, що кількість валют на сторінці дорівнює кількості валют в базі.
     Очікуємо, що коди валют співпадають з кодами валют в базі.
     Очікуємо, що назви валют співпадають з назвами валют в базі.
     """
     request = b"GET / HTTP/1.0\n"
     out, err = run_amock(self.exchange_rate, request)
     response = str(out, encoding="utf-8")
     # Перевіряємо чи відкрилась сторінка
     self.assertEqual("200 OK", get_status(response))
     # Отримуємо з фіктивної бази список кодів і назв валют
     expected_currencies = self.exchange_rate.get_currencies()
     # Множимо на 2, бо на сторінці вони дублюються
     expected_currencies_codes = [cur for cur, name in expected_currencies] * 2
     expected_currencies_names = [name for cur, name in expected_currencies] * 2
     # Шукаємо на сторінці коди і назви валют
     match_iter = re.finditer(
         r"<option value=\"(?P<code>.+?)\">(?P<name>.+?)</option>",
         response
     )
     currencies_codes = []
     currencies_names = []
     for match in match_iter:
         currencies_codes.append(match.group("code"))
         currencies_names.append(match.group("name"))
     # Перевіряємо чи дорівнює кількість валют на сторінці кількості валют в базі
     self.assertCountEqual(expected_currencies_codes, currencies_codes)
     # Порівнюємо коди і назви валют на сторінці з відповідними в базі
     self.assertListEqual(expected_currencies_codes, currencies_codes)
     self.assertListEqual(expected_currencies_names, currencies_names)
Esempio n. 2
0
 def test_02_incorrect_path_status(self):
     """ Коректність статусу відповіді при неправильному шляху.
     Намагаємося відкрити сторінку "/incorrect/path".
     Очікуємо, що статус відповіді буде "404 NOT FOUND".
     """
     request = b"GET /incorrect/path HTTP/1.0\n"
     out, err = run_amock(self.exchange_rate, request)
     response = str(out, encoding="utf-8")
     status = get_status(response)
     self.assertEqual("404 NOT FOUND", status)
Esempio n. 3
0
 def test_05_correct_path_without_data(self):
     request = (b"POST /operation_status HTTP/1.0\n"
                b"Content-Type: application/x-www-form-urlencoded\n\n"
                b"from=&to=&balls_1=3&balls_2=2")
     out, err = run_amock(self.match_results, request)
     response = str(out, encoding="utf-8")
     self.assertEqual("303 SEE OTHER", get_status(response))
     match = re.search("Location: (?P<LOCATION>.+?)\n", response)
     self.assertFalse(match is None)
     location = match.group("LOCATION").rstrip()
     self.assertEqual(location, "/")
Esempio n. 4
0
 def test_01_correct_path_status(self):
     """ Коректність статусу відповіді при правильному шляху.
     Намагаємося відкрити головну сторінку "/" .
     Очікуємо, що статус відповіді буде "200 OK".
     """
     #       метод  шлях  версія протоколу
     #           |   |    |
     #           v   v    v
     request = b"GET / HTTP/1.0\n"  # Запит на відкриття головної сторінки
     # Намагаємося отримати відповідь
     out, err = run_amock(self.exchange_rate, request)
     response = str(out, encoding="utf-8")  # Розкодовуємо відповідь
     # print(response)  # <-- Так виглядає відповідь
     status = get_status(response)  # Шукаємо статус у відповіді
     # Перевіряємо чи справді статус відповіді є коректним
     self.assertEqual("200 OK", status)
Esempio n. 5
0
 def test_05_correct_exchange_rate_in_page(self):
     """ Коректність відображення курсу валют на сторінці валют.
     Робимо тест 3 рази.
     Вибираємо кількість одинись валюти.
     Вибираємо дві довільні валюти з фіктивної бази.
     Намагаємося відкрити сторінку валют "/currencies" за допомоою методу POST
     з даними про кількість і валюти.
     Очікуємо, що статус відповіді буде "200 OK".
     Очікуємо, що на сторінці буде присутній результат.
     Очікуємо, що значення отриманого курсу буде коректним.
     """
     # Беремо з бази список валют
     currencies = [
         cur for cur, name in self.exchange_rate.get_currencies()
     ]
     for _ in range(3):
         # Вибираємо значення і дві довільні валюти
         amount = random.randint(1, 100)
         cur1 = random.choice(currencies)
         cur2 = random.choice(currencies)
         # Створюємо рядок байті запиту для метода POST
         form_args = bytes(
             "amount={}&from={}&to={}".format(amount, cur1, cur2),
             encoding="utf-8"
         )
         request = (
             b"POST /exchange_rate HTTP/1.0\n"
             b"Content-Type: application/x-www-form-urlencoded\n\n" +
             form_args
         )
         out, err = run_amock(self.exchange_rate, request)
         response = str(out, encoding="utf-8")
         # Перевіряємо чи відкрилась сторінка
         self.assertEqual("200 OK", get_status(response))
         # Намагаємося знайти на сторінці результат
         match = re.search(r"<p>.+? = (?P<RESULT>\d+\.?\d*) .+?</p>", response)
         self.assertFalse(match is None)  # Перевіряємо чи знайшли результат
         rate = float(match.group("RESULT"))
         # Знаходимо коректний курс валют
         expected_rate = round(self.exchange_rate.obtain_rate(cur1, cur2, amount), 2)
         # Перевіряємо  рівність курсу валюти на сторінці з коректним курсом
         self.assertAlmostEqual(expected_rate, rate)
Esempio n. 6
0
 def test_03_correct_path_without_data(self):
     """ Коректність відповіді, якщо надіслати форму з неповними даними.
     Намагаємося відкрити сторінку "/currencies" за допомогою метода POST.
     Очікуємо, що відбудеться перенаправдлення,
     при цьому статус відповіді повинен бути "303 SEE OTHER",
     а до заголовків додано направлення "Location: /"
     """
     request = (
         b"POST /exchange_rate HTTP/1.0\n"
         # Наступний рядок потрібен для методу POST:
         # Тип даних, які насилаються
         b"Content-Type: application/x-www-form-urlencoded\n\n"
         # Дані, які надсилаються
         b"amount=&from=&to="
     )
     out, err = run_amock(self.exchange_rate, request)
     response = str(out, encoding="utf-8")
     self.assertEqual("303 SEE OTHER", get_status(response))
     # Шукаємо в заголовок з ім'ям "Location" і отримуємо його вміст
     match = re.search("Location: (?P<LOCATION>.+?)\n", response)
     self.assertFalse(match is None)
     location = match.group("LOCATION").rstrip()
     # Перевіряємо чи здійснюється перенаправлення на головну сторінку
     self.assertEqual(location, "/")
Esempio n. 7
0
 def test_04_incorrect_path_status(self):
     request = b"GET /lalala_path HTTP/1.1"
     out, err = run_amock(self.match_results, request)
     response = str(out, encoding="utf-8")
     status = get_status(response)
     self.assertEqual("404 NOT FOUND", status)
Esempio n. 8
0
 def test_03_correct_path_status(self):
     request = b"GET / HTTP/1.1"
     out, err = run_amock(self.match_results, request)
     response = str(out, encoding="utf-8")
     status = get_status(response)
     self.assertEqual("200 OK", status)