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