# # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # from unittest import mock from airbyte_cdk.utils.event_timing import create_timer def test_counter_init(): with create_timer("Counter") as timer: assert timer.name == "Counter" def test_counter_start_event(): with create_timer("Counter") as timer: with mock.patch("airbyte_cdk.utils.event_timing.EventTimer.start_event") as mock_start_event: timer.start_event("test_event") mock_start_event.assert_called_with("test_event") def test_counter_finish_event(): with create_timer("Counter") as timer: with mock.patch("airbyte_cdk.utils.event_timing.EventTimer.finish_event") as mock_finish_event: timer.finish_event("test_event") mock_finish_event.assert_called_with("test_event") def test_timer_multiple_events(): with create_timer("Counter") as timer: for i in range(10): timer.start_event("test_event") timer.finish_event() assert timer.count == 10 def test_report_is_ordered_by_name_by_default(): names = ["j", "b", "g", "d", "e", "f", "c", "h", "i", "a"] with create_timer("Source Counter") as timer: for name in names: timer.start_event(name) timer.finish_event() report = timer.report().split("\n")[1:] # ignore the first line report_names = [line.split(" ")[0] for line in report] assert report_names == sorted(names) def test_double_finish_is_safely_ignored(): with create_timer("Source Counter") as timer: timer.start_event("test_event") timer.finish_event() timer.finish_event() assert timer.count == 1