MetaGerPhpTest.php 14.7 KB
Newer Older
Karl's avatar
Karl committed
1 2
<?php

3
use App\MetaGer;
4
use App\models\parserSkripte\RlvProduct;
5 6
use Illuminate\Http\Request;

Karl's avatar
Karl committed
7 8
class MetaGerPhpTest extends TestCase
{
Karl's avatar
Karl committed
9 10
    // Die Testfunktion die PHP Unit aufruft
    // Ruft alle anderen Untertests auf
11 12
    public function test()
    {
13 14
        $this->fullRunTest();
        $this->specialSearchTest();
15
        $this->specialSumaTest();
16
        $this->linkGeneratorTest();
17
        $this->getHostCountTest();
18 19 20
        $this->addLinkTest();
        $this->adjustFocusTest();
        $this->checkCanNotSitesearchTest();
21 22 23 24
        $this->isBildersucheTest();
        $this->loadMiniSucherTest();
        $this->getImageProxyLinkTest();
        $this->showQuicktipsTest();
25 26
        $this->popAdTest();
        $this->productsTest();
27 28
    }

Karl's avatar
Karl committed
29 30
    // Führt alle Schritte einer normalen MetaGer Suche durch
    // Es werden keine bestimmten Werte erwartet, nur dass das Programm nicht abstürzt
31
    public function fullRunTest()
32
    {
33 34
        $metager = new MetaGer();
        $request = $this->createDummyRequest();
35 36 37 38 39 40 41 42
        $metager->parseFormData($request);
        $metager->checkSpecialSearches($request);
        $metager->createSearchEngines($request);
        $metager->rankAll();
        $metager->prepareResults();
        $metager->createView();
    }

Karl's avatar
Karl committed
43
    // Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
44 45
    public function specialSearchTest()
    {
46
        $metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
47
        $this->assertEquals("wantsite", $metager->getSite());
Karl's avatar
Karl committed
48 49 50 51 52
        $this->assertContains("blackhost", $metager->getUserHostBlacklist());
        $this->assertContains("blackdomain", $metager->getUserDomainBlacklist());
        $this->assertContains("blackword", $metager->getStopWords());
        $this->assertContains("i want phrase", $metager->getPhrases());

53
        $metager = $this->createSpecialSearchMetager('site:peter:test -blackword-test -site:blackhost-test.de.nz/test ich suche nach -site:blackhost:blackhost2.cote/t?p=5 "peter ist obst-garten und -bauern"');
Karl's avatar
Karl committed
54 55 56 57 58 59 60
        $this->assertEquals("peter:test", $metager->getSite());
        $this->assertContains("blackhost:blackhost2.cote/t?p=5", $metager->getUserHostBlacklist());
        $this->assertContains("blackhost-test.de.nz/test", $metager->getUserHostBlacklist());
        $this->assertContains("blackword-test", $metager->getStopWords());
        $this->assertNotContains("bauern", $metager->getStopWords());
        $this->assertContains("peter ist obst-garten und -bauern", $metager->getPhrases());

61 62
        $metager = $this->createSpecialSearchMetager('-site:-site:*.test');
        $this->assertContains("-site:*.test", $metager->getUserHostBlacklist());
Karl's avatar
Karl committed
63

64 65
        $metager = $this->createSpecialSearchMetager('"-site:-site:*.test"');
        $this->assertContains("-site:-site:*.test", $metager->getPhrases());
66

67 68
        $metager = $this->createSpecialSearchMetager('site:wikipedia.de apfel site:test.de tomate');
        $this->assertEquals("apfel tomate", $metager->getQ());
69
        $this->assertEquals("test.de", $metager->getSite());
70 71 72 73

        $metager = $this->createSpecialSearchMetager('site:wikipedia.de');
        $this->assertEquals("", $metager->getQ());
        $this->assertEquals("wikipedia.de", $metager->getSite());
74 75 76 77
    }

