from pathlib import Path


WORKFLOW = Path(".gitea/workflows/ci.yml")


def test_ci_uses_gitea_compatible_artifact_action():
    text = WORKFLOW.read_text()
    assert "actions/upload-artifact@v4" not in text
    assert "actions/upload-artifact@v3" in text


def test_ci_installs_declared_requirements_before_tests():
    text = WORKFLOW.read_text()
    install = text.index("pip install -r requirements.txt")
    tests = text.index("python3 -m pytest tests/ -q")
    assert install < tests


def test_ci_audits_pinned_runtime_dependencies_before_tests_and_release_build():
    text = WORKFLOW.read_text()
    lint = text[text.index("  lint:") : text.index("  build-release:")]
    build = text[text.index("  build-release:") : text.index("  browser-journey:")]

    audit_install = lint.index("pip install -r requirements-audit.txt")
    audit = lint.index("python3 -m pip_audit -r requirements.txt --strict")
    tests = lint.index("python3 -m pytest tests/ -q")
    assert audit_install < audit < tests
    assert "needs: lint" in build


def test_runtime_multipart_parser_uses_advisory_fixed_release():
    requirements = Path("requirements.txt").read_text().splitlines()
    assert "python-multipart==0.0.32" in requirements


def test_release_promotion_waits_for_tests_and_bundle():
    text = WORKFLOW.read_text()
    release = text[text.index("  release-candidate:") :]

    assert "needs: [lint, build-release, browser-journey]" in release
    assert "github.event_name == 'push'" in release
    assert "actions/download-artifact@v3" in release
    assert (
        'python3 scripts/verify_release.py --input-dir dist --commit "$TARGET" --repository .'
        in release
    )
    assert release.index("sha256sum -c") < release.index("curl --fail-with-body")


def test_release_promotion_waits_for_packaged_mobile_journeys():
    text = WORKFLOW.read_text()
    browser = text[text.index("  browser-journey:") : text.index("  release-candidate:")]
    release = text[text.index("  release-candidate:") :]

    assert "needs: build-release" in browser
    assert "actions/download-artifact@v3" in browser
    assert "pip install -r requirements-e2e.txt" in browser
    assert "python3 -m playwright install --with-deps chromium" in browser
    assert 'STACKCHAIN_RUN_RELEASE_E2E: "1"' in browser
    assert (
        "python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py "
        "tests/e2e/test_mobile_search_preview_navigation.py "
        "tests/e2e/test_mobile_find_work_release.py "
        "tests/e2e/test_mobile_home_bootstrap_release.py "
        "tests/e2e/test_mobile_sign_out_release.py "
        "tests/e2e/test_mobile_today_handoff_release.py "
        "tests/e2e/test_mobile_today_wrap_up_release.py "
        "tests/e2e/test_mobile_today_summary_release.py "
        "tests/e2e/test_mobile_tomorrow_conflict_release.py "
        "tests/e2e/test_mobile_week_ahead_release.py "
        "tests/e2e/test_mobile_wrap_up_handoff_release.py -q"
    ) in browser
    assert "needs: [lint, build-release, browser-journey]" in release
