From a07186748d669aa8be08b9c9181ce23ba2cae48e Mon Sep 17 00:00:00 2001 From: Martin Grosche <57788304+MartinGroscheTT@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:24:40 +0100 Subject: [PATCH] Apply rebranding (#1) (#2) --- .dockerignore | 2 +- .github/ISSUE_TEMPLATE/1-feature-request.yml | 4 +- .github/ISSUE_TEMPLATE/2-bug-report.yml | 6 +-- .github/ISSUE_TEMPLATE/config.yml | 4 +- .github/automation_scripts/scripts.py | 2 +- .github/labels.yml | 4 +- .github/release-drafter.yml | 2 +- .../workflows/auto-merge-actions-updates.yml | 2 +- .github/workflows/close-fork-prs.yml | 2 +- .github/workflows/dependency-check.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/md-link-checker.yml | 2 +- .github/workflows/release-drafter.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/reuse.yml | 2 +- .github/workflows/sync-labels.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/update-gh-pages.yml | 2 +- .reuse/dep5 | 6 +-- LICENSE | 2 +- LICENSES/MIT.txt | 2 +- README.md | 44 ++++++------------ config/license/allowlist.json | 4 +- config/license/check_dependencies.py | 2 +- conftest.py | 2 +- default.pylintrc | 2 +- docs/images/Logo_TEST-GUIDE_rgb_SCREEN.png | Bin 11208 -> 26511 bytes docs/images/platform_logo.png | Bin 17098 -> 0 bytes docs/source/conf.py | 6 +-- docs/source/index.rst | 6 +-- example_TestSuite.py | 2 +- pyproject.toml | 6 +-- testguide_report_generator/ReportGenerator.py | 6 +-- testguide_report_generator/__init__.py | 2 +- testguide_report_generator/model/TestCase.py | 6 +-- .../model/TestCaseFolder.py | 6 +-- testguide_report_generator/model/TestSuite.py | 4 +- testguide_report_generator/model/__init__.py | 2 +- testguide_report_generator/util/File.py | 2 +- .../util/Json2AtxRepr.py | 2 +- .../util/JsonValidator.py | 2 +- .../util/ValidityChecks.py | 2 +- testguide_report_generator/util/__init__.py | 2 +- tests/e2e/Dockerfile | 2 +- tests/e2e/Jenkinsfile | 4 +- tests/e2e/e2e_testsuite.py | 2 +- tests/e2e/test_e2e.py | 8 ++-- tests/model/test_TestCase.py | 2 +- tests/model/test_TestCaseFolder.py | 2 +- tests/model/test_TestSuite.py | 2 +- tests/test_ReportGenerator.py | 2 +- tests/util/test_File.py | 2 +- tests/util/test_JsonValidator.py | 2 +- tests/util/test_ValidityChecks.py | 2 +- 54 files changed, 91 insertions(+), 105 deletions(-) delete mode 100644 docs/images/platform_logo.png diff --git a/.dockerignore b/.dockerignore index f24959d..482d544 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 TraceTronic GmbH +# Copyright (c) 2022-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/ISSUE_TEMPLATE/1-feature-request.yml b/.github/ISSUE_TEMPLATE/1-feature-request.yml index 0bbd83a..fee4a2d 100644 --- a/.github/ISSUE_TEMPLATE/1-feature-request.yml +++ b/.github/ISSUE_TEMPLATE/1-feature-request.yml @@ -1,9 +1,9 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT name: '💡 Feature Request' -description: 'Feature request template for TEST-GUIDE Json Generator development' +description: 'Feature request template for test.guide Json Generator development' labels: ['feature'] body: diff --git a/.github/ISSUE_TEMPLATE/2-bug-report.yml b/.github/ISSUE_TEMPLATE/2-bug-report.yml index 81ebcf3..4c0799d 100644 --- a/.github/ISSUE_TEMPLATE/2-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/2-bug-report.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -46,5 +46,5 @@ body: attributes: value: | **Never report security issues on GitHub or other public channels (Gitter/Twitter/etc.).** - Instead, use our [TraceTronic Support Center](https://support.tracetronic.com). For reporting issues - containing NDA relevant information please also use our [TraceTronic Support Center](https://support.tracetronic.com). + Instead, use our [tracetronic Support Center](https://support.tracetronic.com). For reporting issues + containing NDA relevant information please also use our [tracetronic Support Center](https://support.tracetronic.com). diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3490192..909b0a0 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,9 +1,9 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT blank_issues_enabled: false contact_links: - - name: TraceTronic Support Center + - name: tracetronic Support Center url: https://support.tracetronic.com about: Please report security vulnerabilities and non-public issues (i.e. NDA relevant information) here. diff --git a/.github/automation_scripts/scripts.py b/.github/automation_scripts/scripts.py index 62857cf..270e30e 100644 --- a/.github/automation_scripts/scripts.py +++ b/.github/automation_scripts/scripts.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/labels.yml b/.github/labels.yml index c4df651..1c3dc40 100644 --- a/.github/labels.yml +++ b/.github/labels.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -30,7 +30,7 @@ description: Security related issue color: 7f0e6f - name: test-guide - description: TEST-GUIDE related issue + description: test.guide related issue color: 208ca3 - name: test description: Testing diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index aae0618..407f42c 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/auto-merge-actions-updates.yml b/.github/workflows/auto-merge-actions-updates.yml index 8be0d2e..83b328c 100644 --- a/.github/workflows/auto-merge-actions-updates.yml +++ b/.github/workflows/auto-merge-actions-updates.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/close-fork-prs.yml b/.github/workflows/close-fork-prs.yml index 3838ac2..2cee875 100644 --- a/.github/workflows/close-fork-prs.yml +++ b/.github/workflows/close-fork-prs.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 16f74e5..a9861aa 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d41e95e..db86cb3 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/md-link-checker.yml b/.github/workflows/md-link-checker.yml index 55e23cd..67bbb45 100644 --- a/.github/workflows/md-link-checker.yml +++ b/.github/workflows/md-link-checker.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index b5eb823..df7146c 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7f1e3fb..c8635be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/reuse.yml b/.github/workflows/reuse.yml index e64fbc2..d5250c1 100644 --- a/.github/workflows/reuse.yml +++ b/.github/workflows/reuse.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/sync-labels.yml b/.github/workflows/sync-labels.yml index 3c250ab..309480b 100644 --- a/.github/workflows/sync-labels.yml +++ b/.github/workflows/sync-labels.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2c1c5a7..ac15f91 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.github/workflows/update-gh-pages.yml b/.github/workflows/update-gh-pages.yml index 51924b2..363e118 100644 --- a/.github/workflows/update-gh-pages.yml +++ b/.github/workflows/update-gh-pages.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/.reuse/dep5 b/.reuse/dep5 index 3bd54fd..d5f09b3 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -1,8 +1,8 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: TraceTronic TEST-GUIDE JSON Generator for Python -Upstream-Contact: TraceTronic GmbH +Upstream-Name: tracetronic test.guide JSON Generator for Python +Upstream-Contact: tracetronic GmbH Source: https://github.com/tracetronic/testguide_report-generator Files: **/*.json Pipfile* .gitignore **/artifact* **/*.png -Copyright: 2023 TraceTronic GmbH +Copyright: 2023-2024 tracetronic GmbH License: MIT diff --git a/LICENSE b/LICENSE index 4b00039..f6e8988 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022-2023 TraceTronic GmbH +Copyright (c) 2022-2024 tracetronic GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt index 697ecda..44ce45a 100644 --- a/LICENSES/MIT.txt +++ b/LICENSES/MIT.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 TraceTronic GmbH +Copyright (c) 2023-2024 tracetronic GmbH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index 6a5af45..2f0f8dc 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,36 @@ -# TEST-GUIDE Report Generator +# test.guide Report Generator - -[![Testing](https://github.com/tracetronic/testguide_json_generator_python/actions/workflows/test.yml/badge.svg)](https://github.com/tracetronic/testguide_json_generator_python/actions/workflows/test.yml) [![Releases](https://img.shields.io/badge/Releases-Changelog-blue)](https://github.com/tracetronic/testguide_json_generator_python/releases) [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/tracetronic/testguide_json_generator_python/blob/main/LICENSE) - +[![Test](https://github.com/tracetronic/testguide_report-generator/actions/workflows/test.yml/badge.svg)](https://github.com/tracetronic/testguide_report-generator/actions/workflows/test.yml) [![Releases](https://img.shields.io/badge/Releases-Changelog-blue)](https://github.com/tracetronic/testguide_report-generator/releases) [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/tracetronic/testguide_report-generator/blob/main/LICENSE) As a modern automotive test engineer, reliance on automated solutions for the execution, reporting and evaluation of my test suites is essential. The complexity of the systems under test, and thus the amount of necessary tests is ever growing tremendously. One of the tools which can help -with these tasks is [TraceTronic TEST-GUIDE](https://www.tracetronic.com/products/test-guide/). As a user of TEST-GUIDE, it is desirable to have +with these tasks is [tracetronic test.guide](https://www.tracetronic.com/products/test-guide/). As a user of test.guide, it is desirable to have a means to customize and structure my test reports in a simple manner. -This generator acts as a helper to create a [TEST-GUIDE](https://www.tracetronic.com/products/test-guide/) compatible +This generator acts as a helper to create a [test.guide](https://www.tracetronic.com/products/test-guide/) compatible test report. Specific Python classes reflecting the different elements of a test report (*TestSuite*, *TestCase* and so on) were designed in such a way that you can create your own testsuite from these objects. This facilitates the conversion from arbitrary test report -formats into a *.json* which TEST-GUIDE can handle. With this generator, it is no more necessary to convert non-ATX formats directly -into a *.json* for TEST-GUIDE. Instead, the delivered Python classes are prefilled in a simple manner, and the *.json* is +formats into a *.json* which test.guide can handle. With this generator, it is no more necessary to convert non-ATX formats directly +into a *.json* for test.guide. Instead, the delivered Python classes are prefilled in a simple manner, and the *.json* is generated for you. On top of this, early format checks are conducted such that you will be notified right away if something is not compliant to the *json* schema. - -TEST-GUIDE - +test.guide -TEST-GUIDE is a database application for the overview, analysis and follow-up processing of test procedures, which has been specially +test.guide is a database application for the overview, analysis and follow-up processing of test procedures, which has been specially developed for use in the automotive sector. It significantly facilitates the management of test resources. At the same time, it encourages cross-role cooperation, thereby closing the gap between test execution and test management.
- -Automotive DevOps Platform - - -
- -**TraceTronic TEST-GUIDE Report Generator** project is part of -the [Automotive DevOps Platform](https://www.tracetronic.com/products/automotive-devops-platform/) by TraceTronic. With +**tracetronic test.guide Report Generator** project is part of +the [Automotive DevOps Platform](https://www.tracetronic.com/products/automotive-devops-platform/) by tracetronic. With the **Automotive DevOps Platform**, we go from the big picture to the details and unite all phases of vehicle software testing – from planning the test scopes to summarizing the test results. At the same time, continuous monitoring across all test phases always provides an overview of all activities – even with several thousand test executions per day and @@ -71,9 +61,7 @@ or by adding the _testguide-report-generator_ to your dependency management file ## Getting Started - -The commands which are necessary to generate [TEST-GUIDE](https://www.tracetronic.com/products/test-guide/) reports are collected exemplarily in the [*example_TestSuite.py*](/example_TestSuite.py). Run the example script to generate *json* and *zip* file: - +The commands which are necessary to generate [test.guide](https://www.tracetronic.com/products/test-guide/) reports are collected exemplarily in the [*example_TestSuite.py*](example_TestSuite.py). Run the example script to generate *json* and *zip* file: ```bash python example_TestSuite.py @@ -85,7 +73,7 @@ python example_TestSuite.py The elements follow the hierarchy `TestSuite --> TestCaseFolder --> TestCase --> TestStepFolder --> TestStep`. So, instances of *TestCase(Folder)* are added to *TestSuite*, and instances of *TestStep(Folder)* are added to *TestCase*. At least one *TestCase* or *TestStep* has to be added to the respective folder (see [Restrictions](#restrictions)). -In the end, the report generator will take the assembled *TestSuite* and generate the report. The generator output is a *.json* report and a *.zip* file containing the generated test report along with possible testcase artifacts. The *.zip* file can be uploaded to TEST-GUIDE via the appropriate option in TEST-GUIDE. The schema of the *.json* which [TEST-GUIDE](https://www.tracetronic.com/products/test-guide/) expects can be found [here](testguide_report_generator/schema/schema.json). +In the end, the report generator will take the assembled *TestSuite* and generate the report. The generator output is a *.json* report and a *.zip* file containing the generated test report along with possible testcase artifacts. The *.zip* file can be uploaded to test.guide via the appropriate option in test.guide. The schema of the *.json* which [test.guide](https://www.tracetronic.com/products/test-guide/) expects can be found [here](testguide_report_generator/schema/schema.json). A small example may look like this: @@ -119,9 +107,7 @@ if __name__ == "__main__": create_testsuite() ``` - -A more extensive example is given in [example_TestSuite.py](/example_TestSuite.py). - +A more extensive example is given in [example_TestSuite.py](example_TestSuite.py). ### Available classes and their purpose @@ -161,7 +147,7 @@ A complete specification can be found in the [schema](testguide_report_generator ## Contribution At the moment, no external contributions are intended and merge requests from forks will automatically be **rejected**! However, -we do encourage you to file bugs and request features via the [issue tracker](https://github.com/tracetronic/testguide_json_generator_python/issues). +we do encourage you to file bugs and request features via the [issue tracker](https://github.com/tracetronic/testguide_report-generator/issues). ## Documentation diff --git a/config/license/allowlist.json b/config/license/allowlist.json index a16b9d1..a8c3910 100644 --- a/config/license/allowlist.json +++ b/config/license/allowlist.json @@ -2,9 +2,9 @@ "allowedLicenses": [ { "moduleLicense": "MIT", - "moduleVersion": "23.1.0", + "moduleVersion": "23.2.0", "moduleName": "attrs", - "licenseUrl": "https://github.com/python-attrs/attrs/blob/23.1.0/LICENSE", + "licenseUrl": "https://github.com/python-attrs/attrs/blob/23.2.0/LICENSE", "moduleCopyright": "Copyright (c) 2015 Hynek Schlawack and the attrs contributors", "actualLicense": "MIT", "violationAllowance": "" diff --git a/config/license/check_dependencies.py b/config/license/check_dependencies.py index 9a1f29f..672a943 100644 --- a/config/license/check_dependencies.py +++ b/config/license/check_dependencies.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/conftest.py b/conftest.py index 1b312c6..86e0363 100644 --- a/conftest.py +++ b/conftest.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/default.pylintrc b/default.pylintrc index cafffca..aedab53 100644 --- a/default.pylintrc +++ b/default.pylintrc @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 TraceTronic GmbH +# Copyright (c) 2022-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/docs/images/Logo_TEST-GUIDE_rgb_SCREEN.png b/docs/images/Logo_TEST-GUIDE_rgb_SCREEN.png index ff1a85dfefb213fad79ef975b86e271b86a4d2d5..ff544c94e631f3abb64136355f467af1b01afe5d 100644 GIT binary patch literal 26511 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 HUHE?h7cDC2 literal 11208 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 diff --git a/docs/source/conf.py b/docs/source/conf.py index 741b1b3..44ce495 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -15,8 +15,8 @@ sys.path.insert(0, os.path.abspath("../..")) project = 'testguide_report_generator' -copyright = '2023 TraceTronic GmbH' -author = 'TraceTronic GmbH' +copyright = '2023-2024 tracetronic GmbH' +author = 'tracetronic GmbH' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/docs/source/index.rst b/docs/source/index.rst index 1dff4c2..ad0f753 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,5 +1,5 @@ .. - Copyright (c) 2022 TraceTronic GmbH + Copyright (c) 2022-2024 tracetronic GmbH SPDX-License-Identifier: MIT @@ -8,8 +8,8 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to TEST-GUIDE JSON Generator documentation -================================================== +Welcome to test.guide Report Generator documentation +==================================================== .. toctree:: :maxdepth: 2 diff --git a/example_TestSuite.py b/example_TestSuite.py index c9dc1de..8e65ccf 100644 --- a/example_TestSuite.py +++ b/example_TestSuite.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/pyproject.toml b/pyproject.toml index 90b6283..295ad33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 TraceTronic GmbH +# Copyright (c) 2022-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -9,8 +9,8 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "testguide_report-generator" version = "1.1-beta" -description = "This generator acts as a helper to create a TEST-GUIDE compatible test report." -authors = [ "TraceTronic GmbH",] +description = "This generator acts as a helper to create a test.guide compatible test report." +authors = [ "tracetronic GmbH",] readme = "README.md" [tool.poetry.dependencies] diff --git a/testguide_report_generator/ReportGenerator.py b/testguide_report_generator/ReportGenerator.py index eed3ce1..c2c3be7 100644 --- a/testguide_report_generator/ReportGenerator.py +++ b/testguide_report_generator/ReportGenerator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -22,9 +22,9 @@ class Generator: """ This class is responsible for the creation of the `.zip` file containing the test report and - possible artifacts, which can be uploaded to TEST-GUIDE. An object of type + possible artifacts, which can be uploaded to test.guide. An object of type :class:`TestSuite` is necessary, containing the - information about all testcases in a format compliant with the `TEST-GUIDE schema.json`. It + information about all testcases in a format compliant with the `test.guide schema.json`. It is possible that the `.json` generated from the TestSuite object is not compliant with the schema, for instance, if the suite does not contain any testcases. For further information, please conduct the README. diff --git a/testguide_report_generator/__init__.py b/testguide_report_generator/__init__.py index f865d4f..f7e1150 100644 --- a/testguide_report_generator/__init__.py +++ b/testguide_report_generator/__init__.py @@ -1,3 +1,3 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/model/TestCase.py b/testguide_report_generator/model/TestCase.py index 9359fae..7081b37 100644 --- a/testguide_report_generator/model/TestCase.py +++ b/testguide_report_generator/model/TestCase.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -363,7 +363,7 @@ def create_json_repr(self): class TestStepFolder(Json2AtxRepr): """ - ATX-TestStepFolder. Each teststep folder must contain at least one TestStep to be TEST-GUIDE + ATX-TestStepFolder. Each teststep folder must contain at least one TestStep to be test.guide compliant. """ @@ -431,7 +431,7 @@ def create_json_repr(self): class TestCase(Json2AtxRepr): """ ATX-TestCase to be added to a :class:`TestSuite`. Each - TestSuite must contain at least one testcase to be TEST-GUIDE compliant (or, alternatively, + TestSuite must contain at least one testcase to be test.guide compliant (or, alternatively, at least one :class:`TestCaseFolder`). """ diff --git a/testguide_report_generator/model/TestCaseFolder.py b/testguide_report_generator/model/TestCaseFolder.py index 8e10598..9dcfce0 100644 --- a/testguide_report_generator/model/TestCaseFolder.py +++ b/testguide_report_generator/model/TestCaseFolder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -17,9 +17,9 @@ class TestCaseFolder(Json2AtxRepr): """ ATX-TestCaseFolder to be added to a :class:`TestSuite`. - Each TestSuite must contain at least one TestCase or TestCaseFolder to be TEST-GUIDE + Each TestSuite must contain at least one TestCase or TestCaseFolder to be test.guide compliant. Each TestCaseFolder must contain at least one - :class:`TestCase` to be TEST-GUIDE compliant. + :class:`TestCase` to be test.guide compliant. """ __test__ = False # pytest ignore diff --git a/testguide_report_generator/model/TestSuite.py b/testguide_report_generator/model/TestSuite.py index b03f509..7088121 100644 --- a/testguide_report_generator/model/TestSuite.py +++ b/testguide_report_generator/model/TestSuite.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -20,7 +20,7 @@ class TestSuite(Json2AtxRepr): """ ATX-TestSuite. This is the top-level element from which the `.json` report will be generated. A testsuite must contain at least one :class:`TestCase` or - :class:`TestCaseFolder` to be TEST-GUIDE compliant + :class:`TestCaseFolder` to be test.guide compliant """ __test__ = False # pytest ignore diff --git a/testguide_report_generator/model/__init__.py b/testguide_report_generator/model/__init__.py index f865d4f..f7e1150 100644 --- a/testguide_report_generator/model/__init__.py +++ b/testguide_report_generator/model/__init__.py @@ -1,3 +1,3 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/util/File.py b/testguide_report_generator/util/File.py index 1a0c50b..13be522 100644 --- a/testguide_report_generator/util/File.py +++ b/testguide_report_generator/util/File.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/util/Json2AtxRepr.py b/testguide_report_generator/util/Json2AtxRepr.py index e6637f3..d484c91 100644 --- a/testguide_report_generator/util/Json2AtxRepr.py +++ b/testguide_report_generator/util/Json2AtxRepr.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/util/JsonValidator.py b/testguide_report_generator/util/JsonValidator.py index a4403f9..e06e0f5 100644 --- a/testguide_report_generator/util/JsonValidator.py +++ b/testguide_report_generator/util/JsonValidator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/util/ValidityChecks.py b/testguide_report_generator/util/ValidityChecks.py index 4cd9eb5..0f85fb2 100644 --- a/testguide_report_generator/util/ValidityChecks.py +++ b/testguide_report_generator/util/ValidityChecks.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/testguide_report_generator/util/__init__.py b/testguide_report_generator/util/__init__.py index f865d4f..f7e1150 100644 --- a/testguide_report_generator/util/__init__.py +++ b/testguide_report_generator/util/__init__.py @@ -1,3 +1,3 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/e2e/Dockerfile b/tests/e2e/Dockerfile index 8f0e2b4..d874ed4 100644 --- a/tests/e2e/Dockerfile +++ b/tests/e2e/Dockerfile @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 TraceTronic GmbH +# Copyright (c) 2022-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT FROM python:3.9 diff --git a/tests/e2e/Jenkinsfile b/tests/e2e/Jenkinsfile index 4adf1d4..9bed6f0 100644 --- a/tests/e2e/Jenkinsfile +++ b/tests/e2e/Jenkinsfile @@ -1,5 +1,5 @@ /* -* Copyright (c) 2022-2023 TraceTronic GmbH +* Copyright (c) 2022-2024 tracetronic GmbH * * SPDX-License-Identifier: MIT */ @@ -48,7 +48,7 @@ pipeline { } cleanup { script { - stage ('TEST-GUIDE Upload') { + stage ('test.guide Upload') { dir("${pipeline_report_dir}") { pipeline2ATX(true) } diff --git a/tests/e2e/e2e_testsuite.py b/tests/e2e/e2e_testsuite.py index 9dbb9a7..3d3d91d 100644 --- a/tests/e2e/e2e_testsuite.py +++ b/tests/e2e/e2e_testsuite.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT from datetime import datetime diff --git a/tests/e2e/test_e2e.py b/tests/e2e/test_e2e.py index 74a3e1b..30d4b4f 100644 --- a/tests/e2e/test_e2e.py +++ b/tests/e2e/test_e2e.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT @@ -15,7 +15,7 @@ @pytest.mark.skipif(os.environ.get("TEST_GUIDE_URL") is None, reason="Env variables are not set") def test_upload(value_storage: ValueStorage): """ - Uploads a test suite with all classes to TEST-GUIDE + Uploads a test suite with all classes to test.guide """ create_testsuite() assert os.path.exists("e2e.json") @@ -53,7 +53,7 @@ def test_upload(value_storage: ValueStorage): @pytest.mark.skipif(os.environ.get("TEST_GUIDE_URL") is None, reason="Env variables are not set") def test_download(value_storage: ValueStorage): """ - Test downloads data from TEST-GUIDE + Test downloads data from test.guide """ query_url = value_storage.BASE_URL + "api/report/testCaseExecutions/filter" params = {"projectId": value_storage.PROJECT_ID, "offset": 0, "limit": 100, "authKey": value_storage.AUTHKEY} @@ -77,7 +77,7 @@ def test_download(value_storage: ValueStorage): @pytest.mark.skipif(os.environ.get("TEST_GUIDE_URL") is None, reason="Env variables are not set") def test_compare(value_storage): """ - Test compares data generated with data downloaded from TEST-GUIDE + Test compares data generated with data downloaded from test.guide """ assert value_storage.remote_testcases_json is not None f = open("e2e.json") diff --git a/tests/model/test_TestCase.py b/tests/model/test_TestCase.py index c6ab840..1e3a4e3 100644 --- a/tests/model/test_TestCase.py +++ b/tests/model/test_TestCase.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/model/test_TestCaseFolder.py b/tests/model/test_TestCaseFolder.py index b2c55bc..2bdde52 100644 --- a/tests/model/test_TestCaseFolder.py +++ b/tests/model/test_TestCaseFolder.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/model/test_TestSuite.py b/tests/model/test_TestSuite.py index 080d32a..e192a66 100644 --- a/tests/model/test_TestSuite.py +++ b/tests/model/test_TestSuite.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT import pytest diff --git a/tests/test_ReportGenerator.py b/tests/test_ReportGenerator.py index bda98da..ded16cd 100644 --- a/tests/test_ReportGenerator.py +++ b/tests/test_ReportGenerator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/util/test_File.py b/tests/util/test_File.py index 9a0c57b..2773214 100644 --- a/tests/util/test_File.py +++ b/tests/util/test_File.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/util/test_JsonValidator.py b/tests/util/test_JsonValidator.py index 9f091e0..940cf02 100644 --- a/tests/util/test_JsonValidator.py +++ b/tests/util/test_JsonValidator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT diff --git a/tests/util/test_ValidityChecks.py b/tests/util/test_ValidityChecks.py index e92924d..aa29b85 100644 --- a/tests/util/test_ValidityChecks.py +++ b/tests/util/test_ValidityChecks.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 TraceTronic GmbH +# Copyright (c) 2023-2024 tracetronic GmbH # # SPDX-License-Identifier: MIT