Coverage for tests/test_db.py: 100%

55 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-09-28 09:38 +0200

1import csv 

2import pytest 

3from pathlib import Path 

4from art_studio_tz.api import DB 

5 

6@pytest.fixture 

7def db(tmp_path): 

8 """Создаём экземпляр DB с временным CSV.""" 

9 return DB(tmp_path, "quotes", ["text", "author"]) 

10 

11def test_create_and_read(db): 

12 item = {"text": "Hello", "author": "Someone"} 

13 new_id = db.create(item) 

14 assert new_id == 1 

15 

16 row = db.read(new_id) 

17 assert row["id"] == "1" 

18 assert row["text"] == "Hello" 

19 assert row["author"] == "Someone" 

20 

21def test_read_all(db): 

22 db.create({"text": "A", "author": "X"}) 

23 db.create({"text": "B", "author": "Y"}) 

24 all_rows = db.read_all() 

25 assert len(all_rows) == 2 

26 assert all_rows[0]["text"] == "A" 

27 assert all_rows[1]["author"] == "Y" 

28 

29def test_update(db): 

30 id1 = db.create({"text": "Old", "author": "X"}) 

31 db.update(id1, {"text": "New"}) 

32 row = db.read(id1) 

33 assert row["text"] == "New" 

34 assert row["author"] == "X" 

35 

36def test_delete(db): 

37 id1 = db.create({"text": "A", "author": "X"}) 

38 id2 = db.create({"text": "B", "author": "Y"}) 

39 db.delete(id1) 

40 all_rows = db.read_all() 

41 assert len(all_rows) == 1 

42 assert all_rows[0]["id"] == str(id2) 

43 

44def test_delete_all(db): 

45 db.create({"text": "A", "author": "X"}) 

46 db.create({"text": "B", "author": "Y"}) 

47 db.delete_all() 

48 assert db.count() == 0 

49 assert db.read_all() == [] 

50 

51@pytest.mark.parametrize("num_records", [0, 1, 5]) 

52def test_count(db, num_records): 

53 # добавляем num_records записей 

54 for i in range(num_records): 

55 db.create({"text": f"Q{i}", "author": f"A{i}"}) 

56 assert db.count() == num_records 

57 

58def test_update_non_existing(db): 

59 db.create({"text": "A", "author": "X"}) 

60 db.update(999, {"text": "New"}) 

61 # существующие записи остаются без изменени 

62 row = db.read(1) 

63 assert row["text"] == "A" 

64 

65def test_delete_non_existing(db): 

66 db.create({"text": "A", "author": "X"}) 

67 db.delete(999) 

68 assert db.count() == 1