Repository navigation
Feature/issue 1354 1355 1356 1357 - #1410
Merged
Hexstar-labs merged 4 commits intoOct 21, 2026
Merged
Hexstar-labs merged 4 commits into
Hexstar-labs merged 4 commits into
Conversation
added 4 commits
October 21, 2026 09:34
… structure-based assertions
…ehensive frontend tests
…ts with unified documentation
|
@victoroladele30-star Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brain-Storm Testing Issues Implementation (#1354-1357)
Overview
This PR implements four comprehensive testing improvements across the Brain-Storm frontend and backend, focusing on removing brittle tests, enhancing API mocks, consolidating test infrastructure, and adding robust DTO validation tests.
Changes
Issue #1354: Remove Brittle Snapshot Tests
Status: ✅ Implemented
Changes:
Refactored apps/frontend/src/tests/components/ui/snapshots.test.tsx
Replaced pure snapshot tests with structure-based assertions
Removed brittle toMatchSnapshot() calls that break on trivial formatting changes
Added robust DOM structure validation for all UI components
Added accessibility attribute validation (ARIA roles, labels, etc.)
Refactored apps/frontend/src/tests/components/ui/snapshots-extended.test.tsx
Extended component test coverage with structural assertions
Replaced snapshot tests with focused DOM element queries
Added validation for form elements, inputs, and complex components
Deleted:
apps/frontend/src/tests/components/ui/snapshots/snapshots.test.tsx.snap
apps/frontend/src/tests/components/ui/snapshots/snapshots-extended.test.tsx.snap
Benefits:
Tests now validate actual behavior, not formatting details
Reduced test brittleness from 87+ snapshots to zero
Improved test maintainability and readability
Faster test feedback loop (no snapshot diffs on formatting)
Components Covered:
Button, Badge, Spinner, Card, ProgressBar, Modal, CircularProgress (7 components)
Input, Select, Checkbox, RadioGroup, Breadcrumb, DataGrid, Skeleton, ErrorBoundary, BadgeDisplay, TokenBalance (10 components)
Total: 17 UI components with robust structural tests
Issue #1355: Mock Freighter Wallet API for Frontend Tests
Status: ✅ Implemented
Changes:
Enhanced apps/frontend/src/tests/hooks/useFreighterDetection.test.ts
Added comprehensive Freighter API mock setup with extended function signatures
Implemented mock methods: isConnected, getPublicKey, signMessage, signTransaction, submitTransaction, getNetwork
New Test Suites:
Connection Detection - Tests for Freighter availability detection
Available Freighter scenario
Missing/not-installed scenario
Network error handling during connection check
Public Key Retrieval - Tests for account key management
Valid Freighter account public key extraction
Locked wallet error handling
User rejection scenarios
Missing extension errors
Message Signing - Tests for message signing functionality
Proper request format with address parameter
Signing rejection handling
Correct address parameter passing
Mock Extension Detection - Tests for extension availability
Extension available simulation
Extension missing simulation with proper error handling
Mock Coverage:
Connection status checking (isConnected)
Public key management (getPublicKey)
Message signing (signMessage with address parameter)
Transaction signing (signTransaction)
Transaction submission (submitTransaction)
Network information (getNetwork)
Benefits:
Comprehensive Freighter API mocking for all wallet operations
Proper error handling for locked wallets, user rejections, and missing extensions
Maintains wallet UI separation (components don't import Freighter SDK directly)
Supports testnet and mainnet network compatibility
Issue #1356: Grants and Certificates Test Scripts Consolidation
Status: ✅ Implemented
Changes:
Modified apps/backend/package.json
Added new consolidated script: test:grants-and-certificates
This runs both grants and certificates tests in a single command using Jest pattern matching
Created apps/backend/TEST_CONSOLIDATION.md
Comprehensive documentation for consolidated test scripts
Test coverage details for each module
Running instructions for individual and consolidated tests
Coverage target documentation (85% lines/functions/statements, 80% branches)
Troubleshooting guide
New Scripts:
Individual tests (existing)
npm run test:grants # Grants module only
npm run test:certificates # Certificates module only
Consolidated test (new)
npm run test:grants-and-certificates # Both modules together
Test Coverage:
Grants Module:
Service unit tests: src/grants/tests/grants.service.spec.ts
Integration tests: src/grants/tests/grants.integration.test.ts
Business logic tests: src/grants/tests/grants-business.spec.ts
Controller tests: src/grants/tests/grants.controller.spec.ts
E2E tests: test/grants.e2e-spec.ts
Certificates Module:
Service tests: src/certificates/tests/certificate.service.test.ts
Integration tests: src/certificates/tests/certificate.integration-spec.ts
PDF service tests: src/certificates/tests/certificate-pdf.service.spec.ts
Minting service tests: src/certificates/tests/certificate-minting.service.spec.ts
Controller tests: src/certificates/tests/certificates.controller.spec.ts
E2E tests: test/certificates.e2e-spec.ts
Benefits:
Unified test execution for related modules
Consistent test configuration and naming patterns
Improved CI/CD integration
Easier onboarding for new contributors
Clear documentation of test structure and coverage targets
Issue #1357: Add Test for Courses DTO Validation
Status: ✅ Implemented
Changes:
Created comprehensive validation test suite: apps/backend/src/courses/dto/courses.dto.validation.spec.ts
485 lines of validation tests covering all course DTOs
DTOs Tested:
CreateCourseDto - Full validation of course creation payload
Required fields: title, description, level, durationHours
Optional fields: instructorId, requiresKyc
Tests: 13 validation test cases
UpdateCourseDto - Partial update validation
All fields optional (allows empty update)
Validates provided fields even when optional
Null value handling for optional fields
Tests: 6 validation test cases
CourseQueryDto - Query parameter validation
Search and filtering parameters
Pagination (page, limit)
Sorting (sortBy, sortOrder)
Level enum validation
Tests: 10 validation test cases
ScheduleCourseDto - Course scheduling validation
ISO 8601 datetime format validation
Future date enforcement
Past date rejection
Invalid format handling
Tests: 5 validation test cases
CourseResponseDto - Field stripping validation
Sensitive field exclusion (isDeleted, deletedAt, isPublished, createdBy, updatedBy)
Safe field inclusion verification
JSON serialization verification
Null normalization for optional fields
Tests: 6 validation test cases
Test Coverage:
Validation Tests (30 test cases):
Required field enforcement
Optional field handling
Type constraints and coercion
Enum value validation
Range/limit validation
String length constraints
Date format validation
Nested object validation
Error handling
Field stripping for response DTOs
Type Coercion Tests (3 test cases):
String-to-number coercion for durationHours
String-to-boolean coercion for requiresKyc
ISO string-to-Date coercion for scheduledAt
Sensitive Field Exclusion Tests (5 test cases):
Verification of forbidden fields being undefined
JSON.stringify output validation
Safe field mapping verification
Undefined-to-null normalization
CourseStatus enum value handling
Benefits:
Comprehensive DTO validation coverage
Prevents internal fields from leaking to clients
Type safety and coercion validation
Enum constraint enforcement
Future-proof pagination and sorting validation
Sensitive field protection through JSON serialization tests
Testing & Verification
All changes have been implemented and committed:
Commit history
17c948e test(#1357): Add comprehensive validation tests for courses DTOs
6645ddc test(#1356): Consolidate grants and certificates test scripts with unified documentation
9c126c0 test(#1355): Enhance Freighter wallet API mocking for comprehensive frontend tests
3e60a90 test(#1354): Remove brittle snapshot tests and replace with structure-based assertions
Files Modified:
apps/frontend/src/tests/components/ui/snapshots.test.tsx (refactored)
apps/frontend/src/tests/components/ui/snapshots-extended.test.tsx (refactored)
apps/frontend/src/tests/hooks/useFreighterDetection.test.ts (enhanced)
apps/backend/package.json (added consolidated test script)
apps/backend/src/courses/dto/courses.dto.validation.spec.ts (new)
Files Created:
apps/backend/TEST_CONSOLIDATION.md (new documentation)
Files Deleted:
apps/frontend/src/tests/components/ui/snapshots/snapshots.test.tsx.snap
apps/frontend/src/tests/components/ui/snapshots/snapshots-extended.test.tsx.snap
Running the Tests
Frontend Tests
Run all frontend tests
npm run test:unit:frontend
Run snapshot tests only (now structural tests)
npx vitest src/tests/components/ui/snapshots
Run with coverage
npm run test:coverage:frontend
Backend Tests
Run individual test modules
npm run test:grants
npm run test:certificates
Run consolidated tests (NEW)
npm run test:grants-and-certificates
Run all backend tests
npm run test:unit
Run with coverage
npm run test:unit:coverage
Related Documentation
Frontend: apps/frontend/src/tests/components/ui/SNAPSHOTS.md (updated for structural tests)
Backend: apps/backend/TEST_CONSOLIDATION.md (new consolidation guide)
Closing Issues
This PR closes the following GitHub issues:
Closes #1354 — Remove brittle snapshot tests
Closes #1355 — Mock Freighter wallet API for frontend tests
Closes #1356 — Grants and certificates test scripts consolidation
Closes #1357 — Add test for courses DTO validation
PR Details
Branch: feature/issue-1354-1355-1356-1357 Base: main Commits: 4 sequential commits, one per issue Impact: Frontend & Backend testing improvements Breaking Changes: None Migration Guide: None (backward compatible)