Version 1
[yaffs-website] / web / modules / contrib / redirect / modules / redirect_404 / src / Tests / Redirect404LogSuppressorTest.php
diff --git a/web/modules/contrib/redirect/modules/redirect_404/src/Tests/Redirect404LogSuppressorTest.php b/web/modules/contrib/redirect/modules/redirect_404/src/Tests/Redirect404LogSuppressorTest.php
new file mode 100644 (file)
index 0000000..6d948b7
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+namespace Drupal\redirect_404\Tests;
+
+/**
+ * Tests suppressing 404 logs if the suppress_404 setting is enabled.
+ *
+ * @group redirect_404
+ */
+class Redirect404LogSuppressorTest extends Redirect404TestBase {
+
+  /**
+   * Additional modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['dblog'];
+
+  /**
+   * A user with some relevant administrative permissions.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $adminUser;
+
+  /**
+   * A user without any permissions.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $webUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    // Create users with specific permissions.
+    $this->adminUser = $this->drupalCreateUser([
+      'administer redirect settings',
+      'access site reports',
+    ]);
+    $this->webUser = $this->drupalCreateUser([]);
+  }
+
+  /**
+   * Tests the suppress_404 service.
+   */
+  public function testSuppress404Events() {
+    // Cause a page not found and an access denied event.
+    $this->drupalGet('page-not-found');
+    $this->assertResponse(404);
+    $this->drupalLogin($this->webUser);
+    $this->drupalGet('admin/reports/dblog');
+    $this->assertResponse(403);
+
+    // Assert the events are logged in the dblog reports.
+    $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'page not found'")->fetchField(), 1);
+    $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'access denied'")->fetchField(), 1);
+
+    // Login as admin and enable suppress_404 to avoid logging the 404 event.
+    $this->drupalLogin($this->adminUser);
+    $edit = ['suppress_404' => TRUE];
+    $this->drupalPostForm('admin/config/search/redirect/settings', $edit, 'Save configuration');
+
+    // Cause again a page not found and an access denied event.
+    $this->drupalGet('page-not-found');
+    $this->assertResponse(404);
+    $this->drupalLogin($this->webUser);
+    $this->drupalGet('admin/reports/dblog');
+    $this->assertResponse(403);
+
+    // Assert only the new access denied event is logged now.
+    $this->drupalLogin($this->adminUser);
+    $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'page not found'")->fetchField(), 1);
+    $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'access denied'")->fetchField(), 2);
+
+  }
+}