perling/app/Console/Commands/TestProductionSetup.php

123 lines
4.3 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\PerizinanStatus;
use App\Services\PerizinanApiService;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Artisan;
use Carbon\Carbon;
class TestProductionSetup extends Command
{
protected $signature = 'perizinan:test-production';
protected $description = 'Test production setup readiness';
public function handle()
{
$this->info('🔍 Testing Production Setup Readiness...');
$this->newLine();
$allPassed = true;
// Test 1: Database Connection
$this->info('1. Testing Database Connection...');
try {
DB::connection()->getPdo();
$this->line(' ✅ Database connection successful');
} catch (\Exception $e) {
$this->error(' ❌ Database connection failed: ' . $e->getMessage());
$allPassed = false;
}
// Test 2: Database Table
$this->info('2. Testing Database Table...');
try {
$count = PerizinanStatus::count();
$this->line(" ✅ PerizinanStatus table exists with {$count} records");
} catch (\Exception $e) {
$this->error(' ❌ Database table issue: ' . $e->getMessage());
$allPassed = false;
}
// Test 3: API Configuration
$this->info('3. Testing API Configuration...');
$bearerToken = config('services.perizinan.bearer_token');
$apiKey = config('services.perizinan.api_key');
if ($bearerToken && $bearerToken !== 'your_actual_bearer_token') {
$this->line(' ✅ Bearer token configured');
} else {
$this->error(' ❌ Bearer token not configured properly');
$allPassed = false;
}
if ($apiKey && $apiKey !== 'your_actual_api_key') {
$this->line(' ✅ API key configured');
} else {
$this->error(' ❌ API key not configured properly');
$allPassed = false;
}
// Test 4: API Connection
$this->info('4. Testing API Connection...');
try {
$service = new PerizinanApiService();
$response = $service->fetchSummaryByStatus('pertek');
if ($response && ($response['success'] ?? false)) {
$this->line(' ✅ API connection successful');
$dataCount = count($response['data'] ?? []);
$this->line(" 📊 Retrieved {$dataCount} data items");
} else {
$this->error(' ❌ API response invalid');
$allPassed = false;
}
} catch (\Exception $e) {
$this->error(' ❌ API connection failed: ' . $e->getMessage());
$allPassed = false;
}
// Test 5: Storage Permissions
$this->info('5. Testing Storage Permissions...');
$logPath = storage_path('logs/test-' . time() . '.log');
try {
file_put_contents($logPath, 'test');
unlink($logPath);
$this->line(' ✅ Storage directory writable');
} catch (\Exception $e) {
$this->error(' ❌ Storage permission issue: ' . $e->getMessage());
$allPassed = false;
}
// Test 6: Schedule Configuration
$this->info('6. Testing Schedule Configuration...');
try {
Artisan::call('schedule:list');
$this->line(' ✅ Laravel scheduler configured');
$this->line(' 📅 Run "php artisan schedule:list" to see scheduled commands');
} catch (\Exception $e) {
$this->error(' ❌ Scheduler issue: ' . $e->getMessage());
$allPassed = false;
}
$this->newLine();
if ($allPassed) {
$this->info('🎉 All tests passed! Production setup is ready.');
$this->newLine();
$this->info('Next steps:');
$this->line('1. Deploy to production server');
$this->line('2. Run: chmod +x *.sh');
$this->line('3. Run: ./deploy-production.sh');
$this->line('4. Setup cron job as per PRODUCTION_DEPLOY.md');
} else {
$this->error('❌ Some tests failed. Please fix the issues above.');
return 1;
}
return 0;
}
}