166 lines
6.4 KiB
Python
166 lines
6.4 KiB
Python
import unittest
|
||
import sqlite3
|
||
import os
|
||
import sys
|
||
import tempfile
|
||
|
||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from database import get_db_connection, create_tables
|
||
from app import app
|
||
|
||
|
||
class TestPartners(unittest.TestCase):
|
||
"""Тестирование функционала партнеров"""
|
||
|
||
@classmethod
|
||
def setUpClass(cls):
|
||
"""Создаем тестовую базу данных"""
|
||
cls.db_fd, cls.db_path = tempfile.mkstemp()
|
||
|
||
import database
|
||
database.DATABASE = cls.db_path
|
||
|
||
create_tables()
|
||
|
||
cls.conn = sqlite3.connect(cls.db_path)
|
||
cls.conn.row_factory = sqlite3.Row
|
||
cursor = cls.conn.cursor()
|
||
|
||
# Добавляем партнеров (БЕЗ rating)
|
||
cursor.execute('''
|
||
INSERT INTO partners (name, director, email, phone, legal_address, inn)
|
||
VALUES (?, ?, ?, ?, ?, ?)
|
||
''', ('ООО Тест', 'Иванов И.И.', 'test@test.ru', '+7(999)123-45-67',
|
||
'г. Москва', '7701123456'))
|
||
|
||
cursor.execute('''
|
||
INSERT INTO partners (name, director, email, phone, legal_address, inn)
|
||
VALUES (?, ?, ?, ?, ?, ?)
|
||
''', ('ИП Тестов', 'Петров П.П.', 'test2@test.ru', '+7(999)765-43-21',
|
||
'г. Москва', '7701765432'))
|
||
|
||
# Добавляем типы товаров для заказов
|
||
cursor.execute("INSERT INTO product_types (type_name) VALUES ('Ручки')")
|
||
|
||
# Добавляем товары
|
||
cursor.execute('''
|
||
INSERT INTO products (product_type_id, product_name, article, min_partner_price)
|
||
VALUES (1, 'Ручка тест', 'R001', 100.0)
|
||
''')
|
||
|
||
# Добавляем заказы (БЕЗ status)
|
||
cursor.execute('''
|
||
INSERT INTO orders (partner_id, order_date, discount_percent)
|
||
VALUES (1, '2026-01-01', 0)
|
||
''')
|
||
cursor.execute('''
|
||
INSERT INTO orders (partner_id, order_date, discount_percent)
|
||
VALUES (1, '2026-02-01', 0)
|
||
''')
|
||
|
||
# Добавляем позиции заказов
|
||
cursor.execute('''
|
||
INSERT INTO order_items (order_id, product_id, quantity, price_at_order)
|
||
VALUES (1, 1, 10, 100.0)
|
||
''')
|
||
cursor.execute('''
|
||
INSERT INTO order_items (order_id, product_id, quantity, price_at_order)
|
||
VALUES (2, 1, 20, 100.0)
|
||
''')
|
||
|
||
cls.conn.commit()
|
||
|
||
def test_db_connection():
|
||
conn = sqlite3.connect(cls.db_path)
|
||
conn.row_factory = sqlite3.Row
|
||
return conn
|
||
|
||
app.config['DATABASE'] = cls.db_path
|
||
database.get_db_connection = test_db_connection
|
||
|
||
@classmethod
|
||
def tearDownClass(cls):
|
||
cls.conn.close()
|
||
os.close(cls.db_fd)
|
||
try:
|
||
os.unlink(cls.db_path)
|
||
except:
|
||
pass
|
||
|
||
def setUp(self):
|
||
self.app = app.test_client()
|
||
self.app.testing = True
|
||
|
||
def test_1_partners_page(self):
|
||
"""Тест страницы партнеров"""
|
||
response = self.app.get('/partners')
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Партнеры', response.data.decode('utf-8'))
|
||
self.assertIn('ООО Тест', response.data.decode('utf-8'))
|
||
self.assertIn('ИП Тестов', response.data.decode('utf-8'))
|
||
|
||
def test_2_add_partner_page(self):
|
||
"""Тест страницы добавления партнера"""
|
||
response = self.app.get('/add_partner')
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Добавление нового партнера', response.data.decode('utf-8'))
|
||
|
||
def test_3_edit_partner_page(self):
|
||
"""Тест страницы редактирования партнера"""
|
||
response = self.app.get('/edit_partner/1')
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Редактирование партнера', response.data.decode('utf-8'))
|
||
self.assertIn('ООО Тест', response.data.decode('utf-8'))
|
||
|
||
def test_4_add_partner_post(self):
|
||
"""Тест добавления партнера через POST"""
|
||
response = self.app.post('/add_partner', data={
|
||
'name': 'Новый Партнер',
|
||
'director': 'Сидоров С.С.',
|
||
'email': 'new@partner.ru',
|
||
'phone': '+7(999)111-22-33',
|
||
'legal_address': 'г. Москва, ул. Новая',
|
||
'inn': '7701999888'
|
||
}, follow_redirects=True)
|
||
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Партнер успешно добавлен', response.data.decode('utf-8'))
|
||
|
||
conn = sqlite3.connect(self.db_path)
|
||
conn.row_factory = sqlite3.Row
|
||
partner = conn.execute('SELECT * FROM partners WHERE inn = ?', ('7701999888',)).fetchone()
|
||
conn.close()
|
||
self.assertIsNotNone(partner)
|
||
self.assertEqual(partner['name'], 'Новый Партнер')
|
||
|
||
def test_5_edit_partner_post(self):
|
||
"""Тест редактирования партнера через POST"""
|
||
response = self.app.post('/edit_partner/1', data={
|
||
'name': 'ООО Тест Обновленный',
|
||
'director': 'Иванов И.И.',
|
||
'email': 'updated@test.ru',
|
||
'phone': '+7(999)123-45-67',
|
||
'legal_address': 'г. Москва, ул. Обновленная',
|
||
'inn': '7701123456'
|
||
}, follow_redirects=True)
|
||
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Данные партнера обновлены', response.data.decode('utf-8'))
|
||
|
||
conn = sqlite3.connect(self.db_path)
|
||
conn.row_factory = sqlite3.Row
|
||
partner = conn.execute('SELECT * FROM partners WHERE id = 1').fetchone()
|
||
conn.close()
|
||
self.assertEqual(partner['name'], 'ООО Тест Обновленный')
|
||
self.assertEqual(partner['email'], 'updated@test.ru')
|
||
|
||
def test_6_partner_orders_filter(self):
|
||
"""Тест фильтрации заказов по партнеру"""
|
||
response = self.app.get('/?partner=1')
|
||
self.assertEqual(response.status_code, 200)
|
||
self.assertIn('Список заказов', response.data.decode('utf-8'))
|
||
|
||
|
||
if __name__ == '__main__':
|
||
unittest.main() |