| """ |
| Tests for ProgressMapper |
| """ |
|
|
| from src.server.services.crawling.progress_mapper import ProgressMapper |
|
|
|
|
| class TestProgressMapper: |
| """Test suite for ProgressMapper""" |
|
|
| def test_initialization(self): |
| """Test ProgressMapper initialization""" |
| mapper = ProgressMapper() |
|
|
| assert mapper.last_overall_progress == 0 |
| assert mapper.current_stage == "starting" |
|
|
| def test_map_progress_basic(self): |
| """Test basic progress mapping""" |
| mapper = ProgressMapper() |
|
|
| |
| progress = mapper.map_progress("starting", 50) |
| assert progress == 0 |
|
|
| |
| progress = mapper.map_progress("analyzing", 50) |
| assert progress == 2 |
|
|
| |
| progress = mapper.map_progress("crawling", 50) |
| assert progress == 4 |
|
|
| def test_progress_never_goes_backwards(self): |
| """Test that progress never decreases""" |
| mapper = ProgressMapper() |
|
|
| |
| progress1 = mapper.map_progress("crawling", 50) |
| assert progress1 == 4 |
|
|
| |
| progress2 = mapper.map_progress("analyzing", 100) |
| assert progress2 == 4 |
|
|
| |
| progress3 = mapper.map_progress("document_storage", 50) |
| assert progress3 == 20 |
|
|
| def test_completion_handling(self): |
| """Test completion status handling""" |
| mapper = ProgressMapper() |
|
|
| |
| progress = mapper.map_progress("completed", 0) |
| assert progress == 100 |
|
|
| |
| progress = mapper.map_progress("completed", 50) |
| assert progress == 100 |
|
|
| def test_error_handling(self): |
| """Test error status handling""" |
| mapper = ProgressMapper() |
|
|
| |
| progress = mapper.map_progress("error", 50) |
| assert progress == -1 |
|
|
| def test_unknown_stage(self): |
| """Test handling of unknown stages""" |
| mapper = ProgressMapper() |
|
|
| |
| mapper.map_progress("crawling", 50) |
| current = mapper.last_overall_progress |
| assert current == 4 |
|
|
| |
| progress = mapper.map_progress("unknown_stage", 50) |
| assert progress == current |
|
|
| def test_stage_ranges(self): |
| """Test all defined stage ranges""" |
| mapper = ProgressMapper() |
|
|
| |
| assert mapper.STAGE_RANGES["starting"] == (0, 1) |
| assert mapper.STAGE_RANGES["analyzing"] == (1, 2) |
| assert mapper.STAGE_RANGES["crawling"] == (2, 5) |
| assert mapper.STAGE_RANGES["processing"] == (5, 8) |
| assert mapper.STAGE_RANGES["source_creation"] == (8, 10) |
| assert mapper.STAGE_RANGES["document_storage"] == (10, 30) |
| assert mapper.STAGE_RANGES["code_extraction"] == (30, 95) |
| assert mapper.STAGE_RANGES["finalization"] == (95, 100) |
| assert mapper.STAGE_RANGES["completed"] == (100, 100) |
|
|
| |
| assert mapper.STAGE_RANGES["reading"] == (0, 5) |
| assert mapper.STAGE_RANGES["extracting"] == (5, 10) |
| assert mapper.STAGE_RANGES["chunking"] == (10, 15) |
| assert mapper.STAGE_RANGES["creating_source"] == (15, 20) |
| assert mapper.STAGE_RANGES["summarizing"] == (20, 30) |
| assert mapper.STAGE_RANGES["storing"] == (30, 100) |
|
|
| def test_calculate_stage_progress(self): |
| """Test calculating percentage within a stage""" |
| mapper = ProgressMapper() |
|
|
| |
| progress = mapper.calculate_stage_progress(5, 10) |
| assert progress == 50.0 |
|
|
| |
| progress = mapper.calculate_stage_progress(0, 10) |
| assert progress == 0.0 |
|
|
| |
| progress = mapper.calculate_stage_progress(10, 10) |
| assert progress == 100.0 |
|
|
| |
| progress = mapper.calculate_stage_progress(5, 0) |
| assert progress == 0.0 |
|
|
| def test_map_batch_progress(self): |
| """Test batch progress mapping""" |
| mapper = ProgressMapper() |
|
|
| |
| |
| |
| progress = mapper.map_batch_progress("document_storage", 1, 5) |
| assert progress == 10 |
|
|
| |
| |
| |
| progress = mapper.map_batch_progress("document_storage", 3, 5) |
| assert progress == 18 |
|
|
| |
| |
| |
| progress = mapper.map_batch_progress("document_storage", 5, 5) |
| assert progress == 26 |
|
|
| def test_map_with_substage(self): |
| """Test mapping with substage information""" |
| mapper = ProgressMapper() |
|
|
| |
| |
| progress = mapper.map_with_substage("document_storage", "embeddings", 50) |
| assert progress == 20 |
|
|
| def test_reset(self): |
| """Test resetting the mapper""" |
| mapper = ProgressMapper() |
|
|
| |
| mapper.map_progress("document_storage", 50) |
| assert mapper.last_overall_progress == 20 |
| assert mapper.current_stage == "document_storage" |
|
|
| |
| mapper.reset() |
| assert mapper.last_overall_progress == 0 |
| assert mapper.current_stage == "starting" |
|
|
| def test_get_current_stage(self): |
| """Test getting current stage""" |
| mapper = ProgressMapper() |
|
|
| assert mapper.get_current_stage() == "starting" |
|
|
| mapper.map_progress("crawling", 50) |
| assert mapper.get_current_stage() == "crawling" |
|
|
| mapper.map_progress("code_extraction", 50) |
| assert mapper.get_current_stage() == "code_extraction" |
|
|
| def test_get_current_progress(self): |
| """Test getting current progress""" |
| mapper = ProgressMapper() |
|
|
| assert mapper.get_current_progress() == 0 |
|
|
| mapper.map_progress("crawling", 50) |
| assert mapper.get_current_progress() == 4 |
|
|
| |
| mapper.map_progress("code_extraction", 50) |
| assert mapper.get_current_progress() == 62 |
|
|
| def test_get_stage_range(self): |
| """Test getting stage range""" |
| mapper = ProgressMapper() |
|
|
| assert mapper.get_stage_range("starting") == (0, 1) |
| assert mapper.get_stage_range("code_extraction") == (30, 95) |
| assert mapper.get_stage_range("unknown") == (0, 100) |
|
|
| def test_realistic_crawl_sequence(self): |
| """Test a realistic crawl progress sequence""" |
| mapper = ProgressMapper() |
|
|
| |
| assert mapper.map_progress("starting", 0) == 0 |
| assert mapper.map_progress("starting", 100) == 1 |
|
|
| |
| assert mapper.map_progress("analyzing", 0) == 1 |
| assert mapper.map_progress("analyzing", 100) == 2 |
|
|
| |
| assert mapper.map_progress("crawling", 0) == 2 |
| assert mapper.map_progress("crawling", 33) == 3 |
| assert mapper.map_progress("crawling", 66) == 4 |
| assert mapper.map_progress("crawling", 100) == 5 |
|
|
| |
| assert mapper.map_progress("processing", 0) == 5 |
| assert mapper.map_progress("processing", 100) == 8 |
|
|
| |
| assert mapper.map_progress("source_creation", 0) == 8 |
| assert mapper.map_progress("source_creation", 100) == 10 |
|
|
| |
| assert mapper.map_progress("document_storage", 0) == 10 |
| assert mapper.map_progress("document_storage", 50) == 20 |
| assert mapper.map_progress("document_storage", 100) == 30 |
|
|
| |
| assert mapper.map_progress("code_extraction", 0) == 30 |
| assert mapper.map_progress("code_extraction", 25) == 46 |
| assert mapper.map_progress("code_extraction", 50) == 62 |
| assert mapper.map_progress("code_extraction", 75) == 79 |
| assert mapper.map_progress("code_extraction", 100) == 95 |
|
|
| |
| assert mapper.map_progress("finalization", 0) == 95 |
| assert mapper.map_progress("finalization", 100) == 100 |
|
|
| |
| assert mapper.map_progress("completed", 0) == 100 |
|
|