Skip to content

Commit d5e8a49

Browse files
committed
test(policy): cover resolver editability semantics
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 392367f commit d5e8a49

1 file changed

Lines changed: 49 additions & 2 deletions

File tree

tests/php/Unit/Service/Policy/Runtime/DefaultPolicyResolverTest.php

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function testResolveAppliesGroupValueWhenSystemAllowsOverride(): void {
4848

4949
$this->assertSame('ordered_numeric', $resolved->getEffectiveValue());
5050
$this->assertSame('group', $resolved->getSourceScope());
51-
$this->assertTrue($resolved->isEditableByCurrentActor());
51+
$this->assertFalse($resolved->isEditableByCurrentActor());
5252
$this->assertTrue($resolved->canSaveAsUserDefault());
5353
$this->assertTrue($resolved->canUseAsRequestOverride());
5454
}
@@ -140,7 +140,7 @@ public function testResolveValueChoiceUnionsConflictingGroupValues(): void {
140140
$this->assertSame('parallel', $resolved->getEffectiveValue());
141141
$this->assertSame('group', $resolved->getSourceScope());
142142
$this->assertSame(['parallel', 'ordered_numeric'], $resolved->getAllowedValues());
143-
$this->assertTrue($resolved->isEditableByCurrentActor());
143+
$this->assertFalse($resolved->isEditableByCurrentActor());
144144
$this->assertTrue($resolved->canSaveAsUserDefault());
145145
$this->assertTrue($resolved->canUseAsRequestOverride());
146146
}
@@ -198,6 +198,53 @@ public function testResolveDoesNotApplyGroupValueWhenSystemBlocksOverride(): voi
198198
$this->assertSame('ordered_numeric', $resolved->getEffectiveValue());
199199
$this->assertSame('system', $resolved->getSourceScope());
200200
$this->assertSame(['ordered_numeric'], $resolved->getAllowedValues());
201+
$this->assertFalse($resolved->isEditableByCurrentActor());
202+
$this->assertFalse($resolved->canUseAsRequestOverride());
203+
}
204+
205+
public function testResolveMarksPolicyEditableForSystemAdminEvenWhenChildrenCannotOverride(): void {
206+
$source = new InMemoryPolicySource();
207+
$source->systemLayer = (new PolicyLayer())
208+
->setScope('system')
209+
->setValue('ordered_numeric')
210+
->setAllowChildOverride(false)
211+
->setVisibleToChild(true)
212+
->setAllowedValues(['ordered_numeric']);
213+
214+
$context = PolicyContext::fromUserId('admin')
215+
->setActorCapabilities([
216+
'canManageSystemPolicies' => true,
217+
'canManageGroupPolicies' => true,
218+
]);
219+
220+
$resolver = new DefaultPolicyResolver($source);
221+
$resolved = $resolver->resolve($this->getDefinition(), $context);
222+
223+
$this->assertTrue($resolved->isEditableByCurrentActor());
224+
$this->assertFalse($resolved->canSaveAsUserDefault());
225+
$this->assertFalse($resolved->canUseAsRequestOverride());
226+
}
227+
228+
public function testResolveMarksPolicyEditableForGroupAdminEvenWhenChildrenCannotOverride(): void {
229+
$source = new InMemoryPolicySource();
230+
$source->systemLayer = (new PolicyLayer())
231+
->setScope('system')
232+
->setValue('ordered_numeric')
233+
->setAllowChildOverride(false)
234+
->setVisibleToChild(true)
235+
->setAllowedValues(['ordered_numeric']);
236+
237+
$context = PolicyContext::fromUserId('manager')
238+
->setActorCapabilities([
239+
'canManageSystemPolicies' => false,
240+
'canManageGroupPolicies' => true,
241+
]);
242+
243+
$resolver = new DefaultPolicyResolver($source);
244+
$resolved = $resolver->resolve($this->getDefinition(), $context);
245+
246+
$this->assertTrue($resolved->isEditableByCurrentActor());
247+
$this->assertFalse($resolved->canSaveAsUserDefault());
201248
$this->assertFalse($resolved->canUseAsRequestOverride());
202249
}
203250

0 commit comments

Comments
 (0)