gestion addin
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\AuditLog;
|
||||
use App\Models\DirectoryUser;
|
||||
use App\Models\EditableField;
|
||||
use App\Models\Template;
|
||||
use App\Models\Tenant;
|
||||
use App\Models\User;
|
||||
use App\Models\UserOverride;
|
||||
use App\Services\Auth\EntraTokenValidator;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use RuntimeException;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ProfileTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
private Tenant $tenant;
|
||||
private DirectoryUser $agent;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
config(['signature.admin_allowed_cidrs' => []]);
|
||||
$this->tenant = Tenant::create(['name' => 'CABM', 'entra_tenant_id' => '11111111-1111-1111-1111-111111111111']);
|
||||
$this->agent = DirectoryUser::create([
|
||||
'tenant_id' => $this->tenant->id, 'entra_oid' => '22222222-2222-2222-2222-222222222222',
|
||||
'given_name' => 'Jean', 'mobile_phone' => '06 00 00 00 00', 'office_location' => 'Bâtiment A',
|
||||
'mail' => 'j.martin@beziers-mediterranee.fr', 'account_enabled' => true,
|
||||
]);
|
||||
EditableField::create(['tenant_id' => $this->tenant->id, 'field' => 'mobile', 'label' => 'Mobile', 'enabled' => true, 'validation_rule' => 'phone']);
|
||||
EditableField::create(['tenant_id' => $this->tenant->id, 'field' => 'bureau', 'label' => 'Bureau', 'enabled' => true, 'validation_rule' => 'text']);
|
||||
EditableField::create(['tenant_id' => $this->tenant->id, 'field' => 'fonction', 'label' => 'Fonction', 'enabled' => false]);
|
||||
Template::create(['tenant_id' => $this->tenant->id, 'name' => 'D', 'is_default' => true,
|
||||
'draft_html_full' => '{{prenom}}{{#if mobile}} M:{{mobile}}{{/if}}{{#if bureau}} B:{{bureau}}{{/if}}'])->publish();
|
||||
|
||||
$this->app->instance(EntraTokenValidator::class, new class extends EntraTokenValidator {
|
||||
public function validate(string $jwt): array
|
||||
{
|
||||
if ($jwt !== 'ok') {
|
||||
throw new RuntimeException('bad');
|
||||
}
|
||||
|
||||
return ['tid' => '11111111-1111-1111-1111-111111111111', 'oid' => '22222222-2222-2222-2222-222222222222'];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function test_api_liste_seulement_les_champs_ouverts(): void
|
||||
{
|
||||
$this->withToken('ok')->getJson('/api/v1/profile')->assertOk()
|
||||
->assertJsonCount(2, 'fields')
|
||||
->assertJsonPath('fields.0.key', 'mobile')
|
||||
->assertJsonPath('fields.0.directory_value', '06 00 00 00 00')
|
||||
->assertJsonPath('fields.0.overridden', false)
|
||||
->assertJsonPath('reply_variant_default', 'short');
|
||||
}
|
||||
|
||||
public function test_api_modifie_masque_puis_retablit_et_trace(): void
|
||||
{
|
||||
$this->withToken('ok')->putJson('/api/v1/profile', ['fields' => ['mobile' => '07 11 22 33 44'], 'hidden' => ['bureau'], 'reply_variant' => 'none'])
|
||||
->assertOk()->assertJsonPath('fields.0.override', '07 11 22 33 44')->assertJsonPath('fields.1.override', '')->assertJsonPath('reply_variant', 'none');
|
||||
|
||||
$this->withToken('ok')->getJson('/api/v1/signature')->assertJson(['html' => 'Jean M:07 11 22 33 44']);
|
||||
$this->withToken('ok')->getJson('/api/v1/signature?context=reply')->assertJson(['html' => '', 'variant' => 'none']);
|
||||
$this->assertTrue(AuditLog::where('action', 'profile.update')->where('actor', 'j.martin@beziers-mediterranee.fr')->exists());
|
||||
|
||||
$this->withToken('ok')->putJson('/api/v1/profile', ['fields' => ['mobile' => null, 'bureau' => null], 'reply_variant' => null])->assertOk();
|
||||
$this->assertSame(0, UserOverride::count());
|
||||
$this->withToken('ok')->getJson('/api/v1/signature')->assertJson(['html' => 'Jean M:06 00 00 00 00 B:Bâtiment A']);
|
||||
}
|
||||
|
||||
public function test_api_refuse_champ_ferme_et_numero_invalide(): void
|
||||
{
|
||||
$this->withToken('ok')->putJson('/api/v1/profile', ['fields' => ['fonction' => 'Directeur']])
|
||||
->assertStatus(422)->assertJsonValidationErrors('fields.fonction');
|
||||
$this->withToken('ok')->putJson('/api/v1/profile', ['fields' => ['mobile' => '<b>06</b>']])
|
||||
->assertStatus(422)->assertJsonValidationErrors('fields.mobile');
|
||||
$this->withToken('ok')->putJson('/api/v1/profile', ['fields' => []], )->assertOk();
|
||||
$this->assertSame(0, UserOverride::count());
|
||||
}
|
||||
|
||||
public function test_portail_enregistre_les_trois_modes(): void
|
||||
{
|
||||
$user = User::create(['name' => 'Jean', 'email' => 'j.martin@beziers-mediterranee.fr', 'tenant_id' => $this->tenant->id, 'entra_oid' => '22222222-2222-2222-2222-222222222222']);
|
||||
$this->actingAs($user)->get('/me')->assertOk()->assertSee('Mes informations')->assertSee('06 00 00 00 00');
|
||||
|
||||
$this->actingAs($user)->put('/me', [
|
||||
'fields' => ['mobile' => ['mode' => 'custom', 'value' => '07 99 99 99 99'], 'bureau' => ['mode' => 'hidden']],
|
||||
'reply_variant' => 'full',
|
||||
])->assertRedirect()->assertSessionHasNoErrors();
|
||||
|
||||
$this->assertSame('07 99 99 99 99', UserOverride::where('field', 'mobile')->value('value'));
|
||||
$this->assertSame('', UserOverride::where('field', 'bureau')->value('value'));
|
||||
$this->assertSame('full', $this->agent->fresh()->preference->reply_variant);
|
||||
}
|
||||
|
||||
public function test_admin_ouvre_et_ferme_les_champs(): void
|
||||
{
|
||||
$admin = User::create(['name' => 'A', 'email' => 'a@x.fr', 'tenant_id' => $this->tenant->id, 'entra_oid' => '33333333-3333-3333-3333-333333333333', 'role' => 'admin']);
|
||||
$this->actingAs($admin)->get('/admin/champs')->assertOk()->assertSee('telephone')->assertDontSee('<code>email</code>', false);
|
||||
|
||||
$this->actingAs($admin)->put('/admin/champs', ['fields' => [
|
||||
'mobile' => ['enabled' => '0', 'label' => 'Mobile', 'type' => 'phone'],
|
||||
'fonction' => ['enabled' => '1', 'label' => 'Ma fonction', 'type' => 'text'],
|
||||
]])->assertRedirect();
|
||||
|
||||
$this->assertFalse(EditableField::where('field', 'mobile')->value('enabled'));
|
||||
$this->assertSame('Ma fonction', EditableField::where('field', 'fonction')->value('label'));
|
||||
$this->withToken('ok')->getJson('/api/v1/profile')->assertJsonMissing(['key' => 'mobile'])->assertJsonFragment(['key' => 'fonction']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user