Files
computer/.github/scripts/tests
r33drichards 590c4a8753 Add pyproject.toml version verification script and tests (#462)
* Add pyproject.toml version verification script and tests

Adds get_pyproject_version.py script to verify that pyproject.toml
versions match expected versions during git tag releases. Includes
comprehensive pytest test suite with best practices.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Revert "Add pyproject.toml version verification script and tests"

This reverts commit 1d40e692cc.

* Add pyproject.toml version verification script and tests

Adds get_pyproject_version.py script to verify that pyproject.toml
versions match expected versions during git tag releases. Includes
comprehensive pytest test suite with best practices.

Updates the GitHub Actions workflow to use the verification script,
ensuring version consistency before publishing packages. Also removes
the old version-setting step as pyproject.toml is now the source of
truth for versions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* f

* add test for validation script to gha

---------

Co-authored-by: Your Name <you@example.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-10-10 14:43:07 -07:00
..

Tests for .github/scripts

This directory contains comprehensive tests for the GitHub workflow scripts using Python's built-in testing framework.

Requirements

No external dependencies required!

This test suite uses:

  • unittest - Python's built-in testing framework
  • tomllib - Python 3.11+ built-in TOML parser

For Python < 3.11, the toml package is used as a fallback.

Running Tests

Run all tests

cd .github/scripts/tests
python3 -m unittest discover -v

Run a specific test file

python3 -m unittest test_get_pyproject_version -v

Run a specific test class

python3 -m unittest test_get_pyproject_version.TestGetPyprojectVersion -v

Run a specific test method

python3 -m unittest test_get_pyproject_version.TestGetPyprojectVersion.test_matching_versions -v

Run tests directly from the test file

python3 test_get_pyproject_version.py

Test Structure

test_get_pyproject_version.py

Comprehensive tests for get_pyproject_version.py covering:

  • Version matching: Tests successful version validation
  • Version mismatch: Tests error handling when versions don't match
  • Missing version: Tests handling of pyproject.toml without version field
  • Missing project section: Tests handling of pyproject.toml without project section
  • File not found: Tests handling of non-existent files
  • Malformed TOML: Tests handling of invalid TOML syntax
  • Argument validation: Tests proper argument count validation
  • Semantic versioning: Tests various semantic version formats
  • Pre-release tags: Tests versions with alpha, beta, rc tags
  • Build metadata: Tests versions with build metadata
  • Edge cases: Tests empty versions and other edge cases

Total Tests: 17+ test cases covering all functionality

Best Practices Implemented

  1. Fixture Management: Uses setUp() and tearDown() for clean test isolation
  2. Helper Methods: Provides reusable helpers for creating test fixtures
  3. Temporary Files: Uses tempfile for file creation with proper cleanup
  4. Comprehensive Coverage: Tests happy paths, error conditions, and edge cases
  5. Clear Documentation: Each test has a descriptive docstring
  6. Output Capture: Uses unittest.mock.patch and StringIO to test stdout/stderr
  7. Exit Code Validation: Properly tests script exit codes with assertRaises(SystemExit)
  8. Type Hints: Uses type hints in helper methods for clarity
  9. PEP 8 Compliance: Follows Python style guidelines
  10. Zero External Dependencies: Uses only Python standard library

Continuous Integration

These tests can be integrated into GitHub Actions workflows with no additional dependencies:

- name: Run .github scripts tests
  run: |
    cd .github/scripts/tests
    python3 -m unittest discover -v

Test Output Example

test_empty_version_string (test_get_pyproject_version.TestGetPyprojectVersion)
Test handling of empty version string. ... ok
test_file_not_found (test_get_pyproject_version.TestGetPyprojectVersion)
Test handling of non-existent pyproject.toml file. ... ok
test_malformed_toml (test_get_pyproject_version.TestGetPyprojectVersion)
Test handling of malformed TOML file. ... ok
test_matching_versions (test_get_pyproject_version.TestGetPyprojectVersion)
Test that matching versions result in success. ... ok
test_missing_project_section (test_get_pyproject_version.TestGetPyprojectVersion)
Test handling of pyproject.toml without a project section. ... ok
test_missing_version_field (test_get_pyproject_version.TestGetPyprojectVersion)
Test handling of pyproject.toml without a version field. ... ok
test_no_arguments (test_get_pyproject_version.TestGetPyprojectVersion)
Test that providing no arguments results in usage error. ... ok
test_semantic_version_0_0_1 (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version 0.0.1. ... ok
test_semantic_version_1_0_0 (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version 1.0.0. ... ok
test_semantic_version_10_20_30 (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version 10.20.30. ... ok
test_semantic_version_alpha (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version with alpha tag. ... ok
test_semantic_version_beta (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version with beta tag. ... ok
test_semantic_version_rc_with_build (test_get_pyproject_version.TestGetPyprojectVersion)
Test semantic version with rc and build metadata. ... ok
test_too_few_arguments (test_get_pyproject_version.TestGetPyprojectVersion)
Test that providing too few arguments results in usage error. ... ok
test_too_many_arguments (test_get_pyproject_version.TestGetPyprojectVersion)
Test that providing too many arguments results in usage error. ... ok
test_version_mismatch (test_get_pyproject_version.TestGetPyprojectVersion)
Test that mismatched versions result in failure with appropriate error message. ... ok
test_version_with_build_metadata (test_get_pyproject_version.TestGetPyprojectVersion)
Test matching versions with build metadata. ... ok
test_version_with_prerelease_tags (test_get_pyproject_version.TestGetPyprojectVersion)
Test matching versions with pre-release tags like alpha, beta, rc. ... ok

----------------------------------------------------------------------
Ran 18 tests in 0.XXXs

OK