Commit a34831c0 authored by Dominik Hebeler's avatar Dominik Hebeler

Merge branch '879-create-and-use-php-unit-tests' into 'development'

Resolve "Create and use PHP Unit Tests"

Closes #879

See merge request !1431
parents c17f6f3b 9047e3f7
......@@ -94,31 +94,4 @@ update(metager3.de):
- which php
- which sqlite3
script:
# Pfad zum neu geklonten Repo
- path=`pwd`
- cd ~/
- if [ -d MetaGer_neu ]; then rm -rf MetaGer_neu;fi
- git clone "$path" MetaGer_neu
- cd MetaGer_neu
- composer install
- scp -P 63824 metager@metager3.de:~/.env .
- scp -P 63824 metager@metager3.de:~/sumas.json config/
- scp -P 63824 metager@metager3.de:~/sumasEn.json config/
- scp -P 63824 metager@metager3.de:~/blacklistUrl.txt config/
- scp -P 63824 metager@metager3.de:~/blacklistDomains.txt config/
- touch storage/logs/laravel.log
- touch storage/logs/worker.log
- touch database/metager.sqlite
- chmod 777 config/sumas.json config/sumas.json database/metager.sqlite
- chmod -R 777 storage
- chmod -R 777 bootstrap/cache
- npm install
- npm run production
- php artisan migrate --force
- php artisan requests:gather
- if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi
- cd ~/
- while [ -d ~/MetaGer ]; do rm -rf ~/MetaGer;done
- mv MetaGer_neu MetaGer
- sudo pkill --signal SIGHUP supervisord
- php ~/MetaGer/artisan up
\ No newline at end of file
- sh build.sh
\ No newline at end of file
#!/bin/bash
# Pfad zum neu geklonten Repo
path=`pwd`
cd ~/
if [ -d MetaGer_neu ]; then rm -rf MetaGer_neu;fi
git clone "$path" MetaGer_neu
cd MetaGer_neu
composer install
scp -P 63824 metager@metager3.de:~/.env .
scp -P 63824 metager@metager3.de:~/sumas.json config/
scp -P 63824 metager@metager3.de:~/sumasEn.json config/
scp -P 63824 metager@metager3.de:~/blacklistUrl.txt config/
scp -P 63824 metager@metager3.de:~/blacklistDomains.txt config/
scp -P 63824 metager@metager3.de:~/adBlacklistUrl.txt config/
scp -P 63824 metager@metager3.de:~/adBlacklistDomains.txt config/
touch storage/logs/laravel.log
touch storage/logs/worker.log
touch database/metager.sqlite
chmod 777 config/sumas.json config/sumas.json database/metager.sqlite
chmod -R 777 storage
chmod -R 777 bootstrap/cache
npm install
npm run production
php artisan migrate --force
php artisan requests:gather
if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi
cd ~/
while [ -d ~/MetaGer ]; do rm -rf ~/MetaGer;done
mv MetaGer_neu MetaGer
sudo pkill --signal SIGHUP supervisord
php ~/MetaGer/artisan up
\ No newline at end of file
......@@ -9,6 +9,7 @@
"license": "MIT",
"require": {
"php": "^7.1.3",
"facebook/webdriver": "^1.6",
"fideloper/proxy": "^4.0",
"globalcitizen/php-iban": "^2.6",
"jenssegers/agent": "^2.6",
......@@ -65,4 +66,4 @@
"@php artisan key:generate --ansi"
]
}
}
\ No newline at end of file
}
......@@ -30,6 +30,6 @@ Das können Sie mit einer Spende auf dieser Seite tun. Oder, wenn Sie freie Such
<a href="https://metager.de/beitritt" target="_blank" rel="noopener">Werden Sie Mitglied im Trägerverein von MetaGer, dem SUMA-EV.</a>',
'about.3' => 'Für Spenden können Sie unser <a href="/spende" rel="noopener" target="_blank">Spendenformular</a> nutzen. Oder werden Sie Mitglied (<a href="http://suma-ev.de/" target="_blank" rel="noopener">Zum Aufnahmeantrag</a>);Sie haben dann die Möglichkeit, auf den Seiten des SUMA-EV gegebenfalls Ihr Logo mit einem kurzen Text unterzubringen. Wie das aussieht, sehen Sie hier: <a href="https://suma-ev.de/suma-links/index.html#sponsors" target="_blank" rel="noopener">Sponsorenseite</a> und auch auf dieser Seite: <a href="https://suma-ev.de/mitglieder/index.html" target="_blank" rel="noopener">SUMA-EV Mitglieder</a>. Oder <a href="/spende" target="_blank" rel="noopener">werden Sie SUMA-EV Förderer!</a>',
'about.4' => '<a href="https://suma-ev.de/unterstuetzung/index.html" target="_blank" rel="noopener">JEDE Form Ihrer Unterstützung</a> hilft mit, dass freie Suchmaschinen und freier Wissenszugang im Internet eine Chance haben. Zum freien Wissenszugang gehört es auch, dass Ihre Daten weder überwacht, noch Ihre Internet-Adressen und Verbindungsdaten gespeichert werden. Bei uns wird Ihre Internet-Adresse bereits während der Suche anonymisiert, sie wird nicht gespeichert und nicht an Dritte weitergegeben. Freie Internet-Suche ohne Überwachung: <a href="/" target="_blank" rel="noopener">MetaGer.de!</a>',
'about.5' => 'Eine weitere Möglichkeit, MetaGer zu fördern, besteht darin, dass Sie Ihren nächsten Online-Einkauf bei MetaGer-Fördershops machen. Damit wir auf diesem Weg unterstützt werden können, haben wir uns in das Netzwerk zur Förderung gemeinnützig anerkannter Organisationen eingebracht, das Projekt <a href="https://www.boost-project.com/de" target="_blank" rel="noopener">www.boost-project.com</a> Unter dem Dach dieses Projektes sind ca. 400 Online-Shops (von 1und1 bis Zooplus) vereint, die sich bereit erklärt haben, von allen Verkäufen etwa 6% an das Projekt zu spenden. Statt wie bisher direkt zum Online-Shop zu surfen, gehen Sie zunächst auf <a href="/" target="_blank" rel="noopener">MetaGer.de!</a> und klicken dort oben in der Navigationsleiste auf "Fördern", dann auf <a href="https://www.boost-project.com/de/shops?charity_id=1129&amp;tag=bl" target="_blank" rel="noopener">"Einkaufen bei MetaGer Fördershops"</a>. Dieser Klick führt Sie in die Shop-Auswahl des Boost-Projektes. Dort suchen Sie sich Ihren Shop aus und machen wie gewohnt Ihren Einkauf. Oder klicken Sie für Einkäufe aus dem Bereich Schreibwaren, Büro- und Geschenkartikel direkt auf <a href="https://www.gladizon.com/" target="_blank" rel="noopener">www.gladizon.com</a>. Das ist alles. Wenn genug Menschen dies tun, dann brauchen wir keine Werbung mehr. Nur zwei Mausklicks für Sie - für alle eine Chance für den freien Wissenszugang in der digitalen Welt.',
'about.5' => 'Eine weitere Möglichkeit, MetaGer zu fördern, besteht darin, dass Sie Ihren nächsten Online-Einkauf bei MetaGer-Fördershops machen. Damit wir auf diesem Weg unterstützt werden können, haben wir uns in das Netzwerk zur Förderung gemeinnützig anerkannter Organisationen eingebracht, das Projekt <a href="https://www.wecanhelp.de/430159004" target="_blank" rel="noopener">www.wecanhelp.de</a> Unter dem Dach dieses Projektes sind ca. 400 Online-Shops (von 1und1 bis Zooplus) vereint, die sich bereit erklärt haben, von allen Verkäufen etwa 6% an das Projekt zu spenden. Statt wie bisher direkt zum Online-Shop zu surfen, gehen Sie zunächst auf <a href="/" target="_blank" rel="noopener">MetaGer.de!</a> und klicken dort oben in der Navigationsleiste auf "Fördern", dann auf <a href="https://www.wecanhelp.de/430159004" target="_blank" rel="noopener">"Einkaufen bei MetaGer Fördershops"</a>. Dieser Klick führt Sie in die Shop-Auswahl des Boost-Projektes. Dort suchen Sie sich Ihren Shop aus und machen wie gewohnt Ihren Einkauf. Oder klicken Sie für Einkäufe aus dem Bereich Schreibwaren, Büro- und Geschenkartikel direkt auf <a href="https://www.gladizon.com/" target="_blank" rel="noopener">www.gladizon.com</a>. Das ist alles. Wenn genug Menschen dies tun, dann brauchen wir keine Werbung mehr. Nur zwei Mausklicks für Sie - für alle eine Chance für den freien Wissenszugang in der digitalen Welt.',
];
......@@ -27,5 +27,5 @@ return [
"about.4" => "<a href=\"https://suma-ev.de/en/support/index.html\" target=\"_blank\" rel=\"noopener\">Any type of support</a> helps open search engines and open knowledge access to have a chance on the Internet. Open Knowledge access also includes that neither your information is monitored, nor your Internet adresses and connection data is collected. We anonymise your Internet adress during search, it is not stored and not passed on. Open Internet search without surveillance: <a href=\"/en/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a>",
"about.5" => "Another possibility to help MetaGer is to make your next online purchase via a MetaGer support shop. We became part of the <a href=\"https://www.boost-project.com/de\" target=\"_blank\" rel=\"noopener\">www.boost-project.com</a> to be able to be supported this way. The project unites around 700 online shops (from Amazon to Zooplus), that all declared to donate around 6% of every sale. Instead of directly browsing the online shop, use this link next time: <a href=\"/en/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a> and click below the search term box on <a href=\"https://www.boost-project.com/de/shops?charity_id=1129&tag=bl\" target=\"_blank\" rel=\"noopener\">\"Purchase at affiliate shop\" - click here!</a> This click brings you to the boost project shop selection. There you choose your shop and keep on shopping as usual. That is all. If enough people do this, we do not need ads anymore. Just two clicks for you - a chance for open knowledge access for the digital world.",
"about.5" => "Another possibility to help MetaGer is to make your next online purchase via a MetaGer support shop. We became part of the <a href=\"https://www.wecanhelp.de/430159004\" target=\"_blank\" rel=\"noopener\">www.wecanhelp.de</a> to be able to be supported this way. The project unites around 700 online shops (from Amazon to Zooplus), that all declared to donate around 6% of every sale. Instead of directly browsing the online shop, use this link next time: <a href=\"/en/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a> and click below the search term box on <a href=\"https://www.wecanhelp.de/430159004\" target=\"_blank\" rel=\"noopener\">\"Purchase at affiliate shop\" - click here!</a> This click brings you to the boost project shop selection. There you choose your shop and keep on shopping as usual. That is all. If enough people do this, we do not need ads anymore. Just two clicks for you - a chance for open knowledge access for the digital world.",
];
......@@ -30,7 +30,7 @@ return [
"about.2" => "El motor de búsqueda alemán MetaGer maneja y desarrolla el SUME-EV asociación para el acceso libre al conocimiento. Somos aprobados como asociación sin fines de lucro, una de nuestras metas es el desarrollo y el manejo de buscadores. No recibimos dinero de entidades estatales y por esto somos dependiente de sus donaciones. Hemos reducido considerablemente la cantidad de anuncios y confiamos en SU apoyo. Ayuda usted que buscadores libres se mantienen en el internet y que pueden crecer. Lo puede hacer con una donación en nuestro sitio. O si quiere apoyarnos a largo plazo: <a href=\"https://metager.de/klassik/bform1.htm\" target=\"_blank\" rel=\"noopener\"> puede convertirse en miembro del SUME-EV</a>",
"about.3" => 'Por donaciónes individuales puede usar nuestro <a href="https://metager.de/spende" rel="noopener" target="_blank">formulario de donación</a>. Si usted dona 100,- Euro o mas, o si se hace miembro del <a href=\"http://suma-ev.de/\" target=\"_blank\" rel=\"noopener\">SUMA-EV</a>, entonces usted puede, si quiere ser mencionado en nuestra <a href=\"http://suma-ev.de/suma-links/index.html#sponsors\" target=\"_blank\" rel=\"noopener\">hoja de miembros y esponsores e</a> con un hipervínculo a su página web (en caso que tiene una). Si quiere esto, por favor menciónalo en la casilla de mensaje <a href=\"https://metager.de/klassik/spenden1.html\" target=\"_blank\" rel=\"noopener\"> o hágase promotor del SUMA-EV!</a>. ',
"about.4" => "<a href=\"http://suma-ev.de/unterstuetzung/index.html\" target=\"_blank\" rel=\"noopener\">Cualquier forma de apoyo</a> ayuda, que buscadores libres y acceso libre al conocimiento en el internet tienen un futuro. Parte del acceso libre al conocimiento es, que ni sus datos no están supervisados ni guardados, ni su dirección del internet o los datos de su conectividad. Con nosotros su dirección de internet esta anónimo durante la búsqueda, no sera guardado y no sera proporcionando a terceros. Búsqueda libre en el internet sin monitoréo: <a href=\"https://metager.de/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a>",
"about.5" => "Otra posibilidad de apoyar MetaGer es, hacer su próxima compra en linea en una tienda patrocinadora de MetaGer. Para poder recibir ayuda por esta vía nos hemos hecho miembros de la red de organizaciones sin fines de lucro <a href=\"https://www.boost-project.com/de\" target=\"_blank\" rel=\"noopener\">www.boost-project.com</a>. Bajo del techo del proyecto hay aprox. 400 tiendas en linea unidas (desde Amazon hasta Zooplus), que están de acuerdo donar 6% de las ventas a nuestro proyecto. En ves de navegar directamente a la tienda en linea, busca primero nuestra página <a href=\"https://metager.de/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a> y haga click debajo de la casilla de búsqueda en <a href=\"https://www.boost-project.com/de/shops?charity_id=1129&amp;tag=bl\" target=\"_blank\" rel=\"noopener\">¡Haga sus compras en tiendas patrocinadoras - click aquí!</a>. Este click le lleva a la seleccion de tiendas en el proyecto Boost. Allí seleciona la tienda en linea y hace su compra como siempre. Esto es todo. Si suficiente gente hace esto, ya no necesitamos poner promociones en las búsquedas. Solo dos clicks para usted - para todos acceso libre al conocimiento en el mundo digital.",
"about.5" => "Otra posibilidad de apoyar MetaGer es, hacer su próxima compra en linea en una tienda patrocinadora de MetaGer. Para poder recibir ayuda por esta vía nos hemos hecho miembros de la red de organizaciones sin fines de lucro <a href=\"https://www.wecanhelp.de/430159004\" target=\"_blank\" rel=\"noopener\">www.wecanhelp.de</a>. Bajo del techo del proyecto hay aprox. 400 tiendas en linea unidas (desde Amazon hasta Zooplus), que están de acuerdo donar 6% de las ventas a nuestro proyecto. En ves de navegar directamente a la tienda en linea, busca primero nuestra página <a href=\"https://metager.de/\" target=\"_blank\" rel=\"noopener\">MetaGer.de!</a> y haga click debajo de la casilla de búsqueda en <a href=\"https://www.wecanhelp.de/430159004\" target=\"_blank\" rel=\"noopener\">¡Haga sus compras en tiendas patrocinadoras - click aquí!</a>. Este click le lleva a la seleccion de tiendas en el proyecto Boost. Allí seleciona la tienda en linea y hace su compra como siempre. Esto es todo. Si suficiente gente hace esto, ya no necesitamos poner promociones en las búsquedas. Solo dos clicks para usted - para todos acceso libre al conocimiento en el mundo digital.",
"danke.title" => "¡Muchas gracias!! Hemos recibido su informacion de donación para MetaGer al SUME-EV.",
"danke.nachricht" => "En caso que nos ha enviado datos de contacto, pronto va recibir un mensaje personalizado.",
"danke.kontrolle" => "Hemos recibido el siguiente mensaje:",
......
......@@ -18,8 +18,8 @@
<div class="card-heavy">
<h2>Online-Einkauf - MetaGer nebenbei unterstützen</h2>
<p>Sie können MetaGer einfach nebenbei unterstützen, indem Sie bei Ihrem nächsten Online-Einkauf folgendes tun:</p>
<p>Statt wie bisher direkt zum Online-Shop zu surfen, gehen Sie zunächst auf: <a href="https://www.boost-project.com/de/shops?charity_id=1129&tag=bl">MetaGer-Fördershops</a>.</p>
<p>Statt wie bisher direkt zum Online-Shop zu surfen, gehen Sie zunächst auf: <a href="https://www.wecanhelp.de/430159004">MetaGer-Fördershops</a>.</p>
<p>Dieser Klick führt Sie in die Shop-Auswahl des Boost-Projectes. Dort suchen Sie sich Ihren Shop aus und machen wie gewohnt Ihren Einkauf. Das ist alles. Wenn genug Menschen dies tun, dann brauchen wir keine Werbung mehr. Nur zwei Mausklicks für Sie - für alle eine Chance für den freien Wissenszugang in der digitalen Welt.</p>
<p>Damit wir auf diesem Weg unterstützt werden können, haben wir uns in das Netzwerk zur Förderung gemeinnützig anerkannter Organisationen eingebracht, das Projekt <a href="http://www.boost-project.com/">www.boost-project.com</a>. Unter dem Dach dieses Projektes sind ca. 400 Online-Shops (von Amazon bis Zooplus) vereint, die sich bereit erklärt haben, von allen Verkäufen 6% an das Projekt zu spenden.</p>
<p>Damit wir auf diesem Weg unterstützt werden können, haben wir uns in das Netzwerk zur Förderung gemeinnützig anerkannter Organisationen eingebracht, das Projekt <a href="https://www.wecanhelp.de/430159004">www.wecanhelp.de</a>. Unter dem Dach dieses Projektes sind ca. 400 Online-Shops (von Amazon bis Zooplus) vereint, die sich bereit erklärt haben, von allen Verkäufen 6% an das Projekt zu spenden.</p>
</div>
@endsection
......@@ -107,7 +107,7 @@
</li>
@endif
<li>
<a class="outlink" href="https://www.boost-project.com/de/shops?charity_id=1129&amp;tag=bl" >{{ trans('sidebar.nav17') }}</a>
<a class="outlink" href="https://www.wecanhelp.de/430159004" >{{ trans('sidebar.nav17') }}</a>
</li>
</ul>
</li>
......
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__ . '/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}
<?php
namespace Tests\Feature;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Tests\TestCase;
class StaticPagesTest extends TestCase
{
private $caps = array(
"browser" => "Firefox",
"browser_version" => "67.0 beta",
"browserstack.local" => "true",
"os" => "Windows",
"os_version" => "10",
"resolution" => "1920x1080",
);
private $webdriver;
private $mgServer = "http://localhost";
/**
* A basic feature test example.
*
* @return void
*/
public function testExample()
{
try {
$this->webdriver = RemoteWebDriver::create(
getenv("WEBDRIVER_URL"),
$this->caps
);
$this->startPageTest();
$this->navigationMenuTest();
} finally {
$this->webdriver->quit();
}
}
private function startPageTest()
{
$this->webdriver->get("http://localhost");
# Test for Page Title
$this->assertEquals($this->webdriver->getTitle(), "MetaGer - Mehr als eine Suchmaschine");
# Test for Partner Links
$elements = $this->webdriver->findElements(WebDriverBy::cssSelector("#s .sr > a"));
$this->assertCount(2, $elements);
}
/**
* Tests if the Navigation menu expands on click
* Checks the status code of every link in it
*/
private function navigationMenuTest()
{
$this->webdriver->get("http://localhost");
// Check if the Navigation menu expands on click
$sidebarToggle = $this->webdriver->findElement(WebDriverBy::cssSelector("label[for=sidebarToggle]"));
$sidebarToggle->click();
$this->webdriver->wait(5, 500)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::cssSelector(".sidebar > a.sidebar-logo"))
);
// Navigationbar is working
// Let's test if the Links are reachable
$elements = $this->webdriver->findElements(WebdriverBy::cssSelector(".sidebar > .sidebar-list a"));
$this->assertIsArray($elements);
$this->assertGreaterThan(0, sizeof($elements));
foreach ($elements as $element) {
$link = $element->getAttribute("href");
$ch = curl_init($link);
$httpcode = 0;
try {
curl_setopt($ch, CURLOPT_HEADER, true); // we want headers
//curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
} finally {
curl_close($ch);
}
$this->assertTrue($httpcode >= 200 && $httpcode < 400, "Status Code (" . $httpcode . ") of " . $link . " doesn't match!");
}
// Check if the Navigation menu hides on click
$sidebarToggle->click();
$this->webdriver->wait(5, 500)->until(
WebDriverExpectedCondition::invisibilityOfElementLocated(WebDriverBy::cssSelector(".sidebar > a.sidebar-logo"))
);
}
}
This diff is collapsed.
<?php
use App\MetaGer;
use App\Models\Result;
use Illuminate\Http\Request;
class ResultPhpTest extends TestCase
{
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->rankingTest();
$this->isValidTest();
$this->linkGeneratorsTest();
}
// Liefert ein standard Suchergebnis
public function getDummyResult()
{
$provider = file_get_contents("tests/testSumas.xml");
$titel = "Titel";
$link = "link.de";
$anzeigeLink = "link.de/anzeige";
$descr = "Beschreibung: i want phrase
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
$gefVon = "";
$sourceRank = 1;
return new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
}
// Liefert eine standard MetaGer
public function getDummyMetaGer()
{
$metager = new MetaGer();
$request = $this->createDummyRequest();
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
return $metager;
}
// Liefert eine standard Suchanfrage
public function createDummyRequest()
{
$query = [];
$query["eingabe"] = 'suchwort -blackword -host:blackhost -domain: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);
}
// Testet ob das Ranking nicht übermäßig vom gewünschten Wert abweicht
public function rankingTest()
{
$result = $this->getDummyResult();
$result->rank("link"); # 0.38, 0.38512820512820511 mit url-boost auch bei description länge > 0 statt > 80
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("titel"); # 0.38419999999999999
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("beschreibung"); # 0.38280000000000003
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
$result->rank("baum"); # 0.38
$this->assertEquals(0.4, $result->getRank(), "Not within Range of Actual Value", 0.1);
}
// Prüft die Valid funktion, die für Ergebnisse auf der Host- oder Domain-Blacklist false zurückgeben soll
public function isValidTest()
{
$result = $this->getDummyResult();
$metager = $this->getDummyMetaGer();
$this->assertTrue($result->isValid($metager));
$metager = new MetaGer();
$request = new Request(['eingabe' => 'test -site:host.domain.de -site:*.domain.de']);
$metager->parseFormData($request);
$metager->checkSpecialSearches($request);
$provider = file_get_contents("tests/testSumas.xml");
$titel = "Titel";
$link = "host.domain.de";
$anzeigeLink = "host.domain.de/ergebnis/1?p=2";
$descr = "Beschreibung: i want phrase";
$gefVon = "";
$sourceRank = 1;
$result = new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
$this->assertFalse($result->isValid($metager));
$link = "domain.de/ergebnis/1?p=2";
$result = new Result($provider, $titel, $link, $anzeigeLink, $descr, $gefVon, $sourceRank);
$this->assertFalse($result->isValid($metager));
}
// Prüft die Funktionen, die Links umformen oder erzeugen
public function linkGeneratorsTest()
{
$result = $this->getDummyResult();
$this->equalCallbackTester($result, "getStrippedHost", ["http://www.foo.bar.de/test?ja=1"],
'foo.bar.de');
$this->equalCallbackTester($result, "getStrippedLink", ["http://www.foo.bar.de/test?ja=1"],
'foo.bar.de/test');
$this->equalCallbackTester($result, "getStrippedDomain", ["http://www.foo.bar.de/test?ja=1"],
'bar.de');
$this->equalCallbackTester($result, "generateProxyLink", ["http://www.foo.bar.de/test?ja=1"],
'https://proxy.suma-ev.de/cgi-bin/nph-proxy.cgi/en/I0/http/www.foo.bar.de/test?ja=1');
$url = "https://leya:organa@www.han.solo.de/unterseite/document.htm?param1=2&param2=1#siebzehn";
$this->equalCallbackTester($result, "getStrippedHost", [$url],
'han.solo.de');
$this->equalCallbackTester($result, "getStrippedDomain", [$url],
'solo.de');
$this->equalCallbackTester($result, "getStrippedLink", [$url],
'han.solo.de/unterseite/document.htm');
$url = "http://www.foo.bar.han.solo.de/test?ja=1";
$this->equalCallbackTester($result, "getStrippedHost", [$url],
'foo.bar.han.solo.de');
$this->equalCallbackTester($result, "getStrippedDomain", [$url],
'solo.de');
}
/**
* Funktion zum vereinfachen von Tests, bei denen die Ausgabe einer Funktion einem Object entsprechen 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 als Funktionsergebnis erwartet wird (meist ein String)
*/
public function equalCallbackTester($object, $funcName, $input, $expectedInOutput)
{
$output = call_user_func_array(array($object, $funcName), $input);
$this->assertEquals($expectedInOutput, $output);
}
}
<?php
use App\MetaGer;
use App\models\parserSkripte\Bing;
use Illuminate\Http\Request;
class SearchenginePhpTest extends TestCase
{
// Die Testfunktion die PHP Unit aufruft
// Ruft alle anderen Untertests auf
public function test()
{
$this->constructionTest();
$this->enablingTest();
}
// Prüft ob aus einer XML korrekt das Suchmaschinen-Objekt erstellt wird
public function constructionTest()
{
$engines = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new Bing($engines[0], $metager);
$this->assertEquals('<suma name="minism" host="www.suchmaschine.de" skript="/suche/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine" displayName="Meine Suchmaschine" homepage="www.suchmaschine.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="bilder" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="1" cacheDuration="60"/>',
$searchengine->engine);
$this->assertEquals(true,
$searchengine->enabled);
$this->assertEquals('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
$searchengine->useragent);
$this->assertEquals(null,
$searchengine->ip);
$this->assertEquals('<a href="www.suchmaschine.de/welcome" target="_blank" rel="noopener">Meine Suchmaschine</a>',
$searchengine->gefVon);
#$this->assertEquals('0.68813000 1476867147', $searchengine->startTime);
$this->assertEquals('/suche/?sprache=de&sortieren=true&queue=&rows=<<COUNT>>&fq=subcollection:<<SUBCOLLECTIONS>>',
$searchengine->getString); # Enthält auch Testen von generateGetString(), urlEncode() und getOvertureAffilData() (nicht in der aktuellen Version)
$this->assertEquals('b1ac991618a8ffc0dab6b9bbb913841e',
$searchengine->hash);
$this->assertEquals('86a9106ae65537651a8e456835b316ab',
$searchengine->resultHash);
$this->assertEquals(true,
$searchengine->canCache);
$this->assertEquals('minism',
$searchengine->name);
$this->assertEquals('www.suchmaschine.de',
$searchengine->host);
$this->assertEquals('/suche/',
$searchengine->skript);
$this->assertEquals('sprache=de&sortieren=true&queue=<<QUERY>>&rows=<<COUNT>>&fq=subcollection:<<SUBCOLLECTIONS>>',
$searchengine->formData);
$this->assertEquals('suchmaschine',
$searchengine->package);
$this->assertEquals('Meine Suchmaschine',
$searchengine->displayName);
$this->assertEquals('443',
$searchengine->port);
$this->assertEquals('Latin1',
$searchengine->inputEncoding);
$this->assertEquals('1',
$searchengine->userSelectable);
$this->assertEquals('bilder',
$searchengine->type);
$this->assertEquals('1.2',
$searchengine->engineBoost);
$this->assertEquals('$#!#$',
$searchengine->additionalHeaders);
$this->assertEquals(null,
$searchengine->disabled);
$this->assertEquals('1',
$searchengine->hasSiteSearch);
$this->assertEquals('60',
$searchengine->cacheDuration);
}
// Prüft ob Suchmaschinen korrekt ein- und ausgeschaltet werden können
public function enablingTest()
{
$engines = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$engines[0]['disabled'] = 'next Monday';
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new Bing($engines[0], $metager);
$this->assertFalse($searchengine->isEnabled());
$searchengine->enable("tests/testSumas.xml", "enable suma test");
$this->assertTrue($searchengine->isEnabled());
$engines = simplexml_load_file("tests/testSumas.xml")->xpath("suma");
$metager = new MetaGer();
$request = new Request(["focus" => "web"]);
$metager->parseFormData($request);
$searchengine = new Bing($engines[0], $metager);
$this->assertTrue($searchengine->isEnabled());
}
/* Noch fehlende Funktionen (teils kaum testbar)
abstract public function loadResults($result);
private function setStatistic($key, $val)
protected function getHost()
getNext(MetaGer $metager, $result)
startSearch(\App\MetaGer $metager)
rank($eingabe)
closeFp()
getSocket()
retrieveResults(MetaGer $metager)
shutdown()
getCurlInfo()
getCurlErrors()
addCurlHandle($mh)
removeCurlHandle($mh)
*/
/**
* Funktion zum vereinfachen von Tests, bei denen die Ausgabe einer Funktion einem Object entsprechen 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 als Funktionsergebnis erwartet wird (meist ein String)
*/
public function equalCallbackTester($object, $funcName, $input, $expectedInOutput)
{
$output = call_user_func_array(array($object, $funcName), $input);
$this->assertEquals($expectedInOutput, $output);
}
}
<?php
namespace Tests;
abstract class TestCase extends Illuminate\Foundation\Testing\TestCase
{
/**
* The base URL to use while testing the application.
*
* @var string
*/
protected $baseUrl = 'http://localhost';
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
return $app;
}
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Eine Test XML mit einer bildersuchmaschine mit subcollections -->
<sumas>
<suma name="minism" host="www.suchmaschine.de" skript="/suche/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine" displayName="Meine Suchmaschine" homepage="www.suchmaschine.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="bilder" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="1" cacheDuration="60"/>
</sumas>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Eine Test XML mit 2 bilder und 1 web suchmaschine -->
<sumas>
<suma name="name1" host="www.suchmaschine1.de" skript="/suche1/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine1" displayName="Meine Suchmaschine1" homepage="www.suchmaschine1.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="bilder" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="0" cacheDuration="60"/>
<suma name="name2" host="www.suchmaschine2.de" skript="/suche2/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine2" displayName="Meine Suchmaschine2" homepage="www.suchmaschine2.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="web" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="0" cacheDuration="60"/>
<suma name="name3" host="www.suchmaschine3.de" skript="/suche3/" formData="sprache=de&amp;sortieren=true&amp;queue=&lt;&lt;QUERY&gt;&gt;&amp;rows=&lt;&lt;COUNT&gt;&gt;&amp;fq=subcollection:&lt;&lt;SUBCOLLECTIONS&gt;&gt;" package="suchmaschine3" displayName="Meine Suchmaschine3" homepage="www.suchmaschine3.de/welcome" port="443" inputEncoding="Latin1" userSelectable="1" type="bilder" engineBoost="1.2" additionalHeaders="$#!#$" hasSiteSearch="0" cacheDuration="60"/>
</sumas>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment