

.pytest:
  stage: test
  image: python:3.11-alpine3.19
  needs: []
  before_script:
    - pip install -r requirements.txt
    - pip install -r requirements_test.txt
    - cd app
  artifacts:
    expire_in: "30 days"
    when: always
    reports:
      junit:
        - artifacts/*.JUnit.xml
    paths:
      - artifacts/
  rules:

    - if: # Occur on merge
        $CI_COMMIT_BRANCH
          &&
        (
          $CI_PIPELINE_SOURCE == "push"
            ||
          $CI_PIPELINE_SOURCE == "web"
        )
      when: always

    - when: never


Unit:
  extends: .pytest
  script:
    - pytest --cov --cov-report term --cov-report xml:../artifacts/coverage.xml --cov-report html:../artifacts/coverage/ --junit-xml=../artifacts/unit.JUnit.xml **/tests/unit
  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
  artifacts:
    expire_in: "30 days"
    when: always
    reports:
      coverage_report:
        coverage_format: cobertura
        path: artifacts/coverage.xml
      junit:
        - artifacts/*.JUnit.xml
    paths:
      - artifacts/
  environment: 
    name: Unit Test Coverage Report
    url: https://nofusscomputing.gitlab.io/-/projects/centurion_erp/-/jobs/${CI_JOB_ID}/artifacts/artifacts/coverage/index.html


UI:
  extends: .pytest
  script:
    - apk update
    - apk add chromium-chromedriver
    - pytest --junit-xml=../artifacts/ui.JUnit.xml **/tests/ui
  artifacts:
    expire_in: "30 days"
    when: always
    reports:
      junit:
        - artifacts/*.JUnit.xml
    paths:
      - artifacts/
  rules:
    - if: # Occur on merge
        $CI_COMMIT_BRANCH
          &&
        (
          $CI_PIPELINE_SOURCE == "push"
            ||
          $CI_PIPELINE_SOURCE == "web"
        )
      allow_failure: true
      when: always

    - when: never
