Newer
Older
use App\MetaGer;
use App\models\parserSkripte\RlvProduct;
use Illuminate\Http\Request;
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->fullRunTest();
$this->specialSearchTest();
$this->specialSumaTest();
$this->getHostCountTest();
$this->addLinkTest();
$this->adjustFocusTest();
$this->checkCanNotSitesearchTest();
$this->isBildersucheTest();
$this->loadMiniSucherTest();
$this->getImageProxyLinkTest();
$this->showQuicktipsTest();
$this->popAdTest();
$this->productsTest();
}
// Führt alle Schritte einer normalen MetaGer Suche durch
// Es werden keine bestimmten Werte erwartet, nur dass das Programm nicht abstürzt
{
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$metager->createSearchEngines($request);
$metager->rankAll();
$metager->prepareResults();
$metager->createView();
}
// Testet das erkennen von Spezialsuchen in verschiedenen Sucheingaben
$metager = $this->createSpecialSearchMetager('suchwort -blackword -site:blackhost -site:*.blackdomain site:wantsite "i want phrase"');
$this->assertEquals("wantsite", $metager->getSite());
$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"');
$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)
{
$request = new Request(['eingabe' => $eingabe]);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
// Testet, ob ein Link wirklich nur einmal hinzugefügt werden kann
{
$metager = new MetaGer();
$link = "metager.de";
$this->assertTrue($metager->addLink($link));
$this->assertFalse($metager->addLink($link));
}
// Testet die Funktionen die spezielle Sumas filtern
{
$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));
}
{
$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');
}
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);
}
// 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());
$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());
// 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));
$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));
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());
// 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());
}
// 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");
}
// 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());
// 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']);
// Prüft ob Produktergebnisse der Produktliste hinzugefügt werden
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']);
}
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);
}
/**
* 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);