204 lines
8.6 KiB
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());
|
|
}
|
|
}
|
|
}
|