ElixirVault/tests/DataSetup/Traits/App/pubUsersTrait.php

117 lines
4.2 KiB
PHP

<?php
namespace ElixirAudit\Tests\DataSetup\Traits\App;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use ElixirAudit\Tests\DataSetup\Constants\siteAccounts;
trait pubUsersTrait
{
function logIntoApplicationByUserType(
$eUserLogin,
bool $acceptCookies = true,
string $siteAccount = siteAccounts::ACCOUNT_SELF_EMPLOYED
) {
$loginData = $this->getLoginCredentialsByType($eUserLogin);
$this->url($loginData['url']);
$this->waitUntilDomReadyState();
// Check if we landed on dashboard - already logged in
if ($this->elementExists('report_period_chosen')) {
return;
}
// Else continue with the login
$this->elementWait('user_login');
$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->waitUntilDomReadyState();
$this->awaitAndFill2FASecurityAfterLoginRequest($loginData);
if (strlen($siteAccount) > 0) {
$this->awaitAndSelectAccount($siteAccount);
} else {
sleep(1); // Sleep - otherwise awaitAndAcceptCookies() fail.
}
$this->awaitAndAcceptCookies();
}
function fillAndSubmitPasswordChangeForm(array $data)
{
if ($this->byId("old_password")->isEnabled()) {
$this->byId("old_password")->clear()->sendKeys($data['oldPass']);
}
$this->byId("new_password")->sendKeys($data['newPass']);
$this->byId("rnew_password")->sendKeys($data['newPass']);
$this->byCssSelector("form#pwd_cnt > button.btn.btn-block")->click();
$this->waitUntilDomReadyState();
}
function awaitAndProceedWithSecuritySetupRequest()
{
$this->elementWait('a.enable_2fa', self::CSS_SELECTOR);
$this->byCssSelector('a.enable_2fa')->click();
$this->waitUntilDomReadyState();
}
function awaitAndFill2FASecurityAfterLoginRequest(array $loginData): void
{
// Wait for form to load 2fa elements & continue with testing
$this->elementWait('frm_2fa_input');
// Validate code
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("form#frm_2fa_input div#fields input[tabindex='" . ++$i . "']")->sendKeys($char);
}
$this->waitUntilDomReadyState();
}
function awaitAndAcceptCookies(): void
{
if ($this->elementExists('div.accept_cookies a#accept-cookies', self::CSS_SELECTOR)) {
$this->elementWait('div#popup_onload.accept_cookies a#accept-cookies', self::CSS_SELECTOR);
$this->byId('accept-cookies')->click();
$this->elementWaitRemoved('#popup_onload.accept_cookies', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
}
function awaitAndSelectAccount(string $accountTitleToSelect): void
{
// Wait for company selection screen by default user has now multiple companies
$xPathSelector = "//div[@class='container']/div/div/form" .
"//li[not(contains(@style,'display:none'))]/a/i[contains(., '$accountTitleToSelect')]";
$this->elementWait($xPathSelector, self::XPATH);
$this->assertEquals($accountTitleToSelect, $this->byXPath($xPathSelector)->getText());
$this->byXPath($xPathSelector)->click();
$this->waitUntilDomReadyState();
}
function awaitAndSetup2FASecurity(): string
{
$this->elementWait('div span#secret', self::CSS_SELECTOR);
$securityCode = $this->byCssSelector('div span#secret')->getText();
// Validate code
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($securityCode);
// Fill form 2fa data
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("form#frm_2fa_input div#fields input[tabindex='" . ++$i . "']")->sendKeys($char);
}
$this->waitUntilDomReadyState();
return $securityCode;
}
}