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()