| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- """
- Todo类的单元测试
- """
- import pytest
- from todo.todo import Todo, TodoItem
- class TestTodoItem:
- """TodoItem类测试"""
-
- def test_create_todo_item(self):
- """测试创建TodoItem"""
- item = TodoItem(id=1, title="测试任务")
- assert item.id == 1
- assert item.title == "测试任务"
- assert item.completed is False
- assert item.created_at is not None
-
- def test_todo_item_to_dict(self):
- """测试TodoItem转字典"""
- item = TodoItem(id=1, title="测试任务", completed=True)
- data = item.to_dict()
- assert data["id"] == 1
- assert data["title"] == "测试任务"
- assert data["completed"] is True
- assert "created_at" in data
-
- def test_todo_item_from_dict(self):
- """测试从字典创建TodoItem"""
- data = {
- "id": 1,
- "title": "测试任务",
- "completed": True,
- "created_at": "2024-02-08 10:00:00"
- }
- item = TodoItem.from_dict(data)
- assert item.id == 1
- assert item.title == "测试任务"
- assert item.completed is True
- assert item.created_at == "2024-02-08 10:00:00"
-
- def test_todo_item_repr(self):
- """测试TodoItem字符串表示"""
- item = TodoItem(id=1, title="测试任务")
- assert "1" in repr(item)
- assert "测试任务" in repr(item)
- class TestTodo:
- """Todo类测试"""
-
- def test_create_todo(self):
- """测试创建Todo对象"""
- todo = Todo()
- assert len(todo.items) == 0
- assert todo.next_id == 1
-
- def test_add_todo_item(self):
- """测试添加待办事项"""
- todo = Todo()
- item = todo.add("买菜")
- assert item.id == 1
- assert item.title == "买菜"
- assert len(todo.items) == 1
- assert todo.next_id == 2
-
- def test_add_multiple_items(self):
- """测试添加多个待办事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- todo.add("任务3")
- assert len(todo.items) == 3
- assert todo.next_id == 4
-
- def test_add_empty_title_raises_error(self):
- """测试添加空标题抛出异常"""
- todo = Todo()
- with pytest.raises(ValueError):
- todo.add("")
- with pytest.raises(ValueError):
- todo.add(" ")
-
- def test_add_strips_whitespace(self):
- """测试添加时去除空白字符"""
- todo = Todo()
- item = todo.add(" 买菜 ")
- assert item.title == "买菜"
-
- def test_delete_todo_item(self):
- """测试删除待办事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- assert todo.delete(1) is True
- assert len(todo.items) == 1
- assert todo.items[0].id == 2
-
- def test_delete_nonexistent_item(self):
- """测试删除不存在的事项"""
- todo = Todo()
- assert todo.delete(999) is False
-
- def test_complete_todo_item(self):
- """测试标记完成"""
- todo = Todo()
- item = todo.add("任务1")
- assert item.completed is False
- assert todo.complete(1) is True
- assert item.completed is True
-
- def test_complete_nonexistent_item(self):
- """测试标记不存在的事项为完成"""
- todo = Todo()
- assert todo.complete(999) is False
-
- def test_uncomplete_todo_item(self):
- """测试标记未完成"""
- todo = Todo()
- item = todo.add("任务1")
- todo.complete(1)
- assert item.completed is True
- assert todo.uncomplete(1) is True
- assert item.completed is False
-
- def test_get_by_id(self):
- """测试根据ID获取事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- item = todo.get_by_id(2)
- assert item is not None
- assert item.title == "任务2"
- assert todo.get_by_id(999) is None
-
- def test_get_all(self):
- """测试获取所有事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- items = todo.get_all()
- assert len(items) == 2
- # 确保返回的是副本
- items.clear()
- assert len(todo.items) == 2
-
- def test_get_pending(self):
- """测试获取未完成事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- todo.add("任务3")
- todo.complete(2)
- pending = todo.get_pending()
- assert len(pending) == 2
- assert all(not item.completed for item in pending)
-
- def test_get_completed(self):
- """测试获取已完成事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- todo.add("任务3")
- todo.complete(1)
- todo.complete(3)
- completed = todo.get_completed()
- assert len(completed) == 2
- assert all(item.completed for item in completed)
-
- def test_clear_completed(self):
- """测试清除已完成事项"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- todo.add("任务3")
- todo.complete(1)
- todo.complete(2)
- count = todo.clear_completed()
- assert count == 2
- assert len(todo.items) == 1
- assert todo.items[0].id == 3
-
- def test_to_dict(self):
- """测试转换为字典"""
- todo = Todo()
- todo.add("任务1")
- todo.add("任务2")
- data = todo.to_dict()
- assert "todos" in data
- assert "next_id" in data
- assert len(data["todos"]) == 2
- assert data["next_id"] == 3
-
- def test_from_dict(self):
- """测试从字典加载"""
- data = {
- "todos": [
- {"id": 1, "title": "任务1", "completed": False, "created_at": "2024-02-08 10:00:00"},
- {"id": 2, "title": "任务2", "completed": True, "created_at": "2024-02-08 11:00:00"}
- ],
- "next_id": 3
- }
- todo = Todo()
- todo.from_dict(data)
- assert len(todo.items) == 2
- assert todo.next_id == 3
- assert todo.items[0].title == "任务1"
- assert todo.items[1].completed is True
|