ElixirVault/tests/SeleniumTests/App/PubUsers/pubUserLoginTest.php

204 lines
8.6 KiB
PHP

<?php
declare(strict_types=1);
namespace LoretaAudit\Tests\SeleniumTests\App\PubUsers;
use Facebook\WebDriver\WebDriverBy;
use LoretaAudit\Tests\BasePhpUnitSeleniumCase;
use LoretaAudit\Tests\DataSetup\Constants\siteLanguages;
use LoretaAudit\Tests\DataSetup\Constants\siteUsers;
use LoretaAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserLoginTest extends BasePhpUnitSeleniumCase
{
use pubUsersTrait;
const url = [
siteLanguages::LANG_LV => [
'menuItemXPath' => "//div[@id='navbar']//span[contains(., 'Grāmatvedības sistēma')]//ancestor::a",
'url' => 'ienakt-gramatvedibas-sistema',
'header' => 'Ienākt grāmatvedības sistēmā',
'exists' => ['#user_login', '#user_password', 'div.rchk.agree_to', 'button.btn.btn-block'],
'text-exists' => [
'Ienākt grāmatvedības sistēmā',
'Es esmu izlasījis un', 'piekrītu noteikumiem.',
'Ienākt', 'Aizmirsi paroli?', 'Reģistrācija', 'Atgriezties uz zutenis.lv mājaslapu'
],
'inv-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'blocked-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'login-ok' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'fill-field' => 'Lūdzu aizpildiet lauku!',
'linksToTexts' => [
'/paroles-atgusana' => [
'wait_id' => 'passRecovery_cnt',
'text' => 'Paroles atgūšana',
'text_selector' => 'div.pw_recovery > p.font-20.semi-font'
],
'/registracija' => [
'wait_tag' => 'h1',
'text' => 'Reģistrācija',
'text_selector' => 'h1.to-animate'
],
'/' => [
'wait_tag' => 'h1',
'text' => 'Laipni lūgti grāmatvedības sistēmā ZUTENIS',
'text_selector' => 'h1.to-animate'
],
],
'iframe-content' => 'Lietošanas noteikumi',
'login-2nd-step' => 'Divu faktoru autentifikācija'
]
];
protected function setUp(): void
{
parent::setUp();
$this->reloadDbTables(['mod_users']);
}
public function testLogin(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
// Login user till Two-factor authentication
self::logInUserByCredentials($this, $pageData, $loginData);
// $this->elementWait('user_login');
// $this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
//
// // Input login data
// $this->byId("user_login")->sendKeys($loginData['user']);
// $this->byId("user_password")->sendKeys($loginData['password']);
//
// $this->byCssSelector("form#frm_input div#agree_to_terms")->click();
// $this->byCssSelector("form#frm_input button.btn.btn-block")->click();
//
// $this->elementWait('frm_2fa_input');
// $this->assertEquals($pageData['login-2nd-step'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
// Check for logout - log out
$this->byCssSelector("form#frm_2fa_input > a.link")->click();
$this->elementWait('user_login');
$this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
}
}
public static function logInUserByCredentials(
BasePhpUnitSeleniumCase $activeTestCase, array $langData = null, array $loginData = null): void
{
$activeTestCase->elementWait('user_login');
$activeTestCase->assertEquals($langData['header'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText());
// Input login data
$activeTestCase->byId("user_login")->sendKeys($loginData['user']);
$activeTestCase->byId("user_password")->sendKeys($loginData['password']);
$activeTestCase->byCssSelector("form#frm_input div#agree_to_terms")->click();
$activeTestCase->byCssSelector("form#frm_input button.btn.btn-block")->click();
$activeTestCase->elementWait('frm_2fa_input');
$activeTestCase->assertEquals($langData['login-2nd-step'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText());
}
public function testLoginForm(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_login');
// Test error containing fields
$this->webDriver->executeScript('$("#user_login").focus().blur();');
$this->webDriver->action()->moveToElement($this->byId('user_login'))->perform();
$this->elementWait('#user_login + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_login + div.errMsg')->getText());
$this->webDriver->executeScript('$("#user_password").focus().blur();');
$this->webDriver->action()->moveToElement($this->byId('user_password'))->perform();
$this->elementWait('#user_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_password + div.errMsg')->getText());
// Input invalid login data
$this->byId("user_login")->sendKeys('test');
$this->byId("user_password")->sendKeys('test');
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
$this->elementWait('status_error', self::CLASS_NAME);
$this->assertEquals($pageData['inv-user'], $this->byCssSelector('div.status_error')->getText());
// Check agree to terms iframe - wait for login page to reload
$this->byCssSelector("a#show-terms")->click();
$this->elementWait('.fancybox-iframe', self::CSS_SELECTOR);
$this->webDriver->switchTo()->frame($this->byCssSelector('.fancybox-iframe'));
$this->elementWait('#fh5co-home .row div.col-md-8 h1', self::CSS_SELECTOR);
sleep(2); // Sleep while animation is complete
$this->assertEquals($pageData['iframe-content'], $this->byCssSelector('h1')->getText());
$this->webDriver->switchTo()->defaultContent();
}
}
public function testLoginPageRedirectLinks(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_login');
// Test pages clicks
$pagesToVisit = [];
$links = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_input > a.link'));
foreach ($links as $link) {
$pagesToVisit[] = $link->getAttribute('href');
}
foreach ($pagesToVisit as $href) {
if (isset($pageData['linksToTexts'][$href])) {
$this->url($this->normalizeUrl($href));
sleep(2);
// Element Wait fails for some unknown reason
if (isset($pageData['linksToTexts'][$href]['wait_id']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_id']);
elseif (isset($pageData['linksToTexts'][$href]['wait_tag']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_tag'], self::TAG_NAME);
$this->assertEquals($pageData['linksToTexts'][$href]['text'], $this->byCssSelector($pageData['linksToTexts'][$href]['text_selector'])->getText());
}
}
}
}
public function testLoginPageLoaded(): void
{
foreach (self::url as $lang => $pageData) {
$this->url('index');
$this->awaitAndAcceptCookies();
$this->elementWait($pageData['menuItemXPath'], self::XPATH);
$this->byXPath($pageData['menuItemXPath'])->click();
sleep(2);
$this->url($pageData['url']);
$this->elementWait('user_login');
foreach ($pageData['exists'] as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR));
}
$this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText());
}
}
}