Coverage for src/tests/modules/training/trainings/test_training_db_repository.py: 89%

38 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Module for testing the training database repository.""" 

2 

3from dataclasses import replace 

4 

5import pytest 

6 

7from kwai_bc_training.trainings.training_db_repository import TrainingDbRepository 

8from kwai_bc_training.trainings.training_repository import ( 

9 TrainingRepository, 

10) 

11from kwai_core.db.database import Database 

12from kwai_core.db.exceptions import QueryException 

13 

14 

15pytestmark = pytest.mark.db 

16 

17 

18@pytest.fixture(scope="module") 

19def repo(database: Database) -> TrainingRepository: 

20 """Fixture for a training repository.""" 

21 return TrainingDbRepository(database) 

22 

23 

24async def test_create(make_training_in_db): 

25 """Test create a training.""" 

26 training = await make_training_in_db() 

27 assert training is not None, "There should be a training." 

28 

29 

30async def test_update(repo: TrainingRepository, make_training_in_db): 

31 """Test update of a training.""" 

32 training = await make_training_in_db() 

33 updated_training = replace(training, remark="This training is updated.") 

34 try: 

35 await repo.update(updated_training) 

36 except QueryException as qe: 

37 pytest.fail(str(qe)) 

38 

39 

40async def test_get_all(repo: TrainingRepository, make_training_in_db): 

41 """Test get all trainings.""" 

42 training = await make_training_in_db() 

43 trainings = {entity.id: entity async for entity in repo.get_all()} 

44 assert training.id in trainings, "The training should be returned in the list" 

45 

46 

47async def test_get_by_id(repo: TrainingRepository, make_training_in_db): 

48 """Test get training by id.""" 

49 training = await make_training_in_db() 

50 training = await repo.get_by_id(training.id) 

51 assert training is not None, "There should be a result" 

52 

53 

54async def test_delete(repo: TrainingRepository, make_training_in_db): 

55 """Test delete of a training.""" 

56 training = await make_training_in_db() 

57 try: 

58 await repo.delete(training) 

59 except QueryException as qe: 

60 pytest.fail(str(qe)) 

61 

62 

63async def test_reset_schedule(database: Database, make_training_schedule_in_db): 

64 """Test reset training schema.""" 

65 training_schedule = await make_training_schedule_in_db() 

66 repo = TrainingDbRepository(database) 

67 await repo.reset_schedule(training_schedule, False)