234 lines
7.0 KiB
Python
234 lines
7.0 KiB
Python
"""
|
|
数据模型测试用例
|
|
"""
|
|
|
|
import unittest
|
|
import tempfile
|
|
import os
|
|
from datetime import datetime, timedelta
|
|
from app import create_app, db
|
|
from app.models import Admin, Product, License, Device
|
|
|
|
class TestModels(unittest.TestCase):
|
|
"""数据模型测试"""
|
|
|
|
def setUp(self):
|
|
"""测试前准备"""
|
|
self.app = create_app('testing')
|
|
self.app_context = self.app.app_context()
|
|
self.app_context.push()
|
|
|
|
# 使用内存数据库
|
|
self.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
|
|
db.create_all()
|
|
|
|
def tearDown(self):
|
|
"""测试后清理"""
|
|
db.session.remove()
|
|
db.drop_all()
|
|
self.app_context.pop()
|
|
|
|
def test_admin_model(self):
|
|
"""测试管理员模型"""
|
|
# 创建管理员
|
|
admin = Admin(
|
|
username='testadmin',
|
|
email='test@example.com',
|
|
role=1
|
|
)
|
|
admin.set_password('testpass123')
|
|
db.session.add(admin)
|
|
db.session.commit()
|
|
|
|
# 验证密码
|
|
self.assertTrue(admin.verify_password('testpass123'))
|
|
self.assertFalse(admin.verify_password('wrongpass'))
|
|
|
|
# 验证权限
|
|
self.assertTrue(admin.is_super_admin())
|
|
self.assertTrue(admin.is_active())
|
|
|
|
def test_product_model(self):
|
|
"""测试产品模型"""
|
|
# 创建产品
|
|
product = Product(
|
|
product_id='TEST_PRODUCT',
|
|
product_name='测试产品',
|
|
description='这是一个测试产品'
|
|
)
|
|
db.session.add(product)
|
|
db.session.commit()
|
|
|
|
# 验证产品
|
|
self.assertEqual(product.product_id, 'TEST_PRODUCT')
|
|
self.assertEqual(product.product_name, '测试产品')
|
|
self.assertTrue(product.is_enabled())
|
|
|
|
# 测试统计信息
|
|
stats = product.get_stats()
|
|
self.assertEqual(stats['total_licenses'], 0)
|
|
self.assertEqual(stats['active_licenses'], 0)
|
|
self.assertEqual(stats['total_devices'], 0)
|
|
|
|
def test_license_model(self):
|
|
"""测试卡密模型"""
|
|
# 先创建产品
|
|
product = Product(
|
|
product_id='TEST_PRODUCT',
|
|
product_name='测试产品'
|
|
)
|
|
db.session.add(product)
|
|
db.session.commit()
|
|
|
|
# 创建卡密
|
|
license_obj = License(
|
|
product_id='TEST_PRODUCT',
|
|
type=1,
|
|
valid_days=30,
|
|
status=0
|
|
)
|
|
db.session.add(license_obj)
|
|
db.session.commit()
|
|
|
|
# 验证卡密
|
|
self.assertIsNotNone(license_obj.license_key)
|
|
self.assertEqual(len(license_obj.license_key), 32)
|
|
self.assertTrue(license_obj.is_formal())
|
|
self.assertFalse(license_obj.is_trial())
|
|
self.assertTrue(license_obj.can_activate())
|
|
self.assertFalse(license_obj.is_expired())
|
|
|
|
# 测试激活
|
|
success, message = license_obj.activate('TEST_MACHINE_CODE', '1.0.0')
|
|
self.assertTrue(success)
|
|
self.assertEqual(message, '激活成功')
|
|
self.assertTrue(license_obj.is_active())
|
|
|
|
# 测试验证
|
|
success, message = license_obj.verify('TEST_MACHINE_CODE', '1.0.0')
|
|
self.assertTrue(success)
|
|
self.assertEqual(message, '验证通过')
|
|
|
|
# 测试设备不匹配
|
|
success, message = license_obj.verify('WRONG_MACHINE_CODE', '1.0.0')
|
|
self.assertFalse(success)
|
|
self.assertEqual(message, '设备不匹配')
|
|
|
|
def test_device_model(self):
|
|
"""测试设备模型"""
|
|
# 创建产品
|
|
product = Product(product_id='TEST_PRODUCT', product_name='测试产品')
|
|
db.session.add(product)
|
|
|
|
# 创建卡密
|
|
license_obj = License(
|
|
product_id='TEST_PRODUCT',
|
|
type=1,
|
|
valid_days=30
|
|
)
|
|
db.session.add(license_obj)
|
|
db.session.commit()
|
|
|
|
# 创建设备
|
|
device = Device(
|
|
machine_code='TEST_MACHINE_CODE',
|
|
license_id=license_obj.license_id,
|
|
product_id='TEST_PRODUCT',
|
|
software_version='1.0.0'
|
|
)
|
|
db.session.add(device)
|
|
db.session.commit()
|
|
|
|
# 验证设备
|
|
self.assertTrue(device.is_active())
|
|
self.assertTrue(device.is_online())
|
|
|
|
# 测试使用时间
|
|
uptime_days = device.get_uptime_days()
|
|
self.assertGreaterEqual(uptime_days, 0)
|
|
|
|
def test_license_batch_generation(self):
|
|
"""测试批量生成卡密"""
|
|
# 创建产品
|
|
product = Product(product_id='TEST_PRODUCT', product_name='测试产品')
|
|
db.session.add(product)
|
|
db.session.commit()
|
|
|
|
# 批量生成卡密
|
|
licenses = License.generate_batch(
|
|
product_id='TEST_PRODUCT',
|
|
count=5,
|
|
license_type=1,
|
|
valid_days=365
|
|
)
|
|
|
|
self.assertEqual(len(licenses), 5)
|
|
|
|
# 保存到数据库
|
|
db.session.add_all(licenses)
|
|
db.session.commit()
|
|
|
|
# 验证生成的卡密
|
|
for license_obj in licenses:
|
|
self.assertEqual(license_obj.product_id, 'TEST_PRODUCT')
|
|
self.assertEqual(license_obj.type, 1)
|
|
self.assertEqual(license_obj.valid_days, 365)
|
|
self.assertEqual(license_obj.status, 0)
|
|
self.assertIsNotNone(license_obj.license_key)
|
|
self.assertEqual(len(license_obj.license_key), 32)
|
|
|
|
def test_license_extension(self):
|
|
"""测试卡密延期"""
|
|
# 创建产品和卡密
|
|
product = Product(product_id='TEST_PRODUCT', product_name='测试产品')
|
|
db.session.add(product)
|
|
|
|
license_obj = License(
|
|
product_id='TEST_PRODUCT',
|
|
type=1,
|
|
valid_days=30,
|
|
status=1,
|
|
activate_time=datetime.utcnow()
|
|
)
|
|
db.session.add(license_obj)
|
|
db.session.commit()
|
|
|
|
original_expire_time = license_obj.expire_time
|
|
|
|
# 延期30天
|
|
success, message = license_obj.extend_validity(30)
|
|
self.assertTrue(success)
|
|
self.assertEqual(message, '延期成功')
|
|
|
|
# 验证延期后的时间
|
|
expected_expire_time = original_expire_time + timedelta(days=30)
|
|
self.assertEqual(license_obj.expire_time, expected_expire_time)
|
|
|
|
def test_trial_conversion(self):
|
|
"""测试试用转正式"""
|
|
# 创建产品和试用卡密
|
|
product = Product(product_id='TEST_PRODUCT', product_name='测试产品')
|
|
db.session.add(product)
|
|
|
|
license_obj = License(
|
|
product_id='TEST_PRODUCT',
|
|
type=0, # 试用
|
|
valid_days=7,
|
|
status=1,
|
|
activate_time=datetime.utcnow()
|
|
)
|
|
db.session.add(license_obj)
|
|
db.session.commit()
|
|
|
|
# 转为正式
|
|
success, message = license_obj.convert_to_formal(365)
|
|
self.assertTrue(success)
|
|
self.assertEqual(message, '转换成功')
|
|
|
|
# 验证转换结果
|
|
self.assertTrue(license_obj.is_formal())
|
|
self.assertFalse(license_obj.is_trial())
|
|
self.assertEqual(license_obj.valid_days, 365)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |