From 9186fca08a80786a370e86fea1ea846bfc46410d Mon Sep 17 00:00:00 2001 From: Justin Bollinger Date: Sun, 25 Jan 2026 15:06:08 -0500 Subject: [PATCH] Testing README --- TESTING.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 TESTING.md diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..37685a7 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,89 @@ +# Test Mocking Summary + +## Overview +All Hashview API tests have been updated to use mocked responses instead of real API calls. This allows tests to run in CI/CD environments (like GitHub Actions) without requiring connectivity to a Hashview server or actual API credentials. + +## Changes Made + +### 1. Updated Test Files + +**test_hashview.py** (consolidated test suite) +- Added `unittest.mock` imports (Mock, patch, MagicMock) +- Removed dependency on config.json file +- Replaced all real API calls with mocked responses +- Mock responses match the actual API response format (e.g., 'users' field as JSON string) +- Includes comprehensive tests for: + - Customer listing and validation + - Authentication and authorization + - Hashfile upload + - Complete job creation workflow + +### 2. Key Mock Patterns + +```python +# Example: Mocking list_customers response +mock_response = Mock() +mock_response.json.return_value = { + 'users': json.dumps([ # Note: 'users' is a JSON string in the real API + {'id': 1, 'name': 'Test Customer'} + ]) +} +mock_response.raise_for_status = Mock() +api.session.get.return_value = mock_response +``` + +### 3. GitHub Actions Workflow + +Created `.github/workflows/tests.yml` to automatically run tests on: +- Push to main/master/develop branches +- Pull requests to main/master/develop branches +- Tests run against Python 3.9, 3.10, 3.11, and 3.12 + +### 4. Documentation + +Updated readme.md with: +- Testing section explaining how to run tests locally +- Description of test structure +- Information about CI/CD integration + +## Test Results + +✅ 6 tests passing +⚡ Tests run in ~0.1 seconds (vs ~20 seconds with real API calls) + +### Test Coverage + +1. **test_list_customers_success** - Validates customer listing with multiple customers +2. **test_list_customers_returns_valid_data** - Validates customer data structure +3. **test_connection_and_auth** - Tests successful authentication +4. **test_invalid_api_key_fails** - Tests authentication failure handling +5. **test_upload_hashfile** - Tests hashfile upload functionality +6. **test_create_job_workflow** - Tests complete end-to-end job creation workflow + +## Benefits + +1. **No Dependencies**: Tests run without needing a Hashview server or API credentials +2. **Fast Execution**: Mocked tests complete in milliseconds +3. **Reliable**: Tests won't fail due to network issues or server downtime +4. **CI/CD Ready**: Can run in GitHub Actions and other CI environments +5. **Portable**: Tests work anywhere Python is installed + +## Running Tests + +```bash +# Install dependencies +pip install pytest pytest-mock requests + +# Run all tests +pytest -v + +# Run specific test +pytest test_hashview.py -v + +# Run a specific test method +pytest test_hashview.py::TestHashviewAPI::test_create_job_workflow -v +``` + +## Note on Real API Testing + +While these mocked tests validate the code logic, you may still want to occasionally run integration tests against a real Hashview instance to ensure the API hasn't changed. The test files can be easily modified to toggle between mocked and real API calls if needed.