# Unittest xUnit reports

This module generate unittest reports using unittest-xml-reporting tool.

Table of contents

- Installation
- Usage
  - Run the native Odoo tests
    - Gitlab CI usage example
    - Github Actions usage example
- Bug Tracker
- Credits
  - Authors
  - Other credits
  - Maintainers

# Installation

Install python library https://pypi.org/project/unittest-xml-reporting/

The module is automatically installed on the Odoo instance.

# Usage

## Run the native Odoo tests

Run the native Odoo tests. See the Odoo documentation for more information.

### Gitlab CI usage example

Add the following job to your `.gitlab-ci.yml` file:

    stages:
      - test

    variables:
      POSTGRES_DB: odoo
      POSTGRES_USER: odoo
      POSTGRES_PASSWORD: odoo
      POSTGRES_HOST_AUTH_METHOD: trust

    test:
      stage: test
      image:
        name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
      services:
        - name: postgres:15
      tags:
        - gitlab-org-docker
      script:
        # install odoo and run tests
        - oca_install_addons && oca_init_test_database && oca_run_tests
        # generate coverage report
        - coverage html -d htmlcov && coverage xml -o coverage.xml
        # read line-rate from coverage.xml and print it as percentage
        - total=$(grep -oP '<coverage[^>]*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%"
      coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
      artifacts:
        paths:
          - htmlcov/*
        when: always
        reports:
          junit: test_results/*.xml
          coverage_report:
              coverage_format: cobertura
              path: coverage.xml

### Github Actions usage example

Add the following job to your `.github/workflows/main.yml` file:

    name: tests

    permissions:
        contents: read
        checks: write
        id-token: write

    on:
      push:
        branches: ["main"]
        tags: ["*"]
      pull_request:

    jobs:
      test:
        runs-on: ubuntu-22.04
        container: ${{ matrix.container }}
        name: ${{ matrix.name }}
        strategy:
          fail-fast: false
          matrix:
            include:
              - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
                name: test with Odoo
        services:
          postgres:
            image: postgres:12.0
            env:
              POSTGRES_USER: odoo
              POSTGRES_PASSWORD: odoo
              POSTGRES_DB: odoo
            ports:
              - 5432:5432
        steps:
          - uses: actions/checkout@v3
            with:
              persist-credentials: false
          - name: Install addons and dependencies
            run: oca_install_addons
          - name: Check licenses
            run: manifestoo -d . check-licenses
          - name: Check development status
            run: manifestoo -d . check-dev-status --default-dev-status=Beta
          - name: Initialize test db
            run: oca_init_test_database
          - name: Run tests
            run: oca_run_tests
          - uses: codecov/codecov-action@v4
            with:
              token: ${{ secrets.CODECOV_TOKEN }}
          - name: Publish Test Report
            uses: mikepenz/action-junit-report@v4
            if: success() || failure() # always run even if the previous step fails
            with:
              report_paths: 'test_results/*.xml'

# Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.

Do not contact contributors directly about support or help with technical issues.

# Credits

## Authors

- Smile

## Other credits

- Smile:
  - Martin Deconinck martin.deconinck@smile.fr
- Akretion:
  - Florian Mounier florian.mounier@akretion.com

## Maintainers

This module is maintained by the OCA.

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

This module is part of the OCA/server-tools project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.