| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- Storage类的单元测试
- """
- import os
- import json
- import pytest
- from todo.todo import Todo
- from todo.storage import Storage
- @pytest.fixture
- def temp_storage(tmp_path):
- """创建临时存储文件"""
- filepath = tmp_path / "test_todos.json"
- return Storage(str(filepath))
- class TestStorage:
- """Storage类测试"""
-
- def test_create_storage(self, temp_storage):
- """测试创建Storage对象"""
- assert temp_storage.filepath.endswith("test_todos.json")
-
- def test_save_and_load(self, temp_storage):
- """测试保存和加载"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- todo.complete(1)
-
- # 保存
- assert temp_storage.save(todo) is True
- assert temp_storage.exists() is True
-
- # 加载
- loaded_todo = temp_storage.load()
- assert len(loaded_todo.items) == 2
- assert loaded_todo.items[0].title == "任务1"
- assert loaded_todo.items[0].completed is True
- assert loaded_todo.items[1].title == "任务2"
- assert loaded_todo.next_id == 3
-
- def test_load_nonexistent_file(self, temp_storage):
- """测试加载不存在的文件"""
- todo = temp_storage.load()
- assert len(todo.items) == 0
- assert todo.next_id == 1
-
- def test_load_invalid_json(self, temp_storage):
- """测试加载无效的JSON文件"""
- # 创建无效的JSON文件
- with open(temp_storage.filepath, 'w') as f:
- f.write("invalid json content")
-
- todo = temp_storage.load()
- assert len(todo.items) == 0
- assert todo.next_id == 1
-
- def test_exists(self, temp_storage):
- """测试文件存在性检查"""
- assert temp_storage.exists() is False
-
- todo = Todo()
- temp_storage.save(todo)
- assert temp_storage.exists() is True
-
- def test_delete(self, temp_storage):
- """测试删除存储文件"""
- todo = Todo()
- temp_storage.save(todo)
- assert temp_storage.exists() is True
-
- assert temp_storage.delete() is True
- assert temp_storage.exists() is False
-
- def test_delete_nonexistent_file(self, temp_storage):
- """测试删除不存在的文件"""
- assert temp_storage.delete() is True
-
- def test_save_creates_valid_json(self, temp_storage):
- """测试保存的JSON格式正确"""
- todo = Todo()
- todo.add("任务1")
- temp_storage.save(todo)
-
- with open(temp_storage.filepath, 'r', encoding='utf-8') as f:
- data = json.load(f)
-
- assert "todos" in data
- assert "next_id" in data
- assert isinstance(data["todos"], list)
- assert isinstance(data["next_id"], int)
-
- def test_save_preserves_chinese_characters(self, temp_storage):
- """测试保存中文字符"""
- todo = Todo()
- todo.add("买菜做饭")
- temp_storage.save(todo)
-
- loaded_todo = temp_storage.load()
- assert loaded_todo.items[0].title == "买菜做饭"
|