1- import code42cli .cmds .securitydata .extraction as extraction_module
21import pytest
3- from code42cli . cmds . securitydata . enums import ExposureType as ExposureTypeOptions
2+
43from py42 .sdk import SDKClient
54from py42 .sdk .queries .fileevents .filters import *
65
6+ from code42cli import PRODUCT_NAME
7+ from code42cli .cmds .securitydata .enums import ExposureType as ExposureTypeOptions
8+ import code42cli .cmds .securitydata .extraction as extraction_module
79from .conftest import (
810 SECURITYDATA_NAMESPACE ,
911 begin_date_str ,
@@ -34,6 +36,11 @@ def error_logger(mocker):
3436 return mocker .patch ("{0}.extraction.get_error_logger" .format (SECURITYDATA_NAMESPACE ))
3537
3638
39+ @pytest .fixture
40+ def error_printer (mocker ):
41+ return mocker .patch ("{}.cmds.securitydata.extraction.print_error" .format (PRODUCT_NAME ))
42+
43+
3744@pytest .fixture
3845def extractor (mocker ):
3946 mock = mocker .MagicMock ()
@@ -50,6 +57,32 @@ def namespace_with_begin(namespace):
5057 return namespace
5158
5259
60+ @pytest .fixture
61+ def is_interactive_function (mocker ):
62+ return mocker .patch ("{}.cmds.securitydata.extraction.is_interactive" .format (PRODUCT_NAME ))
63+
64+
65+ @pytest .fixture
66+ def interactive_mode (is_interactive_function ):
67+ is_interactive_function .return_value = True
68+ return is_interactive_function
69+
70+
71+ @pytest .fixture
72+ def non_interactive_mode (is_interactive_function ):
73+ is_interactive_function .return_value = False
74+ return is_interactive_function
75+
76+
77+ @pytest .fixture
78+ def checkpoint (mocker ):
79+ return mocker .patch (
80+ "{}.cmds.shared.cursor_store.FileEventCursorStore.get_stored_insertion_timestamp" .format (
81+ PRODUCT_NAME
82+ )
83+ )
84+
85+
5386def filter_term_is_in_call_args (extractor , term ):
5487 arg_filters = extractor .extract .call_args [0 ]
5588 for f in arg_filters :
@@ -292,27 +325,21 @@ def test_extract_when_end_date_is_before_begin_date_causes_exit(
292325
293326
294327def test_when_given_begin_date_past_90_days_and_is_incremental_and_a_stored_cursor_exists_and_not_given_end_date_does_not_use_any_event_timestamp_filter (
295- mocker , sdk , profile , logger , namespace , extractor
328+ sdk , profile , logger , namespace , extractor , checkpoint
296329):
297330 namespace .begin = "2019-01-01"
298331 namespace .incremental = True
299- mock_checkpoint = mocker .patch (
300- "code42cli.cmds.shared.cursor_store.FileEventCursorStore.get_stored_insertion_timestamp"
301- )
302- mock_checkpoint .return_value = 22624624
332+ checkpoint .return_value = 22624624
303333 extraction_module .extract (sdk , profile , logger , namespace )
304334 assert not filter_term_is_in_call_args (extractor , EventTimestamp ._term )
305335
306336
307337def test_when_given_begin_date_and_not_interactive_mode_and_cursor_exists_uses_begin_date (
308- mocker , sdk , profile , logger , namespace , extractor
338+ sdk , profile , logger , namespace , extractor
309339):
310340 namespace .begin = get_test_date_str (days_ago = 1 )
311341 namespace .incremental = False
312- mock_checkpoint = mocker .patch (
313- "code42cli.cmds.shared.cursor_store.FileEventCursorStore.get_stored_insertion_timestamp"
314- )
315- mock_checkpoint .return_value = 22624624
342+ checkpoint .return_value = 22624624
316343 extraction_module .extract (sdk , profile , logger , namespace )
317344
318345 actual_ts = get_filter_value_from_json (extractor .extract .call_args [0 ][0 ], filter_index = 0 )
@@ -322,14 +349,11 @@ def test_when_given_begin_date_and_not_interactive_mode_and_cursor_exists_uses_b
322349
323350
324351def test_when_not_given_begin_date_and_is_incremental_but_no_stored_checkpoint_exists_causes_exit (
325- mocker , sdk , profile , logger , namespace , extractor
352+ sdk , profile , logger , namespace , extractor
326353):
327354 namespace .begin = None
328355 namespace .is_incremental = True
329- mock_checkpoint = mocker .patch (
330- "code42cli.cmds.shared.cursor_store.FileEventCursorStore.get_stored_insertion_timestamp"
331- )
332- mock_checkpoint .return_value = None
356+ checkpoint .return_value = None
333357 with pytest .raises (SystemExit ):
334358 extraction_module .extract (sdk , profile , logger , namespace )
335359
@@ -492,42 +516,27 @@ def side_effect():
492516
493517
494518def test_extract_when_global_variable_is_true_and_is_interactive_prints_error (
495- mocker , sdk , profile , logger , namespace_with_begin , extractor
519+ sdk , profile , logger , namespace_with_begin , extractor , error_printer , interactive_mode
496520):
497- mock_error_printer = mocker .patch ("code42cli.cmds.securitydata.extraction.print_error" )
498- mock_is_interactive_function = mocker .patch (
499- "code42cli.cmds.securitydata.extraction.is_interactive"
500- )
501- mock_is_interactive_function .return_value = True
502521 extraction_module ._EXCEPTIONS_OCCURRED = True
503522 extraction_module .extract (sdk , profile , logger , namespace_with_begin )
504- assert mock_error_printer .call_count
523+ assert error_printer .call_count
505524
506525
507526def test_extract_when_global_variable_is_true_and_not_is_interactive_does_not_print_error (
508- mocker , sdk , profile , logger , namespace_with_begin , extractor
527+ sdk , profile , logger , namespace_with_begin , extractor , error_printer , non_interactive_mode
509528):
510- mock_error_printer = mocker .patch ("code42cli.cmds.securitydata.extraction.print_error" )
511- mock_is_interactive_function = mocker .patch (
512- "code42cli.cmds.securitydata.extraction.is_interactive"
513- )
514- mock_is_interactive_function .return_value = False
515529 extraction_module ._EXCEPTIONS_OCCURRED = True
516530 extraction_module .extract (sdk , profile , logger , namespace_with_begin )
517- assert not mock_error_printer .call_count
531+ assert not error_printer .call_count
518532
519533
520534def test_extract_when_global_variable_is_false_and_is_interactive_does_not_print_error (
521- mocker , sdk , profile , logger , namespace_with_begin , extractor
535+ sdk , profile , logger , namespace_with_begin , extractor , error_printer , interactive_mode
522536):
523- mock_error_printer = mocker .patch ("code42cli.cmds.securitydata.extraction.print_error" )
524- mock_is_interactive_function = mocker .patch (
525- "code42cli.cmds.securitydata.extraction.is_interactive"
526- )
527- mock_is_interactive_function .return_value = True
528537 extraction_module ._EXCEPTIONS_OCCURRED = False
529538 extraction_module .extract (sdk , profile , logger , namespace_with_begin )
530- assert not mock_error_printer .call_count
539+ assert not error_printer .call_count
531540
532541
533542def test_when_sdk_raises_exception_global_variable_gets_set (
@@ -537,7 +546,7 @@ def test_when_sdk_raises_exception_global_variable_gets_set(
537546 mock_sdk = mocker .MagicMock ()
538547
539548 # For ease
540- mock = mocker .patch ("code42cli .cmds.securitydata.extraction.is_interactive" )
549+ mock = mocker .patch ("{} .cmds.securitydata.extraction.is_interactive" . format ( PRODUCT_NAME ) )
541550 mock .return_value = False
542551
543552 def sdk_side_effect (self , * args ):
0 commit comments