123 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			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;
 | 
						|
    }
 | 
						|
}
 |