Coverage for tests/tests_api/misc/documents.py: 37%

57 statements  

« prev     ^ index     » next       coverage.py v7.6.2, created at 2024-10-10 03:02 +0300

1import datetime 

2 

3import pytest 

4from sotrans_models.models.misc.document import ( 

5 DocumentCreateModel, 

6 DocumentDBModel, 

7) 

8from sotrans_models.models.resources.drivers import ( 

9 DriverCreateModel, 

10 DriverDBModel, 

11) 

12from sotrans_models.models.responses import GenericGetListResponse 

13from utils.dt_utils import get_current_datetime 

14 

15from ...conftest import APIDataStorage 

16from ...random_model import generate_models_json 

17from ...tests_api.auth import test_client, token 

18 

19 

20@pytest.mark.dependency 

21def test_create_document(test_client): 

22 json_data = generate_models_json( 

23 DocumentCreateModel, 

24 { 

25 "valid_until": get_current_datetime() + datetime.timedelta(days=1), 

26 "collection": "documents", 

27 }, 

28 ) 

29 response = test_client.post("/documents", json=json_data) 

30 assert response.status_code == 201 

31 APIDataStorage.document = DocumentDBModel(**response.json()) 

32 

33 

34@pytest.mark.dependency(depends=["test_create_document"]) 

35def test_get_document(test_client): 

36 response = test_client.get(f"/documents/{APIDataStorage.document.id}") 

37 assert response.status_code == 200 

38 assert ( 

39 APIDataStorage.document.collection 

40 == DocumentDBModel(**response.json()).collection 

41 ) 

42 

43 

44@pytest.mark.dependency(depends=["test_create_document"]) 

45def test_update_document(test_client): 

46 patch_data = {"note": "test_data", "etag": None} 

47 response = test_client.patch( 

48 f"/documents/{APIDataStorage.document.id}", json=patch_data 

49 ) 

50 assert response.status_code == 200 

51 assert ( 

52 DocumentDBModel(**response.json()).note 

53 == patch_data[DocumentDBModel.note] 

54 ) 

55 

56 

57@pytest.mark.dependency(depends=["test_create_document"]) 

58def test_get_documents(test_client): 

59 response = test_client.get("/documents") 

60 assert response.status_code == 200 

61 assert GenericGetListResponse[DocumentDBModel](**response.json()).total > 0 

62 

63 

64@pytest.mark.dependency(depends=["test_create_document"]) 

65def test_remove_document(test_client): 

66 response = test_client.delete(f"/documents/{APIDataStorage.document.id}") 

67 assert response.status_code == 204 

68 APIDataStorage.document = None 

69 

70 

71@pytest.mark.dependency 

72def test_create_document_v2(test_client): 

73 model_dump = generate_models_json( 

74 DriverCreateModel, 

75 {"documents": [{"type": "passport", "link": "mongomock bug"}]}, 

76 ) # adding initial document actually doesn't help, added AttributeError in handling 

77 response = test_client.post("/drivers", json=model_dump) 

78 assert response.status_code == 201 

79 APIDataStorage.driver = DriverDBModel(**response.json()) 

80 response = test_client.post( 

81 f"/drivers/{APIDataStorage.driver.id}/documents", 

82 json=generate_models_json( 

83 DocumentCreateModel, 

84 { 

85 "valid_until": get_current_datetime() 

86 + datetime.timedelta(days=1) 

87 }, 

88 ), 

89 ) 

90 assert response.status_code == 201 

91 APIDataStorage.document = DocumentDBModel(**response.json()) 

92 

93 

94@pytest.mark.dependency(depends=["test_create_document_v2"]) 

95def test_get_document_v2(test_client): 

96 response = test_client.get( 

97 f"/drivers/{APIDataStorage.driver.id}/documents" 

98 ) 

99 assert response.status_code == 200 or response.status_code == 404 

100 if response.status_code == 404: 

101 return 

102 got = GenericGetListResponse[DocumentDBModel](**response.json()) 

103 assert got.total > 0 

104 for i in got.items: 

105 if i.link == APIDataStorage.document.link: 

106 return 

107 assert False