Files
bookhoard/cmd/server/tests/TEST_COVERAGE.md
T
john-okeefe 655ed9225f Update code references and tests: Bookmann → Bookhoard
Code changes:
- main.go: Update cache directory path
- sidecar.go: Update file extension (.bookmann.json → .bookhoard.json)
- security.go: Update CORS example URLs
- queue_test.go: Update test database name
- feed_test.go: Update test assertions
- phase1_integration_test.go: Update test email addresses
- TEST_COVERAGE.md: Update project references

Part of project rename to Bookhoard.
2026-02-01 16:21:10 -05:00

9.5 KiB

Test Coverage Report

This document provides a comprehensive overview of all test scenarios covering possible failure points in the Bookhoard application.

Test Files

1. registration_test.go

Tests for User Registration Endpoint (POST /api/auth/register)

Success Cases:

  • Valid registration with all fields
  • Valid registration with only required fields
  • Registration with role specified

Validation Errors:

  • Invalid email format
  • Email already exists
  • Username already exists
  • Username too short (< 3 characters)
  • Username too long (> 50 characters)
  • Password too short (< 6 characters)
  • Missing required fields (email, username, password)
  • Invalid JSON payload
  • Invalid role value
  • Empty email, username, or password
  • Whitespace-only username
  • Empty JSON request body

2. login_test.go (Included in registration_test.go)

Tests for User Login Endpoint (POST /api/auth/login)

Success Cases:

  • Valid login with email
  • Valid login with username

Authentication Errors:

  • Invalid password
  • User not found (invalid credentials)

Validation Errors:

  • Missing login field
  • Missing password field
  • Empty login or password
  • Invalid JSON payload
  • Empty request body

3. ebook_test.go

Tests for Ebook and Media Item Endpoints

Ebook Endpoints (/api/ebooks):

  • GET /api/ebooks - List ebooks (with/without auth, pagination)
  • GET /api/ebooks/:id - Get specific ebook (invalid UUID, non-existent)
  • POST /api/ebooks - Create ebook (admin only, validation)
  • PUT /api/ebooks/:id - Update ebook (admin only)
  • DELETE /api/ebooks/:id - Delete ebook (admin only)

Media Item Endpoints (/api/media-items):

  • GET /api/media-items - List items (with/without library filter, invalid library_id)
  • GET /api/media-items/:id - Get specific item (non-existent)

Reading Progress (/api/ebooks/:id/progress):

  • GET - Get progress (without auth)
  • PUT - Update progress (invalid page numbers, invalid total pages)
  • DELETE - Delete progress

Ratings (/api/ebooks/:id/rating):

  • Create rating with invalid scores (0, 11, valid range 1-10)
  • Valid ratings (1, 5, 10)

4. user_test.go

Tests for User Profile and Account Management

Profile Management:

  • GET /api/auth/profile - Get profile (without auth, with auth)
  • PUT /api/auth/profile - Update profile (without auth, valid data)

Field Updates:

  • PUT /api/auth/email:
    • Update to existing email (conflict)
    • Invalid email format
    • Empty email value
  • PUT /api/auth/username:
    • Update to existing username (conflict)
    • Invalid length (too short, too long)
  • PUT /api/auth/password:
    • Wrong current password
    • Mismatched passwords
    • New password too short
  • PUT /api/auth/theme:
    • Update theme (valid)
    • Empty theme value

Account Deletion (DELETE /api/auth/account):

  • Delete without auth
  • Delete as last admin (forbidden)
  • Delete successfully
  • Admin delete another user
  • Non-admin tries to delete another user (forbidden)

Admin-Only Endpoints:

  • GET /api/auth/users - List users (without admin role, with admin role)

Scan Settings (/api/library/scan-settings):

  • GET - Get settings (without auth)
  • PUT - Update settings:
    • Invalid frequency (too low, too high)
    • Valid frequency update

5. library_test_comprehensive.go

Tests for Library Management

Library Operations (/api/libraries):

  • POST - Create library:
    • Without admin role (forbidden)
    • Invalid library type
    • Missing required fields
  • GET /:id:
    • Invalid UUID
    • Non-existent library
  • PUT /:id:
    • Without admin role (forbidden)
  • DELETE /:id:
    • Without admin role (forbidden)
    • Invalid UUID

Library Folders (/api/libraries/:id/folders):

  • POST - Add folder:
    • Without admin role
    • Invalid library ID
    • Missing folder path
  • GET - Get folders:
    • Without admin role
  • DELETE - Delete folder:
    • Without admin role

Library Visibility (/api/libraries/visibility):

  • POST - Set visibility:
    • Without auth
    • Invalid library ID
    • Successful update
  • GET /visible - Get visible libraries:
    • Without auth
    • With auth

Library Statistics (/api/libraries/:id/stats):

  • GET:
    • Without admin role
    • Invalid library ID
    • Successful retrieval