    public function createSpecialSearchMetager($eingabe)
    {
Karl's avatar
Karl committed
78
        $metager = new MetaGer();
79
        $request = new Request(['eingabe' => $eingabe]);
Karl's avatar
Karl committed
80 81
        $metager->parseFormData($request);
        $metager->checkSpecialSearches($request);
82
        return $metager;
83 84
    }

Karl's avatar
Karl committed
85
    // Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
86
    public function addLinkTest()
87
    {
88 89 90 91
        $metager = new MetaGer();
        $link    = "metager.de";
        $this->assertTrue($metager->addLink($link));
        $this->assertFalse($metager->addLink($link));
92 93
    }

Karl's avatar
Karl committed
94
    // Testet die Funktionen die spezielle Sumas filtern
95
    public function specialSumaTest()
96
    {
97 98 99
        $metager = new MetaGer();
        $suma    = new SimpleXMLElement("<suma></suma>");

100 101
        $suma["name"] = "qualigo";
        $this->assertTrue($metager->sumaIsAdsuche($suma, false));
102 103 104 105 106 107 108 109 110 111 112 113 114 115
        $suma["name"] = "similar_product_ads";
        $this->assertTrue($metager->sumaIsAdsuche($suma, false));
        $suma["name"] = "rlvproduct";
        $this->assertTrue($metager->sumaIsAdsuche($suma, false));
        $suma["name"] = "overtureAds";
        $this->assertTrue($metager->sumaIsAdsuche($suma, false));
        $suma["name"] = "overtureAds";
        $this->assertFalse($metager->sumaIsAdsuche($suma, true));
        $suma["name"] = "bing";
        $this->assertFalse($metager->sumaIsAdsuche($suma, false));

        $this->assertFalse($metager->sumaIsDisabled($suma));
        $suma["disabled"] = "0";
        $this->assertFalse($metager->sumaIsDisabled($suma));
116 117
        $suma["disabled"] = "1";
        $this->assertTrue($metager->sumaIsDisabled($suma));
118

119 120
        $suma["name"] = 'overture';
        $this->assertTrue($metager->sumaIsOverture($suma));
121 122 123 124 125 126 127 128 129 130 131
        $suma["name"] = 'overtureAds';
        $this->assertTrue($metager->sumaIsOverture($suma));
        $suma["name"] = 'bing';
        $this->assertFalse($metager->sumaIsOverture($suma));

        $suma["name"] = 'qualigo';
        $this->assertFalse($metager->sumaIsNotAdsuche($suma));
        $suma["name"] = 'similar_product_ads';
        $this->assertFalse($metager->sumaIsNotAdsuche($suma));
        $suma["name"] = 'overtureAds';
        $this->assertFalse($metager->sumaIsNotAdsuche($suma));
132 133 134 135
        $suma["name"] = 'bing';
        $this->assertTrue($metager->sumaIsNotAdsuche($suma));
    }

Karl's avatar
Karl committed
136
    // Testet die Generatoren für spezielle Links
137
    public function linkGeneratorTest()
138
    {
139 140 141
        $metager = new Metager();
        $request = new Request(['eingabe' => 'test']);
        $metager->parseFormData($request);
142 143 144 145 146 147 148
        $this->containCallbackTester($metager, "generateSearchLink", ["news"],
            'focus=news');
        $this->containCallbackTester($metager, "generateQuicktipLink", [],
            '/qt');
        $this->containCallbackTester($metager, "generateSiteSearchLink", ["wolf.de"],
            'site%3Awolf.de');
        $this->containCallbackTester($metager, "generateRemovedHostLink", ["wolf.de"],
149
            '-site%3Awolf.de');
150
        $this->containCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
151
            '-site%3A%2A.wolf.de');
152 153
    }

Karl's avatar
Karl committed
154
    // Prüft ob der Host Count funktioniert
155 156 157
    public function getHostCountTest()
    {
        $metager = new MetaGer();
158 159 160 161
        $host    = "host.de";
        $before  = $metager->getHostCount($host);
        $metager->addHostCount($host);
        $after = $metager->getHostCount($host);
162 163
        $this->assertEquals($before + 1, $after);
        $before = $after;
164 165
        $metager->addHostCount($host);
        $after = $metager->getHostCount($host);
166 167 168
        $this->assertEquals($before + 1, $after);
    }

Karl's avatar
Karl committed
169
    // Prüft ob bei passender Einstellung der Sumas der Fokus automatisch umgestellt wird
