This document provides testing guidelines and examples for the Activity module in Laraxot.
Modules/Activity/tests/
├── Feature/
│ ├── (feature tests)
├── Unit/
│ └── (unit tests)
├── TestCase.php
└── Pest.php
- TestCase.php - Base test case with database configuration
- Pest.php - Pest configuration and extensions
- Feature/ - Feature tests for Activity functionality
- Unit/ - Unit tests for Activity components
The Activity TestCase extends the base testing configuration and provides:
- Database connection setup
- Module-specific configuration
- Test environment setup
Activity module uses the following database connections:
activity- Main Activity module connectionmysql- Default connection- All connections configured to use test database
Use database transactions for test isolation:
use Illuminate\Foundation\Testing\DatabaseTransactions;Each test should be independent:
protected function tearDown(): void
{
parent::tearDown();
// Clean up test data
}Configure Activity-specific settings:
protected function setUp(): void
{
parent::setUp();
// Configure Activity module
config(['activity.default_log_level' => 'info']);
config(['activity.cache_enabled' => false]);
}test('activity can be created', function () {
$activity = \Modules\Activity\Models\Activity::create([
'type' => 'user_action',
'description' => 'Test activity',
'user_id' => 1,
'ip_address' => '127.0.0.1',
'user_agent' => 'Test Agent',
'data' => ['key' => 'value'],
]);
expect($activity)->toBeInstanceOf(\Modules\Activity\Models\Activity::class);
expect($activity->type)->toBe('user_action');
});test('activity configuration is loaded', function () {
$activityConfig = config('activity');
expect($activityConfig['default_log_level'])->toBe('info');
expect($activityConfig['cache_enabled'])->toBe(false);
});test('activity service provider is registered', function () {
$app = app();
expect($app->bound(\Modules\Activity\Providers\ActivityServiceProvider::class))->toBeTrue();
});# Run all Activity module tests
./vendor/bin/pest Modules/Activity/tests
# Run tests with coverage
./vendor/bin/pest Modules/Activity/tests --coverage
# Run tests with verbose output
./vendor/bin/pest Modules/Activity/tests --verbose# Run PHPStan on Activity module
./vendor/bin/phpstan analyze Modules/Activity
# Run PHPMD on Activity module
./vendor/bin/phpmd Modules/Activity/src
# Run PHPInsights on Activity module
./vendor/bin/phpinsights analyse Modules/ActivityProblem: Activity configuration not loaded
Solution: Ensure proper configuration in TestCase:
protected function setUp(): void
{
parent::setUp();
config(['activity.default_log_level' => 'info']);
config(['activity.cache_enabled' => false]);
}Problem: Database connection issues
Solution: Configure database connections properly:
protected function createApplication()
{
$app = parent::createApplication();
$app['config']->set([
'database.connections.activity.database' => 'Quaeris_data_test',
'database.connections.activity.database' => 'healthcare_app_data_test',
]);
return $app;
}- Aim for 100% code coverage
- Test all public methods
- Test all edge cases
- Test all error scenarios
- Tests should run in <200ms each
- Use database transactions for isolation
- Optimize database queries
- Minimize test data
- All tests must pass PHPStan level 9+
- All tests must follow DRY, KISS, SOLID principles
- All tests must be maintainable
- All tests must be robust
- Configure testing environment
- Set up database connections
- Install testing dependencies
- Verify configuration
- Write tests for new features
- Update existing tests
- Add regression tests
- Maintain test coverage
- Run tests
- Run quality checks
- Fix any issues
- Update documentation
- Ensure all tests pass
- Verify coverage requirements
- Update documentation
- Commit changes
- Update this file when adding new tests
- Document any special testing requirements
- Add examples for new test types
- Keep documentation current
- Update root documentation when module testing changes
- Add backlinks to this file
- Keep documentation consistent
- Update troubleshooting guides
test('activity can be created', function () {
$activity = \Modules\Activity\Models\Activity::create([
'type' => 'user_action',
'description' => 'Test activity',
'user_id' => 1,
'ip_address' => '127.0.0.1',
'user_agent' => 'Test Agent',
'data' => ['key' => 'value', 'action' => 'test'],
'level' => 'info',
'created_at' => now(),
]);
expect($activity)->toBeInstanceOf(\Modules\Activity\Models\Activity::class);
expect($activity->type)->toBe('user_action');
expect($activity->description)->toBe('Test activity');
expect($activity->user_id)->toBe(1);
expect($activity->ip_address)->toBe('127.0.0.1');
expect($activity->user_agent)->toBe('Test Agent');
expect($activity->data)->toBe(['key' => 'value', 'action' => 'test']);
expect($activity->level)->toBe('info');
});test('activity service can log activity', function () {
$service = new \Modules\Activity\Services\ActivityService();
$activity = $service->logActivity([
'type' => 'user_action',
'description' => 'Test activity',
'user_id' => 1,
'ip_address' => '127.0.0.1',
'user_agent' => 'Test Agent',
'data' => ['key' => 'value'],
]);
expect($activity)->toBeInstanceOf(\Modules\Activity\Models\Activity::class);
expect($activity->type)->toBe('user_action');
});test('activity api can log activity', function () {
$activityData = [
'type' => 'user_action',
'description' => 'Test activity',
'user_id' => 1,
'ip_address' => '127.0.0.1',
'user_agent' => 'Test Agent',
'data' => ['key' => 'value'],
];
$response = $this->post('/api/activity/log', $activityData);
$response->assertStatus(201);
$response->assertJson([
'type' => 'user_action',
'description' => 'Test activity',
'user_id' => 1,
'ip_address' => '127.0.0.1',
'user_agent' => 'Test Agent',
]);
});- Understand the feature to test
- Review existing tests
- Plan test scenarios
- Prepare test data
- Use descriptive test names
- Use proper assertions
- Clean up test data
- Document tests
- Run tests
- Check coverage
- Run quality checks
- Update documentation
- All tests pass
- Coverage requirements met
- Quality checks pass
- Documentation updated
Following these guidelines will ensure your Activity module tests are:
- Fast and reliable
- Maintainable and scalable
- Comprehensive and thorough
- Consistent and robust
Remember: Good tests are the foundation of reliable software development.
Last updated: January 2025 *