Problem:
TestWorker_ConcurrentJobs was failing because it created empty temporary
directories and submitted scan jobs, but never added any test files for the
scanner to process. The scanner would complete successfully but create no
media items, causing the test to fail with 'Should NOT be empty, but was []'.
Root Cause:
The test was incomplete - it created the directory structure but didn't
populate the directories with test .epub files that the scanner could
process into media items.
Solution:
Added code to create 2 test .epub files in each of the 3 temporary
directories before submitting concurrent scan jobs:
- Directory 1: book0.epub, book1.epub
- Directory 2: book0.epub, book1.epub
- Directory 3: book0.epub, book1.epub
- Total: 6 test files to be scanned concurrently
This matches the pattern used in TestWorker_DirectoryScanJob which creates
test files before scanning.
Files changed:
- cmd/server/tests/worker_test.go: Added test file creation loop
Problem:
Tests were calling `defer setup.Close()` which was interfering with the
library cleanup added in the previous commit. The execution order was:
1. setupTestServer() registers t.Cleanup() with library deletion code
2. Test calls defer setup.Close()
3. Test finishes:
- defer setup.Close() runs FIRST → closes DB pool
- t.Cleanup() runs SECOND → tries to delete libraries but DB is closed!
This prevented "Job Status Test Library" and other test libraries from
being cleaned up, leaving residual data in the database after tests.
Root Cause:
The setupTestServer() function already handles cleanup via t.Cleanup(),
which calls setup.Close() at the end. The explicit defer calls were
redundant and caused the database pool to close before library cleanup
could execute.
Solution:
Removed all 17 occurrences of `defer setup.Close()` from test files:
- worker_test.go: 4 tests
- jobs_test.go: 7 tests
- scan_settings_integration_test.go: 3 tests
- library_browse_test.go: 1 test
- goroutine_leak_test.go: 1 test
- fsnotify_integration_test.go: 1 test
Now setupTestServer()'s t.Cleanup() function properly:
1. Deletes "test" libraries (while DB is still connected)
2. Then calls setup.Close() to close connections
This ensures all test libraries are cleaned up, leaving a clean database
after `make test-integration` completes.
Files changed:
- cmd/server/tests/worker_test.go: Removed 4 defer calls
- cmd/server/tests/jobs_test.go: Removed 7 defer calls
- cmd/server/tests/scan_settings_integration_test.go: Removed 3 defer calls
- cmd/server/tests/library_browse_test.go: Removed 1 defer call
- cmd/server/tests/goroutine_leak_test.go: Removed 1 defer call
- cmd/server/tests/fsnotify_integration_test.go: Removed 1 defer call
The TestWorker_SetFoldersJob test was submitting a set folders job without
first registering the folder with the library through the HTTP API. This caused
the job to fail because the folder wasn't properly tracked.
Changes:
- Call addFolderToLibrary before submitting the set folders job
- Ensures the temporary test directory is properly registered with the library
- Aligns test behavior with actual API workflow where folders must be added first
- Update ListMediaItems calls to include required Limit and Offset parameters
- Change Enqueue() to EnqueueJob() to match updated worker API
- Add error assertions for job enqueue operations with descriptive messages
- Ensure all database queries use proper pagination parameters
This ensures tests properly validate error conditions and use the latest worker service API.
- Add folder to library before scanning in fsnotify integration test
- Update API endpoint paths from /items to /media-items
- Refactor test server setup to support WebSocket hijacking
- Add JobsHandler to test server configuration
- Implement proper job status polling instead of fixed delays
- Consolidate addFolderToLibrary helper into test_helpers.go
- Remove duplicate helper function from media_item_isbn_test.go
- Add error logging for search test failures
- Improve test robustness with better nil handling and type assertions
- Update worker test to use EnqueueJob and poll for completion
- Add global worker instance reset in test cleanup
- Fix media_scanner_test to initialize folders before testing