test: Add comprehensive test suite with fixtures
Establishes testing infrastructure for reliable development. tests/fixtures/ - GitLab API response samples: - gitlab_issue.json: Single issue with full metadata - gitlab_issues_page.json: Paginated issue list response - gitlab_discussion.json: Discussion thread with notes - gitlab_discussions_page.json: Paginated discussions response All fixtures captured from real GitLab API responses with sensitive data redacted, ensuring tests match actual behavior. tests/gitlab_types_tests.rs - Type deserialization tests: - Validates serde parsing of all GitLab API types - Tests edge cases: null fields, empty arrays, nested objects - Ensures GitLabIssue, GitLabDiscussion, GitLabNote parse correctly - Verifies optional fields handle missing data gracefully - Tests author/assignee extraction from various formats tests/fixture_tests.rs - Integration with fixtures: - Loads fixture files and validates parsing - Tests transformer functions produce correct database rows - Verifies IssueWithMetadata extracts labels and assignees - Tests NormalizedDiscussion/NormalizedNote structure - Validates raw payload preservation logic tests/migration_tests.rs - Database schema tests: - Creates in-memory SQLite for isolation - Runs all migrations and verifies schema - Tests table creation with expected columns - Validates foreign key constraints - Tests index creation for query performance - Verifies idempotent migration behavior Test infrastructure uses: - tempfile for isolated database instances - wiremock for HTTP mocking (available for future API tests) - Standard Rust #[test] attributes Run with: cargo test Run single: cargo test test_name Run with output: cargo test -- --nocapture Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
34
tests/fixtures/gitlab_issue.json
vendored
Normal file
34
tests/fixtures/gitlab_issue.json
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"id": 12345,
|
||||
"iid": 42,
|
||||
"project_id": 100,
|
||||
"title": "Test issue title",
|
||||
"description": "Test issue description with some details about the bug.",
|
||||
"state": "opened",
|
||||
"created_at": "2024-01-15T10:00:00.000Z",
|
||||
"updated_at": "2024-01-20T15:30:00.000Z",
|
||||
"closed_at": null,
|
||||
"author": {
|
||||
"id": 1,
|
||||
"username": "testuser",
|
||||
"name": "Test User"
|
||||
},
|
||||
"assignees": [
|
||||
{
|
||||
"id": 2,
|
||||
"username": "assignee1",
|
||||
"name": "Assignee One"
|
||||
}
|
||||
],
|
||||
"labels": ["bug", "priority::high"],
|
||||
"milestone": {
|
||||
"id": 500,
|
||||
"iid": 5,
|
||||
"project_id": 100,
|
||||
"title": "v1.0",
|
||||
"state": "active",
|
||||
"due_date": "2024-02-01"
|
||||
},
|
||||
"due_date": "2024-01-31",
|
||||
"web_url": "https://gitlab.example.com/group/project/-/issues/42"
|
||||
}
|
||||
Reference in New Issue
Block a user