brisonus_app_eq/persistence/test_data_store.py

97 lines
3.2 KiB
Python

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
import unittest
import os
import shutil
from datetime import datetime
from persistence.data_store_origin import DataStore
class TestDataStore(unittest.TestCase):
def setUp(self):
"""测试前设置"""
self.test_storage_dir = "test_data/projects"
self.data_store = DataStore(storage_dir=self.test_storage_dir)
def tearDown(self):
"""测试后清理"""
if os.path.exists(self.test_storage_dir):
shutil.rmtree("test_data")
def test_save_and_load_project(self):
"""测试保存和加载项目"""
# 保存项目
project_name = "test_project"
description = "测试项目描述"
result = self.data_store.save_project(project_name, description)
self.assertTrue(result)
# 加载并验证项目
project_data = self.data_store.load_project(project_name)
self.assertIsNotNone(project_data)
self.assertEqual(project_data.name, project_name)
self.assertEqual(project_data.description, description)
self.assertEqual(len(project_data.params), 0)
def test_add_param_to_project(self):
"""测试向项目添加参数"""
# 创建项目
project_name = "test_project"
self.data_store.save_project(project_name)
# 添加参数
param_name = "test_param"
channel_data = {
1: {
'delay_data': 0.1,
'vol_data': -6.0,
'mix_left_data': 0.5,
'mix_right_data': 0.5,
'filters': [
{
'frequency': 1000,
'gain': 0,
'q': 0.7,
'type': 'peak',
'slope': 12,
'enabled': True
}
]
}
}
result = self.data_store.add_param_to_project(
project_name, param_name, channel_data, "测试参数描述"
)
self.assertTrue(result)
# 验证参数添加
project_data = self.data_store.load_project(project_name)
self.assertIn(param_name, project_data.params)
self.assertEqual(
project_data.params[param_name].channels[1].delay_data,
channel_data[1]['delay_data']
)
def test_list_and_delete_projects(self):
"""测试项目列表和删除功能"""
# 创建多个项目
projects = ["project1", "project2", "project3"]
for project in projects:
self.data_store.save_project(project)
# 验证项目列表
saved_projects = self.data_store.list_projects()
self.assertEqual(len(saved_projects), len(projects))
for project in projects:
self.assertIn(project, saved_projects)
# 测试删除项目
self.assertTrue(self.data_store.delete_project("project1"))
saved_projects = self.data_store.list_projects()
self.assertEqual(len(saved_projects), len(projects) - 1)
self.assertNotIn("project1", saved_projects)
if __name__ == '__main__':
unittest.main()