from app.crud.storage_release_review import ( aggregate_review_conclusion, conclusion_blank, matches_dual_review_phase, normalize_review_side, review_side_required_menu, should_copy_legacy_to_qc, storage_transition, ) def test_conclusion_blank(): assert conclusion_blank(None) is True assert conclusion_blank("") is True assert conclusion_blank(" ") is True assert conclusion_blank("tg") is False assert conclusion_blank("btg") is False def test_aggregate_both_tg(): assert aggregate_review_conclusion("tg", "tg") == "tg" def test_aggregate_any_btg(): assert aggregate_review_conclusion("btg", "tg") == "btg" assert aggregate_review_conclusion("tg", "btg") == "btg" assert aggregate_review_conclusion("btg", None) == "btg" assert aggregate_review_conclusion("", "btg") == "btg" def test_aggregate_pending_when_not_aligned(): assert aggregate_review_conclusion("tg", None) is None assert aggregate_review_conclusion(None, "tg") is None assert aggregate_review_conclusion(None, None) is None assert aggregate_review_conclusion("", "") is None def test_storage_transition_store_when_both_tg_and_pending(): assert storage_transition("tg", "tg", "drk") == "store" def test_storage_transition_unstore_when_btg_and_stored(): assert storage_transition("btg", "tg", "yrk") == "unstore" assert storage_transition("tg", "btg", "yrk") == "unstore" def test_storage_transition_noop_otherwise(): assert storage_transition("tg", "tg", "yrk") == "noop" assert storage_transition("tg", None, "drk") == "noop" assert storage_transition("btg", "tg", "drk") == "noop" assert storage_transition(None, None, "yrk") == "noop" def test_matches_dual_review_phase_production(): assert matches_dual_review_phase("production", "pending", None, "tg") is True assert matches_dual_review_phase("production", "pending", "tg", "tg") is False assert matches_dual_review_phase("production", "reviewed", "btg", None) is True assert matches_dual_review_phase("production", "reviewed", None, "tg") is False def test_matches_dual_review_phase_qc(): assert matches_dual_review_phase("qc", "pending", "tg", None) is True assert matches_dual_review_phase("qc", "reviewed", "tg", "tg") is True assert matches_dual_review_phase("qc", "reviewed", "tg", None) is False def test_matches_dual_review_phase_overview(): assert matches_dual_review_phase("overview", "pending", None, "tg") is True assert matches_dual_review_phase("overview", "pending", "tg", "tg") is False assert matches_dual_review_phase("overview", "reviewed", "tg", "btg") is True assert matches_dual_review_phase("overview", "reviewed", "tg", None) is False def test_should_copy_legacy_to_qc(): assert should_copy_legacy_to_qc(None, "tg") is True assert should_copy_legacy_to_qc("", "btg") is True assert should_copy_legacy_to_qc("tg", "tg") is False assert should_copy_legacy_to_qc(None, None) is False assert should_copy_legacy_to_qc(None, "") is False def test_normalize_review_side(): assert normalize_review_side("production") == "production" assert normalize_review_side(" QC ") == "qc" assert normalize_review_side("overview") == "overview" assert normalize_review_side("all") is None assert normalize_review_side(None) is None def test_review_side_required_menu(): assert review_side_required_menu("production") == "production:storageReleaseReview:list" assert review_side_required_menu("qc") == "quality:storageReleaseReview:list" assert review_side_required_menu("overview") is None