kancelyary_project/tests/test_partners.py

166 lines
6.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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