From 036c1927fdc2f0092d531ca3042b5863cf4a8a24 Mon Sep 17 00:00:00 2001
From: Stefan Kalscheuer <stefan@stklcode.de>
Date: Sun, 9 Oct 2016 17:59:57 +0200
Subject: [PATCH] Simple unit test for live filter

---
 test/StatifyBlacklistTest.php | 95 +++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 test/StatifyBlacklistTest.php

diff --git a/test/StatifyBlacklistTest.php b/test/StatifyBlacklistTest.php
new file mode 100644
index 0000000..0299e21
--- /dev/null
+++ b/test/StatifyBlacklistTest.php
@@ -0,0 +1,95 @@
+<?php
+
+const ABSPATH = false;
+require_once( '../inc/statifyblacklist.class.php' );
+
+/**
+ * Class StatifyBlacklistTest
+ *
+ * PHPUnit test class for StatifyBlacklist
+ */
+class StatifyBlacklistTest extends PHPUnit_Framework_TestCase {
+
+	public function testFilter() {
+		/* Prepare Options: 2 blacklisted domains, disabled */
+		StatifyBlacklist::$_options = array(
+			'active_referer' => 0,
+			'cron_referer'   => 0,
+			'referer'        => array(
+				'example.com' => 0,
+				'example.net' => 1
+			)
+		);
+
+		/* No multisite */
+		StatifyBlacklist::$multisite = false;
+
+		/* No referer */
+		unset( $_SERVER['HTTP_REFERER'] );
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+		/* Non-blacklisted referer */
+		$_SERVER['HTTP_REFERER'] = 'http://example.org';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+		/* Blacklisted referer */
+		$_SERVER['HTTP_REFERER'] = 'http://example.com';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+		/* Blacklisted referer with path */
+		$_SERVER['HTTP_REFERER'] = 'http://example.net/foo/bar.html';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+
+		/* Activate filter and run tests again */
+		StatifyBlacklist::$_options['active_referer'] = 1;
+
+		unset( $_SERVER['HTTP_REFERER'] );
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+
+		$_SERVER['HTTP_REFERER'] = 'http://example.org';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+
+		$_SERVER['HTTP_REFERER'] = 'http://example.com';
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+
+		$_SERVER['HTTP_REFERER'] = 'http://example.net/foo/bar.html';
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+	}
+
+	public function testRegexFilter() {
+		/* Prepare Options: 2 regular expressions */
+		StatifyBlacklist::$_options = array(
+			'active_referer' => 1,
+			'cron_referer'   => 0,
+			'referer'        => array(
+				'example.[a-z]+' => 0,
+				'test' => 1
+			),
+			'referer_regexp' => 1
+		);
+
+		/* No multisite */
+		StatifyBlacklist::$multisite = false;
+
+		/* No referer */
+		unset( $_SERVER['HTTP_REFERER'] );
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+		/* Non-blacklisted referer */
+		$_SERVER['HTTP_REFERER'] = 'http://not.evil';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+		/* Blacklisted referer */
+		$_SERVER['HTTP_REFERER'] = 'http://example.com';
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+		/* Blacklisted referer with path */
+		$_SERVER['HTTP_REFERER'] = 'http://foobar.net/test/me';
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+		/* Matching both */
+		$_SERVER['HTTP_REFERER'] = 'http://example.net/test/me';
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+		/* Mathinc with wrong case */
+		$_SERVER['HTTP_REFERER'] = 'http://eXaMpLe.NeT/tEsT/mE';
+		$this->assertFalse( StatifyBlacklist::apply_blacklist_filter() );
+
+		/* Set RegExp filter to case insensitive */
+		StatifyBlacklist::$_options['referer_regexp'] = 2;
+		$this->assertTrue( StatifyBlacklist::apply_blacklist_filter() );
+	}
+
+}
\ No newline at end of file