# Test Data Documentation This document describes the shared test data used across Go integration tests and Bruno API tests. Keeping these aligned makes it easier to verify issues and cross-reference between testing frameworks. ## Test Users ### Main Admin Test User This is the primary test user used in most integration tests. ```json { "email": "testuser@example.com", "username": "testuser", "password": "Test@Pass123!", "first_name": "Test", "last_name": "User", "role": "admin" } ``` **Used in:** - Go Tests: `cmd/server/tests/test_helpers.go` (getTestUserID, loginTestUser) - Bruno: `user/auth/Login User.yml`, `user/auth/Register User.yml` **Notes:** - Automatically created if doesn't exist - Deleted and recreated in tests to ensure fresh state - Used for authentication in most test scenarios ### Max Devices Test User Used specifically for testing device limit functionality. ```json { "email": "maxdevices@example.com", "username": "maxdevicesuser", "password": "Test@Pass123!", "first_name": "Test", "last_name": "User" } ``` **Used in:** - Go Tests: `cmd/server/tests/device_cap_test.go` (createTestUserForMaxDevices) ### Secondary Admin Test User Used for testing admin creation restrictions and multi-admin scenarios. ```json { "email": "admin2@example.com", "username": "admin2", "password": "!Admin@123", "first_name": "Admin", "last_name": "User", "role": "admin" } ``` **Used in:** - Bruno: `user/admin/Register Admin User.yml` ## Test Libraries ### Standard Test Library ```json { "name": "Test Library", "description": "A test library for ebooks", "type": "ebooks" } ``` **Used in:** - Go Tests: `cmd/server/tests/test_helpers.go` (createTestEbookID) - Multiple test files for library management ### Search Test Library ```json { "name": "Search Test Library", "description": "Library for search tests", "type": "ebooks" } ``` **Used in:** - Go Tests: `cmd/server/tests/search_test.go` ## Test Books/Media Items ### Standard Test Ebook ```json { "title": "Test Ebook", "author": "Test Author", "file_path": "/tmp/test.epub", "file_size": 1024, "mime_type": "application/epub+zip" } ``` **Used in:** - Go Tests: `cmd/server/tests/test_helpers.go` (createTestEbookID) ### Test Book Variants Multiple test books with different titles for testing: - "Test Book 1" - "Test Book 2" - "Test Book Title" - "A Book", "B Book", "C Book" (for sorting tests) ## Test Devices Test devices typically follow this pattern: - Device ID: UUID format - Device Name: "Test Device" or descriptive names - User association: Linked to test users ## Test Collections ```json { "name": "Test Collection", "description": "A test collection", "rules": { "operator": "AND", "conditions": [ { "field": "media.title", "operator": "contains", "value": "Test" } ] } } ``` ## File Paths ### Container Paths (inside Docker container) - Uploads: `/app/uploads` - Cache: `/app/cache/kepub` ### Host Paths (when running tests from host) - Uploads: `./uploads` - Cache: Docker volume (not on host filesystem) ## How to Use This Data ### In Bruno Tests 1. Start the server: `podman compose up -d` 2. Run "Register User" to create the test admin user 3. Run "Login User" to get the JWT token 4. Use the token for authenticated requests ### In Go Tests The test helpers automatically create and clean up test data: ```go ts, db, cfg := setupTestServer(t) token := loginTestUser(t, ts, db) userID := getTestUserID(t, db) ``` ### Cross-Referencing When you find a bug in Bruno tests: 1. Check the same scenario in Go tests using the same credentials 2. Use the same email/password to debug 3. Verify the database state matches expectations ## Resetting Test Data ### Reset Database ```bash # Stop containers and remove volumes podman compose down -v # Restart with fresh database podman compose up -d ``` ### Reset Specific Test User If you need to recreate just the test user: ```bash # Login to database podman exec -it bookhoard_db psql -U postgres -d bookhoard # Delete test user DELETE FROM users WHERE email = 'testuser@example.com'; # Exit \q ``` ## Notes - All test passwords use the bcrypt hash format in the database - The password `Test@Pass123!` is used across most test users for consistency - Test users are created with `role: "admin"` to enable full API access - Tests automatically clean up their data, but manual testing may require database resets ## Adding New Test Data When adding new test data: 1. Choose descriptive names following the pattern "Test X" 2. Use consistent email format: `testpurpose@example.com` 3. Document in this file for cross-reference 4. Update both Go tests and Bruno collections for consistency