170 171 172 173 174 175 176 177 178 179
    public function adjustFocusTest()
    {
        $metager = new MetaGer();
        $request = new Request(["focus" => "web"]);
        $metager->parseFormData($request);
        $this->assertEquals("web", $metager->getFokus());
        $sumas                = simplexml_load_file("tests/testSumas.xml")->xpath("suma"); # Eine spezielle test sumas.xml
        $enabledSearchengines = $sumas;
        $metager->adjustFocus($sumas, $enabledSearchengines);
        $this->assertEquals("bilder", $metager->getFokus());
Karl's avatar
Karl committed
180 181 182 183 184 185 186 187 188

        $metager = new MetaGer();
        $request = new Request(["focus" => "web"]);
        $metager->parseFormData($request);
        $this->assertEquals("web", $metager->getFokus());
        $sumas                = simplexml_load_file("tests/testSumas2.xml")->xpath("suma"); # Eine spezielle test sumas.xml
        $enabledSearchengines = array_slice($sumas, 0, 1);
        $metager->adjustFocus($sumas, $enabledSearchengines);
        $this->assertEquals("bilder", $metager->getFokus());
189 190
    }

Karl's avatar
Karl committed
191
    // Prüft ob das fehlen einer Suchmaschine mit Seitensuche erkannt wird
192 193 194 195 196
    public function checkCanNotSitesearchTest()
    {
        $metager              = new MetaGer();
        $enabledSearchengines = simplexml_load_file("tests/testSumas.xml")->xpath("suma"); # Eine spezielle test sumas.xml
        $this->assertFalse($metager->checkCanNotSitesearch($enabledSearchengines));
Karl's avatar
Karl committed
197 198 199 200 201 202 203 204

        $metager = new MetaGer();
        $request = $this->createDummyRequest();
        $metager->parseFormData($request);
        $metager->checkSpecialSearches($request);
        $this->assertEquals("wantsite", $metager->getSite());
        $enabledSearchengines = simplexml_load_file("tests/testSumas2.xml")->xpath("suma"); # Eine spezielle test sumas.xml
        $this->assertTrue($metager->checkCanNotSitesearch($enabledSearchengines));
Karl's avatar
Karl committed
205
    }
206

Karl's avatar
Karl committed
207
    // Prüft ob Bildersuchen erkannt werden
208 209 210 211 212 213
    public function isBildersucheTest()
    {
        $metager = new MetaGer();
        $request = new Request(["focus" => "bilder"]);
        $metager->parseFormData($request);
        $this->assertTrue($metager->isBildersuche());
214 215 216 217 218

        $metager = new MetaGer();
        $request = new Request(["focus" => "web"]);
        $metager->parseFormData($request);
        $this->assertFalse($metager->isBildersuche());
219 220
    }

Karl's avatar
Karl committed
221
    // Prüft ob der Link für Minisucher richtig erstellt wird
222 223 224 225 226 227 228 229 230 231
    public function loadMiniSucherTest()
    {
        $metager        = new MetaGer();
        $sumas          = simplexml_load_file("tests/testSumas.xml");
        $subcollections = ["minism1", "minism2"];
        $minisucher     = $metager->loadMiniSucher($sumas, $subcollections);
        $this->assertContains("rows=10", $minisucher["formData"]->__toString());
        $this->assertContains("fq=subcollection:%28minism1+OR+minism2%29", $minisucher["formData"]->__toString());
    }

Karl's avatar
Karl committed
232
    // Prüft ob der Link für den Image Proxy richtig erstellt wird
233 234 235 236 237 238
    public function getImageProxyLinkTest()
    {
        $metager = new MetaGer();
        $this->containCallbackTester($metager, "getImageProxyLink", ["www.bilder.de/bild1.png"], "url=www.bilder.de%2Fbild1.png");
    }

Karl's avatar
Karl committed
239
    // Prüft ob sich Quicktips korrekt ein und ausschalten lassen
240 241 242 243 244 245
    public function showQuicktipsTest()
    {
        $metager = new MetaGer();
        $request = new Request(["quicktips" => "yo"]);
        $metager->parseFormData($request);
        $this->assertFalse($metager->showQuicktips());
246 247 248 249 250

        $metager = new MetaGer();
        $request = new Request([]);
        $metager->parseFormData($request);
        $this->assertTrue($metager->showQuicktips());
251 252
    }

