# 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 ```bash composer run test # or php artisan test ``` ### Specific Test Suites ```bash # 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 ```bash # 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