serverId = DB::table('dns_manager_servers')->insertGetId(['ip_address' => '10.0.0.1', 'password' => 'x']); $this->otherServerId = DB::table('dns_manager_servers')->insertGetId(['ip_address' => '10.0.0.2', 'password' => 'x']); } private function runJob(array|false $pleskDomains): void { $plesk = Mockery::mock(PleskDomainService::class); $plesk->shouldReceive('listDomains')->once()->andReturn($pleskDomains); $plesk->shouldReceive('getLastError')->andReturn('boom'); $server = Mockery::mock(ServerService::class); $server->shouldReceive('addServerById')->andReturn(true); $server->shouldReceive('listRecords')->andReturn(['error' => false, 'data' => []]); $this->app->instance(PleskDomainService::class, $plesk); $this->app->instance(ServerService::class, $server); $this->app->call([new SyncDnsFromPlesk($this->serverId), 'handle']); } public function test_imports_new_domains_and_links_pending_ones_on_selected_server(): void { Event::fake([DnsSyncCompleted::class]); $pending = DnsDomain::create(['domain_name' => 'Pending.vn', 'dns_manager_server_id' => $this->serverId, 'is_created' => 0]); $otherServer = DnsDomain::create(['domain_name' => 'other.vn', 'dns_manager_server_id' => $this->otherServerId, 'is_created' => 0]); $cancelled = DnsDomain::create(['domain_name' => 'cancelled.vn', 'dns_manager_server_id' => $this->serverId, 'is_created' => DnsDomain::STATUS_CANCELLED]); $this->runJob([ ['id' => 1, 'name' => 'new.vn', 'base_domain_id' => 0], ['id' => 2, 'name' => 'pending.vn', 'base_domain_id' => 0], ['id' => 3, 'name' => 'other.vn', 'base_domain_id' => 0], ['id' => 4, 'name' => 'cancelled.vn', 'base_domain_id' => 0], ['id' => 5, 'name' => 'sub.new.vn', 'base_domain_id' => 1], ]); $this->assertDatabaseHas('dns_manager_domain', ['domain_name' => 'new.vn', 'plesk_id' => 1, 'dns_manager_server_id' => $this->serverId, 'is_created' => 1]); $this->assertDatabaseHas('dns_manager_domain', ['id' => $pending->id, 'plesk_id' => 2, 'is_created' => 1]); $this->assertDatabaseHas('dns_manager_domain', ['id' => $otherServer->id, 'plesk_id' => null]); $this->assertDatabaseHas('dns_manager_domain', ['id' => $cancelled->id, 'plesk_id' => null, 'is_created' => DnsDomain::STATUS_CANCELLED]); $this->assertDatabaseMissing('dns_manager_domain', ['domain_name' => 'sub.new.vn']); Event::assertDispatched(DnsSyncCompleted::class, fn ($e) => $e->imported === 2 && $e->failedDomains === []); } public function test_reports_failure_when_plesk_domain_list_unavailable(): void { Event::fake([DnsSyncCompleted::class]); $this->runJob(false); $this->assertDatabaseCount('dns_manager_domain', 0); Event::assertDispatched(DnsSyncCompleted::class, fn ($e) => $e->failedDomains !== []); } public function test_endpoint_queues_sync_for_selected_server(): void { Queue::fake(); Role::firstOrCreate(['name' => 'Full Administrator', 'guard_name' => 'admin']); $admin = User::factory()->create(); $admin->assignRole('Full Administrator'); $this->actingAs($admin, 'admin') ->postJson('/api/v1/administrator/domains/sync-dns', ['dns_manager_server_id' => 999999]) ->assertStatus(422); $this->actingAs($admin, 'admin') ->postJson('/api/v1/administrator/domains/sync-dns', ['dns_manager_server_id' => $this->serverId]) ->assertOk(); Queue::assertPushed(SyncDnsFromPlesk::class, 1); } }