Karl's avatar
Karl committed
253
    // Prüft ob Werbung der Werbeliste hinzugefügt wird und ob die pop-funktion für die Werbeergebnisse funktioniert
254 255 256 257
    public function popAdTest()
    {
        $metager = new MetaGer();
        $this->assertNull($metager->popAd());
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
        $engineList = [];

        $engineXml = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
        $metager   = new MetaGer();
        $request   = new Request(["focus" => "web"]);
        $metager->parseFormData($request);
        $searchengine = new RlvProduct($engineXml[0], $metager);
        $product      = new \App\Models\Result(
            $engineXml[0],
            "Werbetitel",
            "Link",
            "Anzeigelink",
            "Beschreibung",
            "Gefunden Von",
            42,
            false,
            "image.png",
            4.2,
            "Additional Info"
        );
        $searchengine->ads[] = $product;

        $enginesList[] = $searchengine;
        $metager->combineResults($enginesList, $metager);
        $this->assertEquals("Werbetitel", $metager->popAd()['titel']);
283 284
    }

Karl's avatar
Karl committed
285
    // Prüft ob Produktergebnisse der Produktliste hinzugefügt werden
286 287 288
    public function productsTest()
    {
        $metager = new MetaGer();
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
        $this->assertFalse($metager->hasProducts());
        $this->assertEmpty($metager->getProducts());
        $engineList = [];

        $engineXml = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
        $metager   = new MetaGer();
        $request   = new Request(["focus" => "web"]);
        $metager->parseFormData($request);
        $searchengine = new RlvProduct($engineXml[0], $metager);
        $product      = new \App\Models\Result(
            $engineXml[0],
            "Produkttitel",
            "Link",
            "Anzeigelink",
            "Beschreibung",
            "Gefunden Von",
            42,
            false,
            "image.png",
            4.2,
            "Additional Info"
        );
        $searchengine->products[] = $product;

        $enginesList[] = $searchengine;
        $metager->combineResults($enginesList, $metager);
        $this->assertTrue($metager->hasProducts());
        $this->assertEquals("Produkttitel", $metager->getProducts()[0]['titel']);
    }

Karl's avatar
Karl committed
319
    // Erstellt eine Suchanfrage zu Testzwecken
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
    public function createDummyRequest()
    {
        /**
         * Constructor.
         *
         * @param array           $query      The GET parameters
         * @param array           $request    The POST parameters
         * @param array           $attributes The request attributes (parameters parsed from the PATH_INFO, ...)
         * @param array           $cookies    The COOKIE parameters
         * @param array           $files      The FILES parameters
         * @param array           $server     The SERVER parameters
         * @param string|resource $content    The raw body data
         */

        #new Request(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)

        $query                = [];
337
        $query["eingabe"]     = 'suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"';
338 339 340 341 342 343 344 345 346 347 348 349
        $query["focus"]       = "angepasst";
        $query["encoding"]    = "utf8";
        $query["lang"]        = "all";
        $query["time"]        = "1000";
        $query["sprueche"]    = "on";
        $query["resultCount"] = "20";
        $query["tab"]         = "on";
        $query["onenewspage"] = "on";

        return new Request($query);
    }

Karl's avatar
Karl committed
350 351 352 353 354 355 356 357
    /**
     * Funktion zum vereinfachen von Tests, bei denen die Ausgabe einer Funktion ein bestimmtes Objekt enthalten soll
     *
     * @param Object    $object              Das Object von dem aus die Funktion aufgerufen werden soll
     * @param String    $funcName            Der Name der Funktion
     * @param array     $input               Die Eingaben für die Funktion
     * @param mixed     $expectedInOutput    Etwas das im Funktionsergebnis erwartet wird (meist ein String)
     */
358 359 360 361
    public function containCallbackTester($object, $funcName, $input, $expectedInOutput)
    {
        $output = call_user_func_array(array($object, $funcName), $input);
        $this->assertContains($expectedInOutput, $output);
362
    }
Karl's avatar
Karl committed
363
}