Coverage for test/conftest.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.3.1, created at 2023-09-22 17:59 +0530

1"""Conftest for Pytest.""" 

2from __future__ import annotations 

3 

4from typing import Any 

5from unittest.mock import Mock 

6 

7import pytest 

8 

9from src.click_opt.cli_options import CliOptions 

10from src.esxport import EsXport 

11 

12 

13@pytest.fixture() 

14def cli_options() -> CliOptions: 

15 """Mock Click CLI options.""" 

16 query: dict[str, Any] = {"query": {"match_all": {}}} 

17 return CliOptions( 

18 { 

19 "query": query, 

20 "output_file": "output.csv", 

21 "url": "http://localhost:9200", 

22 "user": "admin", 

23 "password": "password", 

24 "index_prefixes": ["index1", "index2"], 

25 "fields": ["field1", "field2"], 

26 "sort": [], 

27 "delimiter": ",", 

28 "max_results": 100, 

29 "scroll_size": 100, 

30 "meta_fields": [], 

31 "verify_certs": True, 

32 "ca_certs": None, 

33 "client_cert": None, 

34 "client_key": None, 

35 "debug": False, 

36 }, 

37 ) 

38 

39 

40@pytest.fixture() 

41def es_client_without_data() -> Mock: 

42 """Mock ElasticSearch Client.""" 

43 mock_client = Mock() 

44 mock_client.search.return_value = { 

45 "_scroll_id": "abc", 

46 "hits": { 

47 "total": { 

48 "value": 0, 

49 }, 

50 "hits": None, 

51 }, 

52 } 

53 return mock_client 

54 

55 

56@pytest.fixture() 

57def es_client_with_data() -> Mock: 

58 """Mock ElasticSearch Client.""" 

59 mock_client = Mock() 

60 mock_client.search.return_value = { 

61 "_scroll_id": "abc", 

62 "hits": { 

63 "total": { 

64 "value": 2, 

65 }, 

66 "hits": [ 

67 { 

68 "_index": "index1", 

69 "_id": "ABC", 

70 "_score": 2, 

71 "_source": { 

72 "test_id": "ABC", 

73 }, 

74 }, 

75 { 

76 "_index": "index1", 

77 "_id": "DEF", 

78 "_score": 1, 

79 "_source": { 

80 "test_id": "DEF", 

81 }, 

82 }, 

83 ], 

84 }, 

85 } 

86 mock_client.get_mapping.return_value = { 

87 "index1": { 

88 "mappings": { 

89 "properties": ["test_id"], 

90 }, 

91 }, 

92 "index2": { 

93 "mappings": { 

94 "properties": ["field1", "field2", "field3"], 

95 }, 

96 }, 

97 } 

98 return mock_client 

99 

100 

101@pytest.fixture() 

102def esxport_obj(cli_options: CliOptions, es_client_without_data: Mock) -> EsXport: 

103 """Mocked EsXport class.""" 

104 return EsXport(cli_options, es_client_without_data) 

105 

106 

107@pytest.fixture() 

108def esxport_obj_with_data(cli_options: CliOptions, es_client_with_data: Mock) -> EsXport: 

109 """Mocked EsXport class.""" 

110 return EsXport(cli_options, es_client_with_data)