Skip to content

Commit a3048b5

Browse files
authored
Merge pull request #7766 from ProcessMaker/FOUR-20504
FOUR-20504 enhance test coverage for settings functionality before adding cache
2 parents d2ca132 + 6f48021 commit a3048b5

File tree

3 files changed

+645
-0
lines changed

3 files changed

+645
-0
lines changed

tests/Feature/Api/SettingAuthTest.php

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
<?php
2+
3+
namespace Tests\Feature\Api;
4+
5+
use Illuminate\Foundation\Testing\RefreshDatabase;
6+
use ProcessMaker\Models\ProcessCategory;
7+
use ProcessMaker\Models\ScriptExecutor;
8+
use ProcessMaker\Package\Auth\Database\Seeds\AtlassianSeeder;
9+
use ProcessMaker\Package\Auth\Database\Seeds\Auth0Seeder;
10+
use ProcessMaker\Package\Auth\Database\Seeds\AuthSeeder;
11+
use ProcessMaker\Package\Auth\Database\Seeds\FacebookSeeder;
12+
use ProcessMaker\Package\Auth\Database\Seeds\GitHubSeeder;
13+
use ProcessMaker\Package\Auth\Database\Seeds\GoogleSeeder;
14+
use ProcessMaker\Package\Auth\Database\Seeds\KeycloakSeeder;
15+
use ProcessMaker\Package\Auth\Database\Seeds\LdapSeeder;
16+
use ProcessMaker\Package\Auth\Database\Seeds\MicrosoftSeeder;
17+
use ProcessMaker\Package\Auth\Database\Seeds\SamlSeeder;
18+
use Tests\Feature\Shared\RequestHelper;
19+
use Tests\TestCase;
20+
21+
class SettingAuthTest extends TestCase
22+
{
23+
use RequestHelper;
24+
use RefreshDatabase;
25+
26+
private function seedLDAPSettings()
27+
{
28+
ScriptExecutor::factory()->create([
29+
'title' => 'Node Executor',
30+
'description' => 'Default Javascript/Node Executor',
31+
'language' => 'javascript',
32+
]);
33+
34+
ProcessCategory::factory()->create([
35+
'name' => 'System',
36+
'status' => 'ACTIVE',
37+
'is_system' => true,
38+
]);
39+
40+
\Artisan::call('db:seed', ['--class' => LdapSeeder::class, '--force' => true]);
41+
}
42+
43+
public function testDefaultLdapSettings()
44+
{
45+
$this->seedLDAPSettings();
46+
47+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'LDAP', 'order_by' => 'name', 'order_direction' => 'ASC']));
48+
$response->assertStatus(200);
49+
$this->assertCount(18, $response['data']);
50+
51+
$this->assertDatabaseCount('settings', 38);
52+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.enabled', 'name' => 'Enabled', 'format' => 'boolean']);
53+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.cron.period', 'name' => 'Synchronization Schedule', 'format' => 'object']);
54+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.type', 'name' => 'Type', 'format' => 'choice']);
55+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.server.address', 'name' => 'Server Address', 'format' => 'text']);
56+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.server.port', 'name' => 'Server Port', 'format' => 'text']);
57+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.server.tls', 'name' => 'TLS', 'format' => 'boolean']);
58+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.base_dn', 'name' => 'Base DN', 'format' => 'text']);
59+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.authentication.username', 'name' => 'Username', 'format' => 'text']);
60+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.authentication.password', 'name' => 'Password', 'format' => 'text']);
61+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.groups', 'name' => 'Groups To Import', 'format' => 'checkboxes']);
62+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.departments', 'name' => 'Departments To Import', 'format' => 'checkboxes']);
63+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.identifiers.user', 'name' => 'User Identifier', 'format' => 'text']);
64+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.identifiers.group', 'name' => 'Group Identifier', 'format' => 'text']);
65+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.identifiers.user_class', 'name' => 'User Class Identifier', 'format' => 'text']);
66+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.identifiers.group_class', 'name' => 'Group Class Identifier', 'format' => 'text']);
67+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.variables', 'name' => 'Variable Map', 'format' => 'object']);
68+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.users.chunksize', 'name' => 'Chunk Size for User Import', 'format' => 'text']);
69+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.log', 'name' => 'Logs', 'format' => 'button']);
70+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.certificate_file', 'name' => 'Certificate location', 'format' => 'text']);
71+
$this->assertDatabaseHas('settings', ['key' => 'services.ldap.certificate', 'name' => 'Certificate', 'format' => 'file']);
72+
73+
$this->assertDatabaseCount('security_logs', 0);
74+
}
75+
76+
public function testUpdateLdapSettings()
77+
{
78+
$this->seedLDAPSettings();
79+
80+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'LDAP', 'order_by' => 'name', 'order_direction' => 'ASC']));
81+
$this->assertCount(18, $response['data']);
82+
83+
$enabled = $response['data'][0];
84+
$this->assertEquals('Enabled', $enabled['name']);
85+
$this->assertEquals(0, $enabled['config']);
86+
87+
$syncSchedule = $response['data'][1];
88+
$this->assertEquals('Synchronization Schedule', $syncSchedule['name']);
89+
$this->assertEquals(['quantity' => 1, "units" => "days"], $syncSchedule['config']);
90+
91+
$type = $response['data'][2];
92+
$this->assertEquals('Type', $type['name']);
93+
$this->assertNull($type['config']);
94+
95+
$serverAddress = $response['data'][3];
96+
$this->assertEquals('Server Address', $serverAddress['name']);
97+
$this->assertNull($serverAddress['config']);
98+
99+
$serverPort = $response['data'][4];
100+
$this->assertEquals('Server Port', $serverPort['name']);
101+
$this->assertEquals(636, $serverPort['config']);
102+
103+
$tls = $response['data'][5];
104+
$this->assertEquals('TLS', $tls['name']);
105+
$this->assertEquals(1, $tls['config']);
106+
107+
$username = $response['data'][8];
108+
$this->assertEquals('Username', $username['name']);
109+
$this->assertNull($username['config']);
110+
111+
$password = $response['data'][9];
112+
$this->assertEquals('Password', $password['name']);
113+
$this->assertNull($password['config']);
114+
115+
$data = array_merge($enabled, ['config' => 1]);
116+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $enabled['id']]), $data);
117+
$response->assertStatus(204);
118+
$this->assertDatabaseHas('settings', ['id' => $enabled['id'], 'config' => 1]);
119+
120+
$data = array_merge($syncSchedule, ['config' => ['quantity' => 2, "units" => "hours"]]);
121+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $syncSchedule['id']]), $data);
122+
$response->assertStatus(204);
123+
$this->assertDatabaseHas('settings', ['id' => $syncSchedule['id'], 'config' => json_encode(['quantity' => 2, "units" => "hours"])]);
124+
125+
$data = array_merge($type, ['config' => 'ad']);
126+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $type['id']]), $data);
127+
$response->assertStatus(204);
128+
$this->assertDatabaseHas('settings', ['id' => $type['id'], 'config' => 'ad']);
129+
130+
$data = array_merge($type, ['config' => '389ds']);
131+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $type['id']]), $data);
132+
$response->assertStatus(204);
133+
$this->assertDatabaseHas('settings', ['id' => $type['id'], 'config' => '389ds']);
134+
135+
$data = array_merge($type, ['config' => 'openldap']);
136+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $type['id']]), $data);
137+
$response->assertStatus(204);
138+
$this->assertDatabaseHas('settings', ['id' => $type['id'], 'config' => 'openldap']);
139+
140+
$data = array_merge($serverAddress, ['config' => 'ldap://ldap.example.com']);
141+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $serverAddress['id']]), $data);
142+
$response->assertStatus(204);
143+
$this->assertDatabaseHas('settings', ['id' => $serverAddress['id'], 'config' => 'ldap://ldap.example.com']);
144+
145+
$data = array_merge($serverPort, ['config' => 389]);
146+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $serverPort['id']]), $data);
147+
$response->assertStatus(204);
148+
$this->assertDatabaseHas('settings', ['id' => $serverPort['id'], 'config' => 389]);
149+
150+
$data = array_merge($tls, ['config' => 0]);
151+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $tls['id']]), $data);
152+
$response->assertStatus(204);
153+
$this->assertDatabaseHas('settings', ['id' => $tls['id'], 'config' => 0]);
154+
155+
$data = array_merge($username, ['config' => 'admin']);
156+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $username['id']]), $data);
157+
$response->assertStatus(204);
158+
$this->assertDatabaseHas('settings', ['id' => $username['id'], 'config' => 'admin']);
159+
160+
$data = array_merge($password, ['config' => 'password']);
161+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $password['id']]), $data);
162+
$response->assertStatus(204);
163+
$this->assertDatabaseHas('settings', ['id' => $password['id'], 'config' => 'password']);
164+
165+
$this->assertDatabaseCount('security_logs', 10);
166+
$this->assertDatabaseHas('security_logs', ['event' => 'SettingsUpdated', 'changes->setting_id' => $enabled['id']]);
167+
}
168+
169+
public function testDefaultSsoSettings()
170+
{
171+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'SSO', 'order_by' => 'name', 'order_direction' => 'ASC']));
172+
$response->assertStatus(200);
173+
$this->assertCount(0, $response['data']);
174+
175+
\Artisan::call('db:seed', ['--class' => AuthSeeder::class, '--force' => true]);
176+
177+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'SSO', 'order_by' => 'name', 'order_direction' => 'ASC']));
178+
$response->assertStatus(200);
179+
$this->assertCount(4, $response['data']);
180+
181+
$this->assertDatabaseCount('settings', 23);
182+
$this->assertDatabaseHas('settings', ['key' => 'standard-login.enabled', 'name' => 'Allow Standard Login', 'format' => 'boolean']);
183+
$this->assertDatabaseHas('settings', ['key' => 'sso.automatic_user_creation', 'name' => 'Automatic Registration', 'format' => 'boolean']);
184+
$this->assertDatabaseHas('settings', ['key' => 'sso.user_default_config', 'name' => 'New User Default Config', 'format' => 'object']);
185+
$this->assertDatabaseHas('settings', ['key' => 'sso.debug', 'name' => 'Debug Mode', 'format' => 'boolean']);
186+
$this->assertDatabaseHas('settings', ['key' => 'package.auth.installed']);
187+
188+
\Artisan::call('db:seed', ['--class' => AtlassianSeeder::class, '--force' => true]);
189+
\Artisan::call('db:seed', ['--class' => Auth0Seeder::class, '--force' => true]);
190+
\Artisan::call('db:seed', ['--class' => FacebookSeeder::class, '--force' => true]);
191+
\Artisan::call('db:seed', ['--class' => GitHubSeeder::class, '--force' => true]);
192+
\Artisan::call('db:seed', ['--class' => GoogleSeeder::class, '--force' => true]);
193+
\Artisan::call('db:seed', ['--class' => KeycloakSeeder::class, '--force' => true]);
194+
\Artisan::call('db:seed', ['--class' => MicrosoftSeeder::class, '--force' => true]);
195+
\Artisan::call('db:seed', ['--class' => SamlSeeder::class, '--force' => true]);
196+
197+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'SSO', 'order_by' => 'name', 'order_direction' => 'ASC']));
198+
$response->assertStatus(200);
199+
$this->assertCount(12, $response['data']);
200+
$this->assertDatabaseCount('settings', 69);
201+
202+
$this->assertDatabaseHas('settings', ['key' => 'services.atlassian.client_id', 'name' => 'Client ID', 'format' => 'text']);
203+
$this->assertDatabaseHas('settings', ['key' => 'services.atlassian.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
204+
$this->assertDatabaseHas('settings', ['key' => 'services.atlassian.redirect', 'name' => 'Redirect', 'format' => 'text']);
205+
206+
$this->assertDatabaseHas('settings', ['key' => 'services.auth0.client_id', 'name' => 'Client ID', 'format' => 'text']);
207+
$this->assertDatabaseHas('settings', ['key' => 'services.auth0.redirect', 'name' => 'Callback URL', 'format' => 'text']);
208+
$this->assertDatabaseHas('settings', ['key' => 'services.auth0.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
209+
$this->assertDatabaseHas('settings', ['key' => 'services.auth0.base_url', 'name' => 'Domain', 'format' => 'text']);
210+
211+
$this->assertDatabaseHas('settings', ['key' => 'services.facebook.client_id', 'name' => 'App ID', 'format' => 'text']);
212+
$this->assertDatabaseHas('settings', ['key' => 'services.facebook.client_secret', 'name' => 'App Secret', 'format' => 'text']);
213+
$this->assertDatabaseHas('settings', ['key' => 'services.facebook.redirect', 'name' => 'Redirect', 'format' => 'text']);
214+
215+
$this->assertDatabaseHas('settings', ['key' => 'services.github.client_id', 'name' => 'Client ID', 'format' => 'text']);
216+
$this->assertDatabaseHas('settings', ['key' => 'services.github.redirect', 'name' => 'Redirect', 'format' => 'text']);
217+
$this->assertDatabaseHas('settings', ['key' => 'services.github.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
218+
219+
$this->assertDatabaseHas('settings', ['key' => 'services.google.redirect', 'name' => 'Redirect', 'format' => 'text']);
220+
$this->assertDatabaseHas('settings', ['key' => 'services.google.client_id', 'name' => 'Client ID', 'format' => 'text']);
221+
$this->assertDatabaseHas('settings', ['key' => 'services.google.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
222+
223+
$this->assertDatabaseHas('settings', ['key' => 'services.keycloak.base_url', 'name' => 'Base URL', 'format' => 'text']);
224+
$this->assertDatabaseHas('settings', ['key' => 'services.keycloak.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
225+
$this->assertDatabaseHas('settings', ['key' => 'services.keycloak.realms', 'name' => 'Realm', 'format' => 'text']);
226+
$this->assertDatabaseHas('settings', ['key' => 'services.keycloak.client_id', 'name' => 'Client ID', 'format' => 'text']);
227+
$this->assertDatabaseHas('settings', ['key' => 'services.keycloak.redirect', 'name' => 'Redirect', 'format' => 'text']);
228+
229+
$this->assertDatabaseHas('settings', ['key' => 'services.microsoft.redirect', 'name' => 'Redirect', 'format' => 'text']);
230+
$this->assertDatabaseHas('settings', ['key' => 'services.microsoft.client_id', 'name' => 'Client ID', 'format' => 'text']);
231+
$this->assertDatabaseHas('settings', ['key' => 'services.microsoft.client_secret', 'name' => 'Client Secret', 'format' => 'text']);
232+
233+
$this->assertDatabaseCount('security_logs', 0);
234+
}
235+
236+
public function testUpdateSsoSettings()
237+
{
238+
\Artisan::call('db:seed', ['--class' => AuthSeeder::class, '--force' => true]);
239+
240+
$response = $this->apiCall('GET', route('api.settings.index', ['group' => 'SSO', 'order_by' => 'name', 'order_direction' => 'ASC']));
241+
$this->assertCount(4, $response['data']);
242+
243+
$allowStandardLogin = $response['data'][0];
244+
$this->assertEquals('Allow Standard Login', $allowStandardLogin['name']);
245+
$this->assertEquals(1, $allowStandardLogin['config']);
246+
247+
$automaticRegistration = $response['data'][1];
248+
$this->assertEquals('Automatic Registration', $automaticRegistration['name']);
249+
$this->assertEquals(1, $automaticRegistration['config']);
250+
251+
$newUserDefaultConfig = $response['data'][2];
252+
$this->assertEquals('New User Default Config', $newUserDefaultConfig['name']);
253+
$this->assertEquals(['permissions' => [], 'groups' => []], $newUserDefaultConfig['config']);
254+
255+
$debugMode = $response['data'][3];
256+
$this->assertEquals('Debug Mode', $debugMode['name']);
257+
$this->assertEquals(0, $debugMode['config']);
258+
259+
$data = array_merge($allowStandardLogin, ['config' => 1]);
260+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $allowStandardLogin['id']]), $data);
261+
$response->assertStatus(204);
262+
$this->assertDatabaseHas('settings', ['id' => $allowStandardLogin['id'], 'config' => 1]);
263+
264+
$data = array_merge($automaticRegistration, ['config' => 0]);
265+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $automaticRegistration['id']]), $data);
266+
$response->assertStatus(204);
267+
$this->assertDatabaseHas('settings', ['id' => $automaticRegistration['id'], 'config' => 0]);
268+
269+
$data = array_merge($newUserDefaultConfig, ['config' => ['permissions' => ['view', 'edit'], 'groups' => ['admin', 'user']]]);
270+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $newUserDefaultConfig['id']]), $data);
271+
$response->assertStatus(204);
272+
$this->assertDatabaseHas('settings', ['id' => $newUserDefaultConfig['id'], 'config' => json_encode(['permissions' => ['view', 'edit'], 'groups' => ['admin', 'user']])]);
273+
274+
$data = array_merge($debugMode, ['config' => 1]);
275+
$response = $this->apiCall('PUT', route('api.settings.update', ['setting' => $debugMode['id']]), $data);
276+
$response->assertStatus(204);
277+
$this->assertDatabaseHas('settings', ['id' => $debugMode['id'], 'config' => 1]);
278+
279+
$this->assertDatabaseCount('security_logs', 4);
280+
}
281+
}

0 commit comments

Comments
 (0)