Skip to content
Snippets Groups Projects
MetaGerPhpTest.php 14.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Karl's avatar
    Karl committed
    <?php
    
    
    use App\models\parserSkripte\RlvProduct;
    
    Karl's avatar
    Karl committed
    class MetaGerPhpTest extends TestCase
    {
    
    Karl's avatar
    Karl committed
        // Die Testfunktion die PHP Unit aufruft
        // Ruft alle anderen Untertests auf
    
            $this->fullRunTest();
            $this->specialSearchTest();
    
            $this->linkGeneratorTest();
    
            $this->addLinkTest();
            $this->adjustFocusTest();
            $this->checkCanNotSitesearchTest();
    
            $this->isBildersucheTest();
            $this->loadMiniSucherTest();
            $this->getImageProxyLinkTest();
            $this->showQuicktipsTest();
    
            $this->popAdTest();
            $this->productsTest();
    
    Karl's avatar
    Karl committed
        // Führt alle Schritte einer normalen MetaGer Suche durch
        // Es werden keine bestimmten Werte erwartet, nur dass das Programm nicht abstürzt
    
        public function fullRunTest()
    
            $metager = new MetaGer();
            $request = $this->createDummyRequest();
    
            $metager->parseFormData($request);
            $metager->checkSpecialSearches($request);
            $metager->createSearchEngines($request);
            $metager->rankAll();
            $metager->prepareResults();
            $metager->createView();
        }
    
    
    Karl's avatar
    Karl committed
        // Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
    
        public function specialSearchTest()
        {
    
            $metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
    
            $this->assertEquals("wantsite", $metager->getSite());
    
    Karl's avatar
    Karl committed
            $this->assertContains("blackhost", $metager->getUserHostBlacklist());
            $this->assertContains("blackdomain", $metager->getUserDomainBlacklist());
            $this->assertContains("blackword", $metager->getStopWords());
            $this->assertContains("i want phrase", $metager->getPhrases());
    
    
            $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
            $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());
    
    
            $metager = $this->createSpecialSearchMetager('-site:-site:*.test');
            $this->assertContains("-site:*.test", $metager->getUserHostBlacklist());
    
            $metager = $this->createSpecialSearchMetager('"-site:-site:*.test"');
            $this->assertContains("-site:-site:*.test", $metager->getPhrases());
    
            $metager = $this->createSpecialSearchMetager('site:wikipedia.de apfel site:test.de tomate');
            $this->assertEquals("apfel tomate", $metager->getQ());
    
            $this->assertEquals("test.de", $metager->getSite());
    
    
            $metager = $this->createSpecialSearchMetager('site:wikipedia.de');
            $this->assertEquals("", $metager->getQ());
            $this->assertEquals("wikipedia.de", $metager->getSite());
    
        }
    
        public function createSpecialSearchMetager($eingabe)
        {
    
    Karl's avatar
    Karl committed
            $metager = new MetaGer();
    
            $request = new Request(['eingabe' => $eingabe]);
    
    Karl's avatar
    Karl committed
            $metager->parseFormData($request);
            $metager->checkSpecialSearches($request);
    
            return $metager;
    
    Karl's avatar
    Karl committed
        // Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
    
        public function addLinkTest()
    
            $metager = new MetaGer();
            $link    = "metager.de";
            $this->assertTrue($metager->addLink($link));
            $this->assertFalse($metager->addLink($link));
    
    Karl's avatar
    Karl committed
        // Testet die Funktionen die spezielle Sumas filtern
    
        public function specialSumaTest()
    
            $metager = new MetaGer();
            $suma    = new SimpleXMLElement("<suma></suma>");
    
    
            $suma["name"] = "qualigo";
            $this->assertTrue($metager->sumaIsAdsuche($suma, false));
    
            $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));
    
            $suma["disabled"] = "1";
            $this->assertTrue($metager->sumaIsDisabled($suma));
    
            $suma["name"] = 'overture';
            $this->assertTrue($metager->sumaIsOverture($suma));
    
            $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));
    
            $suma["name"] = 'bing';
            $this->assertTrue($metager->sumaIsNotAdsuche($suma));
        }
    
    
    Karl's avatar
    Karl committed
        // Testet die Generatoren für spezielle Links
    
        public function linkGeneratorTest()
    
            $metager = new Metager();
            $request = new Request(['eingabe' => 'test']);
            $metager->parseFormData($request);
    
            $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"],
    
            $this->containCallbackTester($metager, "generateRemovedDomainLink", ["wolf.de"],
    
                '-site%3A%2A.wolf.de');
    
    Karl's avatar
    Karl committed
        // Prüft ob der Host Count funktioniert
    
        public function getHostCountTest()
        {
            $metager = new MetaGer();
    
            $host    = "host.de";
            $before  = $metager->getHostCount($host);
            $metager->addHostCount($host);
            $after = $metager->getHostCount($host);
    
            $this->assertEquals($before + 1, $after);
            $before = $after;
    
            $metager->addHostCount($host);
            $after = $metager->getHostCount($host);
    
            $this->assertEquals($before + 1, $after);
        }
    
    
    Karl's avatar
    Karl committed
        // Prüft ob bei passender Einstellung der Sumas der Fokus automatisch umgestellt wird
    
        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
    
            $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());
    
    Karl's avatar
    Karl committed
        // Prüft ob das fehlen einer Suchmaschine mit Seitensuche erkannt wird
    
        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
    
            $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
        }
    
    Karl's avatar
    Karl committed
        // Prüft ob Bildersuchen erkannt werden
    
        public function isBildersucheTest()
        {
            $metager = new MetaGer();
            $request = new Request(["focus" => "bilder"]);
            $metager->parseFormData($request);
            $this->assertTrue($metager->isBildersuche());
    
    
            $metager = new MetaGer();
            $request = new Request(["focus" => "web"]);
            $metager->parseFormData($request);
            $this->assertFalse($metager->isBildersuche());
    
    Karl's avatar
    Karl committed
        // Prüft ob der Link für Minisucher richtig erstellt wird
    
        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
        // Prüft ob der Link für den Image Proxy richtig erstellt wird
    
        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
        // Prüft ob sich Quicktips korrekt ein und ausschalten lassen
    
        public function showQuicktipsTest()
        {
            $metager = new MetaGer();
            $request = new Request(["quicktips" => "yo"]);
            $metager->parseFormData($request);
            $this->assertFalse($metager->showQuicktips());
    
    
            $metager = new MetaGer();
            $request = new Request([]);
            $metager->parseFormData($request);
            $this->assertTrue($metager->showQuicktips());
    
    Karl's avatar
    Karl committed
        // Prüft ob Werbung der Werbeliste hinzugefügt wird und ob die pop-funktion für die Werbeergebnisse funktioniert
    
        public function popAdTest()
        {
            $metager = new MetaGer();
            $this->assertNull($metager->popAd());
    
            $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']);
    
    Karl's avatar
    Karl committed
        // Prüft ob Produktergebnisse der Produktliste hinzugefügt werden
    
        public function productsTest()
        {
            $metager = new MetaGer();
    
            $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
        // Erstellt eine Suchanfrage zu Testzwecken
    
        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                = [];
    
            $query["eingabe"]     = 'suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"';
    
            $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
        /**
         * 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)
         */
    
        public function containCallbackTester($object, $funcName, $input, $expectedInOutput)
        {
            $output = call_user_func_array(array($object, $funcName), $input);
            $this->assertContains($expectedInOutput, $output);
    
    Karl's avatar
    Karl committed
    }