## Summary <!-- Kurz: Was ändert sich und warum? --> ## Spec-Driven Development (SDD) - [ ] Es gibt eine Spec unter `specs/<NNN>-<feature>/` - [ ] Enthaltene Dateien: `plan.md`, `tasks.md`, `spec.md` - [ ] Spec beschreibt Verhalten/Acceptance Criteria (nicht nur Implementation) - [ ] Wenn sich Anforderungen während der Umsetzung geändert haben: Spec/Plan/Tasks wurden aktualisiert ## Implementation - [ ] Implementierung entspricht der Spec - [ ] Edge cases / Fehlerfälle berücksichtigt - [ ] Keine unbeabsichtigten Änderungen außerhalb des Scopes ## Tests - [ ] Tests ergänzt/aktualisiert (Pest/PHPUnit) - [ ] Relevante Tests lokal ausgeführt (`./vendor/bin/sail artisan test` oder `php artisan test`) ## Migration / Config / Ops (falls relevant) - [ ] Migration(en) enthalten und getestet - [ ] Rollback bedacht (rückwärts kompatibel, sichere Migration) - [ ] Neue Env Vars dokumentiert (`.env.example` / Doku) - [ ] Queue/cron/storage Auswirkungen geprüft ## UI (Filament/Livewire) (falls relevant) - [ ] UI-Flows geprüft - [ ] Screenshots/Notizen hinzugefügt ## Notes <!-- Links, Screenshots, Follow-ups, offene Punkte --> Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local> Reviewed-on: #3
74 lines
2.7 KiB
PHP
74 lines
2.7 KiB
PHP
<?php
|
|
|
|
use App\Services\Graph\GraphContractRegistry;
|
|
use Tests\TestCase;
|
|
|
|
uses(TestCase::class);
|
|
|
|
it('builds settings write method and path from the contract', function () {
|
|
config()->set('graph_contracts.types.settingsCatalogPolicy', [
|
|
'settings_write' => [
|
|
'path_template' => 'deviceManagement/configurationPolicies/{id}/settings/{settingId}',
|
|
'method' => 'PATCH',
|
|
],
|
|
]);
|
|
|
|
$registry = app(GraphContractRegistry::class);
|
|
|
|
expect($registry->settingsWriteMethod('settingsCatalogPolicy'))->toBe('PATCH');
|
|
expect($registry->settingsWritePath('settingsCatalogPolicy', 'policy-1', 'setting-9'))
|
|
->toBe('deviceManagement/configurationPolicies/policy-1/settings/setting-9');
|
|
});
|
|
|
|
it('returns null when settings write path requires a setting id', function () {
|
|
config()->set('graph_contracts.types.settingsCatalogPolicy', [
|
|
'settings_write' => [
|
|
'path_template' => 'deviceManagement/configurationPolicies/{id}/settings/{settingId}',
|
|
'method' => 'PATCH',
|
|
],
|
|
]);
|
|
|
|
$registry = app(GraphContractRegistry::class);
|
|
|
|
expect($registry->settingsWritePath('settingsCatalogPolicy', 'policy-1'))->toBeNull();
|
|
});
|
|
|
|
it('defaults settings write body shape to collection', function () {
|
|
config()->set('graph_contracts.types.settingsCatalogPolicy', [
|
|
'settings_write' => [
|
|
'path_template' => 'deviceManagement/configurationPolicies/{id}/settings',
|
|
'method' => 'POST',
|
|
],
|
|
]);
|
|
|
|
$registry = app(GraphContractRegistry::class);
|
|
|
|
expect($registry->settingsWriteBodyShape('settingsCatalogPolicy'))->toBe('collection');
|
|
expect($registry->settingsWriteFallbackBodyShape('settingsCatalogPolicy'))->toBeNull();
|
|
});
|
|
|
|
it('returns null when settings write contract is missing', function () {
|
|
config()->set('graph_contracts.types.settingsCatalogPolicy', []);
|
|
|
|
$registry = app(GraphContractRegistry::class);
|
|
|
|
expect($registry->settingsWriteMethod('settingsCatalogPolicy'))->toBeNull();
|
|
expect($registry->settingsWritePath('settingsCatalogPolicy', 'policy-1', 'setting-9'))->toBeNull();
|
|
});
|
|
|
|
it('returns fallback body shape when configured', function () {
|
|
config()->set('graph_contracts.types.settingsCatalogPolicy', [
|
|
'settings_write' => [
|
|
'path_template' => 'deviceManagement/configurationPolicies/{id}/settings',
|
|
'method' => 'POST',
|
|
'body_shape' => 'collection',
|
|
'fallback_body_shape' => 'wrapped',
|
|
],
|
|
]);
|
|
|
|
$registry = app(GraphContractRegistry::class);
|
|
|
|
expect($registry->settingsWriteBodyShape('settingsCatalogPolicy'))->toBe('collection');
|
|
expect($registry->settingsWriteFallbackBodyShape('settingsCatalogPolicy'))->toBe('wrapped');
|
|
});
|