Library Types (/api/libraries/types):

  • GET - Get all library types

6. edge_cases_test.go

Tests for Edge Cases and Special Scenarios

Scanner Endpoints (/api/scanner):

  • POST /scan:
    • Without admin role
    • Without folder paths
    • Invalid folder paths
    • Successful scan
  • POST /start:
    • Without admin role
    • Successful start
  • POST /stop:
    • Without admin role
    • Successful stop

Edge Cases:

  • Empty request body
  • Malformed JSON
  • Very large payload
  • SQL injection attempt
  • XSS attempt in fields
  • Rate limiting simulation

HTMX-Specific Responses:

  • Registration with HTMX header (HTML response with script)
  • Registration error with HTMX header (HTML error message)

Concurrent Requests:

  • Multiple concurrent requests (basic load testing)

JWT Validation:

  • Valid JWT format
  • No Bearer prefix
  • Malformed JWT

Pagination and Filtering:

  • Negative limit
  • Negative offset
  • Very large limit
  • Valid pagination parameters

7. auth_test.go (Existing)

Tests for Authentication Middleware

JWT Middleware:

  • Missing JWT header
  • Invalid JWT format
  • Valid JWT format

Library Access Control:

  • Library creation without admin (unauthorized)
  • Library creation with valid admin
  • Library types response
  • User visible libraries
  • Media items list with filtering
  • JSON validation
  • Error handling

8. notes_highlights_test.go (Existing)

Tests for Media Notes and Highlights

Notes (/api/media-items/:id/notes):

  • GET without auth
  • POST validation (empty content)
  • Valid note creation payload

Highlights (/api/media-items/:id/highlights):

  • GET without auth
  • POST validation (empty selection)
  • Valid highlight creation
  • Color validation

Backward Compatibility (/api/ebooks/:id/notes and /highlights):

  • GET without auth for both

9. library_test.go (Existing)

Tests for Library Features

Comprehensive Library Tests:

  • Auth middleware variations
  • Library creation authorization
  • Library types response
  • User library visibility
  • Media items list
  • JSON validation scenarios
  • Error handling scenarios

10. setup_test.go, main_test.go, testrunner_test.go (Existing)

Test Infrastructure

  • Basic test setup verification
  • Test runner verification
  • Simple setup tests

Summary of Test Coverage by Component

Authentication & Authorization

Registration (all validation cases) Login (authentication failures) JWT validation (format, expiration, etc.) Role-based access control (admin vs user) Profile management Password updates Account deletion (including last admin protection)

User Management

Email updates (validation, conflicts) Username updates (validation, conflicts) Theme updates Admin-only endpoints User list (admin only) Scan settings management

Library Management

Create/Read/Update/Delete libraries (admin only) Library types Library folder management Library visibility controls Library statistics Invalid UUID handling

Media/Ebook Management

List media items (with filtering) Create/Update/Delete ebooks (admin only) Reading progress (CRUD operations) Ratings (validation, CRUD operations) Invalid UUID handling Non-existent resource handling

Notes & Highlights

Notes CRUD operations Highlights CRUD operations Content validation Color validation Backward compatibility with ebook endpoints

Scanner Operations

Scan operations (admin only) Start/stop scanner (admin only) Invalid folder path handling Missing folder path validation

Security & Edge Cases

SQL injection attempts XSS attempts Rate limiting Large payload handling Malformed JSON Empty request bodies Concurrent requests

API Behavior

HTMX-specific responses JSON validation Pagination (negative, too large, valid) Query parameter validation Error response formats


Areas for Further Testing

Integration Tests (Not Yet Implemented)

  • Full user flow: Register → Login → Create library → Scan → Read
  • End-to-end database operations
  • File system operations (scanner)

Performance Tests (Not Yet Implemented)

  • Large dataset handling
  • Concurrent user load
  • Memory usage under load

Database Tests (Not Yet Implemented)

  • Database connection failures
  • Query timeouts
  • Constraint violations
  • Transaction rollback scenarios

File System Tests (Not Yet Implemented)

  • Scanner with real ebook files
  • Cover image handling
  • File permission errors
  • Disk space errors

Running Tests

Run all tests:

go test ./cmd/server/tests/...

Run specific test file:

go test -v ./cmd/server/tests/registration_test.go

Run with coverage:

go test -cover ./cmd/server/tests/...

Run specific test case:

go test -v -run TestRegistration/Invalid_email_format ./cmd/server/tests/...

Notes

  • All tests follow the AAA (Arrange, Act, Assert) pattern
  • Tests use httptest for HTTP handler testing
  • Mock handlers simulate actual application behavior
  • Both positive and negative test cases are covered
  • Security scenarios (SQL injection, XSS) are tested
  • Role-based access is thoroughly tested
  • Input validation is comprehensively covered