seed(Database\Seeders\PermissionSeeder::class); $this->seed(Database\Seeders\DefaultRoleWithPermissionSeeder::class); $this->seed(Database\Seeders\ConnectionProtocolSeeder::class); $this->seed(Database\Seeders\ConnectionProviderSeeder::class); $this->seed(Database\Seeders\ConnectionStatusSeeder::class); $this->oidcProtocol = ConnectionProtocol::query()->where('name', 'oidc')->firstOrFail(); $this->status = ConnectionStatus::query()->where('name', 'connected')->firstOrFail(); }); it('successfully creates an OIDC connected app with access URL', function (): void { $admin = User::factory()->create(); $admin->assignRole('admin'); $this->actingAs($admin); Livewire::test('pages::apps.oidc.create', ['type' => 'web']) ->set('form.name', 'My OIDC App') ->set('form.accessUrl', 'https://oidc-app.example.com') ->set('form.signInUris', ['https://oidc-app.example.com/callback']) ->set('form.signOutUris', ['https://oidc-app.example.com/logout']) ->call('save'); $this->assertDatabaseHas('connected_apps', [ 'name' => 'My OIDC App', 'connection_protocol_id' => $this->oidcProtocol->id, ]); $app = ConnectedApp::query()->where('name', 'My OIDC App')->firstOrFail(); expect($app->settings)->toBeArray() ->and(data_get($app->settings, 'access_url'))->toBe('https://oidc-app.example.com'); }); it('validates access URL format when creating an OIDC app', function (): void { $admin = User::factory()->create(); $admin->assignRole('admin'); $this->actingAs($admin); Livewire::test('pages::apps.oidc.create', ['type' => 'web']) ->set('form.name', 'Invalid OIDC App') ->set('form.accessUrl', 'not-a-valid-url') ->call('save') ->assertHasErrors(['form.accessUrl' => 'url']); });