public function CspTest::testFallbackAwareAppendIfEnabled in Content-Security-Policy 8
Appending to a directive if it or a fallback is enabled.
@covers ::fallbackAwareAppendIfEnabled
File
- tests/
src/ Unit/ CspTest.php, line 267  
Class
- CspTest
 - Test manipulating directives in a policy.
 
Namespace
Drupal\Tests\csp\UnitCode
public function testFallbackAwareAppendIfEnabled() {
  // If no relevant directives are enabled, they should not change.
  $policy = new Csp();
  $policy
    ->setDirective('style-src', Csp::POLICY_SELF);
  $policy
    ->fallbackAwareAppendIfEnabled('script-src-attr', Csp::POLICY_UNSAFE_INLINE);
  $this
    ->assertFalse($policy
    ->hasDirective('default-src'));
  $this
    ->assertFalse($policy
    ->hasDirective('script-src'));
  $this
    ->assertFalse($policy
    ->hasDirective('script-src-attr'));
  // Script-src-attr should copy value from default-src.  Script-src should
  // not be changed.
  $policy = new Csp();
  $policy
    ->setDirective('default-src', Csp::POLICY_SELF);
  $policy
    ->fallbackAwareAppendIfEnabled('script-src-attr', Csp::POLICY_UNSAFE_INLINE);
  $this
    ->assertEquals([
    Csp::POLICY_SELF,
  ], $policy
    ->getDirective('default-src'));
  $this
    ->assertFalse($policy
    ->hasDirective('script-src'));
  $this
    ->assertEquals([
    Csp::POLICY_SELF,
    Csp::POLICY_UNSAFE_INLINE,
  ], $policy
    ->getDirective('script-src-attr'));
  // Script-src-attr should copy value from script-src.
  $policy = new Csp();
  $policy
    ->setDirective('script-src', Csp::POLICY_SELF);
  $policy
    ->fallbackAwareAppendIfEnabled('script-src-attr', Csp::POLICY_UNSAFE_INLINE);
  $this
    ->assertFalse($policy
    ->hasDirective('default-src'));
  $this
    ->assertEquals([
    Csp::POLICY_SELF,
  ], $policy
    ->getDirective('script-src'));
  $this
    ->assertEquals([
    Csp::POLICY_SELF,
    Csp::POLICY_UNSAFE_INLINE,
  ], $policy
    ->getDirective('script-src-attr'));
  // Script-src-attr should only append to existing value if enabled.
  $policy = new Csp();
  $policy
    ->setDirective('script-src', Csp::POLICY_SELF);
  $policy
    ->setDirective('script-src-attr', []);
  $policy
    ->fallbackAwareAppendIfEnabled('script-src-attr', Csp::POLICY_UNSAFE_INLINE);
  $this
    ->assertFalse($policy
    ->hasDirective('default-src'));
  $this
    ->assertEquals([
    Csp::POLICY_SELF,
  ], $policy
    ->getDirective('script-src'));
  $this
    ->assertEquals([
    Csp::POLICY_UNSAFE_INLINE,
  ], $policy
    ->getDirective('script-src-attr'));
}