Files
2025-10-26 17:16:56 -05:00

4.3 KiB

Test Setup Summary

What Was Done

Successfully set up Vitest testing framework for the Claude Conversation Exporter project with comprehensive test coverage.

Components Added

1. Dependencies Installed

  • vitest - Fast unit test framework
  • @vitest/ui - Interactive UI for tests
  • @vitest/coverage-v8 - Code coverage reporting
  • happy-dom - Lightweight DOM implementation for tests
  • jsdom - Full DOM implementation (alternative)

2. Configuration Files

vite.config.ts - Added test configuration:

test: {
  globals: true,
  environment: 'happy-dom',
  setupFiles: ['./src/tests/setup.ts'],
  include: ['src/tests/**/*.test.ts'],
  coverage: {
    provider: 'v8',
    reporter: ['text', 'json', 'html'],
    exclude: [
      'node_modules/',
      'src/tests/',
      '**/*.d.ts',
      '**/*.config.*',
      '**/mockData',
    ],
  },
}

tsconfig.json - Added Vitest types and included test files

package.json - Added test scripts:

  • pnpm test - Watch mode
  • pnpm test:run - Run once
  • pnpm test:ui - Interactive UI
  • pnpm test:coverage - Coverage report

.gitignore - Added coverage directory exclusion

3. Test Files Created

src/tests/setup.ts

  • Global test setup
  • Browser API mocks (browser., chrome.)
  • DOM method mocks

src/tests/mockData.ts

  • Reusable test fixtures
  • Mock conversations with various scenarios
  • Mock messages in different formats

src/tests/utils.test.ts (31 tests)

  • inferModel() - 6 tests
  • getCurrentBranch() - 5 tests
  • convertToMarkdown() - 5 tests
  • convertToText() - 5 tests
  • generateFilename() - 7 tests
  • downloadFile() - 3 tests

src/tests/types.test.ts (12 tests)

  • Type validation for all TypeScript interfaces
  • Message format validation
  • Extension message types

src/tests/integration.test.ts (8 tests)

  • Full export workflow tests
  • Format conversion consistency
  • Filename generation scenarios
  • Model inference edge cases

src/tests/edgeCases.test.ts (17 tests)

  • Empty data handling
  • Complex branching scenarios
  • Filename edge cases
  • Model inference boundaries
  • Content conversion edge cases

src/tests/README.md

  • Documentation for test structure
  • Instructions for running tests
  • Coverage information

Test Coverage Results

Overall Coverage (utils.ts)

  • Statements: 100%
  • Branches: 96%
  • Functions: 100%
  • Lines: 100%

Total Test Count

  • 68 tests total
  • 67 passing
  • 1 skipped (circular reference test - would cause infinite loop)

Running Tests

# Run all tests in watch mode
pnpm test

# Run tests once (for CI/CD)
pnpm test:run

# Run tests with interactive UI
pnpm test:ui

# Generate coverage report
pnpm test:coverage

What's Tested

✅ Model inference logic with date-based detection ✅ Branch traversal in conversation trees ✅ Markdown conversion with/without metadata ✅ Text conversion with sender abbreviation ✅ Filename sanitization and generation ✅ File download functionality ✅ Type definitions and interfaces ✅ Integration workflows ✅ Edge cases (empty data, long content, special characters) ✅ Date boundary conditions ✅ Mixed format message handling

What's Not Tested

The following files are not tested as they require complex browser environment mocking:

  • background.ts - Background service worker (browser-specific)
  • content.ts - Content script (DOM manipulation)
  • popup.ts - Popup UI (DOM events)
  • options.ts - Options page (DOM events)
  • browse.ts - Browse page (DOM events, large UI)

These files contain primarily UI logic and would require:

  • Full DOM event simulation
  • Browser extension API integration testing
  • UI component testing framework (e.g., Testing Library)

The core business logic in utils.ts has excellent coverage, which is the most critical for correctness.

CI/CD Integration

The test suite can be integrated into CI/CD pipelines:

# Example GitHub Actions
- name: Run Tests
  run: pnpm test:run

- name: Generate Coverage
  run: pnpm test:coverage

Future Improvements

Potential areas for expansion:

  1. Add E2E tests with Playwright or Puppeteer
  2. Test browser-specific functionality with webextension-polyfill
  3. Add visual regression testing for UI components
  4. Mock fetch API for content script testing
  5. Add performance benchmarks
  6. Test the actual ZIP file generation functionality