simedkom/tests/README.md
Yoga Pangestu 97cdfd6e0b test: add comprehensive test suite and model factories
- Add HasFactory trait to all model classes for factory support
- Create factory classes for all models (Classification, Company, ContentRecap, Department, IssueManagement, Journalist, Location, MediaMonitoring, MediaMonitoringTheme, PartnerMedia, SubClassification, SubLocation, Theme, User)
- Add unit tests for all models with relationship and attribute validation
- Add unit tests for all enums (Channel, ContentType, IsActive, IssueSentiment, MediaClassification, MediaType, SocialMedia)
- Add feature tests for factory integration and basic application functionality
- Add tests for Filament actions, columns, and media library utilities
- Add tests for model policies (Classification, Theme) and traits (WithComment, WithValue)
- Update phpunit.xml configuration for test environment
- Add test documentation and working tests reference guide
- Add ContentType enum casting to ContentRecap model
- Add MediaMonitoringTheme relationships and factory support
- Establish comprehensive testing infrastructure for improved code quality and reliability
2025-12-11 14:50:37 +07:00

6.4 KiB

SIMEDKOM Testing Suite

Comprehensive Pest testing suite for the SIMEDKOM media monitoring and management system.

Test Structure

Unit Tests (tests/Unit/)

Enums (tests/Unit/Enums/)

  • MediaTypeTest.php - Tests for media type enumeration
  • ContentTypeTest.php - Tests for content type enumeration
  • IssueSentimentTest.php - Tests for issue sentiment enumeration
  • IsActiveTest.php - Tests for active status enumeration
  • ChannelTest.php - Tests for channel enumeration
  • MediaClassificationTest.php - Tests for media classification enumeration
  • SocialMediaTest.php - Tests for social media platform enumeration

Models (tests/Unit/Models/)

  • UserTest.php - User model tests
  • ThemeTest.php - Theme model tests and relationships
  • ClassificationTest.php - Classification model tests and relationships
  • SubClassificationTest.php - Sub-classification model tests
  • LocationTest.php - Location model tests and relationships
  • SubLocationTest.php - Sub-location model tests
  • DepartmentTest.php - Department model tests
  • MediaMonitoringTest.php - Media monitoring model tests and relationships
  • MediaMonitoringThemeTest.php - Pivot model tests
  • IssueManagementTest.php - Issue management model tests
  • ContentRecapTest.php - Content recap model tests
  • JournalistTest.php - Journalist model tests and relationships
  • CompanyTest.php - Company model tests and relationships
  • PartnerMediaTest.php - Partner media model tests

Policies (tests/Unit/Policies/)

  • ThemePolicyTest.php - Theme authorization policy tests
  • ClassificationPolicyTest.php - Classification authorization policy tests

Traits (tests/Unit/Traits/)

  • WithValueTest.php - Enum value trait tests
  • WithCommentTest.php - Enum comment trait tests

Components (tests/Unit/)

  • MediaLibrary/CustomPathGeneratorTest.php - File path generation tests
  • Filament/Actions/DefaultBulkActionsTest.php - Bulk actions tests
  • Filament/Columns/TimestampColumnsTest.php - Timestamp columns tests

Feature Tests (tests/Feature/)

Filament Resources (tests/Feature/Filament/)

Master Domain (tests/Feature/Filament/Master/)
  • ThemeResourceTest.php - Theme resource CRUD operations
  • ClassificationResourceTest.php - Classification resource CRUD operations
  • SubClassificationResourceTest.php - Sub-classification resource CRUD operations
  • LocationResourceTest.php - Location resource CRUD operations
  • SubLocationResourceTest.php - Sub-location resource CRUD operations
  • DepartmentResourceTest.php - Department resource CRUD operations
  • UserResourceTest.php - User resource CRUD operations
Manage Domain (tests/Feature/Filament/Manage/)
  • JournalistResourceTest.php - Journalist resource CRUD operations
  • PartnerResourceTest.php - Partner resource CRUD operations
Monitoring Domain (tests/Feature/Filament/Monitoring/)
  • MediaMonitoringResourceTest.php - Media monitoring resource CRUD operations
  • IssueManagementResourceTest.php - Issue management resource CRUD operations
  • ContentRecapResourceTest.php - Content recap resource CRUD operations

Integration Tests (tests/Feature/Integration/)

  • MediaMonitoringWorkflowTest.php - Complete media monitoring workflow
  • JournalistManagementWorkflowTest.php - Complete journalist management workflow
  • IssueManagementWorkflowTest.php - Complete issue management workflow

Test Coverage

Domain Coverage

  • Master Data: Users, Themes, Classifications, Locations, Departments
  • Entity Management: Journalists, Companies, Partners
  • Core Business: Media Monitoring, Issue Management, Content Recaps

Component Coverage

  • Models: All Eloquent models with relationships and scopes
  • Enums: All business domain enumerations with traits
  • Policies: Authorization policies for resources
  • Filament Resources: CRUD operations, validation, filtering
  • Custom Components: Path generators, bulk actions, columns
  • Workflows: End-to-end business process testing

Running Tests

All Tests

composer run test
# or
php artisan test

Specific Test Suites

# Unit tests only
php artisan test tests/Unit

# Feature tests only  
php artisan test tests/Feature

# Specific domain
php artisan test tests/Feature/Filament/Master
php artisan test tests/Feature/Filament/Manage
php artisan test tests/Feature/Filament/Monitoring

# Integration tests
php artisan test tests/Feature/Integration

Specific Test Files

# Single test file
php artisan test tests/Unit/Models/MediaMonitoringTest.php

# With filter
php artisan test --filter="can create media monitoring"

Test Patterns

Model Tests

  • Factory usage for test data creation
  • Relationship testing
  • Scope testing (active/inactive)
  • Fillable attributes validation
  • Enum casting verification

Resource Tests

  • Livewire component rendering
  • CRUD operations (Create, Read, Update, Delete)
  • Form validation
  • Table filtering and sorting
  • Bulk actions
  • Authorization checks

Integration Tests

  • Complete workflow testing
  • Multi-model interactions
  • Business logic validation
  • Data integrity checks

Test Data

Factories

All models have corresponding factories in database/factories/ for consistent test data generation.

Database

Tests use SQLite in-memory database with RefreshDatabase trait for isolation.

Authentication

Tests use actingAs() helper with factory-created users for authentication.

Best Practices

Test Organization

  • Group related tests using describe() blocks
  • Use descriptive test names with it() statements
  • Follow AAA pattern: Arrange, Act, Assert

Assertions

  • Use Pest's fluent expectations: expect($value)->toBe()
  • Chain assertions for related checks
  • Test both positive and negative cases

Data Management

  • Use factories for consistent test data
  • Leverage RefreshDatabase for test isolation
  • Create minimal required data for each test

Performance

  • Keep tests focused and fast
  • Use database transactions where possible
  • Mock external dependencies

Maintenance

Adding New Tests

  1. Follow existing naming conventions
  2. Place tests in appropriate domain folders
  3. Include both unit and feature tests for new components
  4. Update this documentation

Test Updates

  • Update tests when business logic changes
  • Maintain test coverage for new features
  • Refactor tests alongside code refactoring