/
LoginContext.php
152 lines (129 loc) · 3.7 KB
/
LoginContext.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Sylius\Behat\Context\Ui\Admin;
use Behat\Behat\Context\Context;
use Sylius\Behat\Page\Admin\Account\LoginPageInterface;
use Sylius\Behat\Page\Admin\DashboardPageInterface;
use Sylius\Component\Core\Model\AdminUserInterface;
use Webmozart\Assert\Assert;
final class LoginContext implements Context
{
/** @var DashboardPageInterface */
private $dashboardPage;
/** @var LoginPageInterface */
private $loginPage;
public function __construct(DashboardPageInterface $dashboardPage, LoginPageInterface $loginPage)
{
$this->dashboardPage = $dashboardPage;
$this->loginPage = $loginPage;
}
/**
* @Given I want to log in
*/
public function iWantToLogIn()
{
$this->loginPage->open();
}
/**
* @When I specify the username as :username
*/
public function iSpecifyTheUsername($username = null)
{
$this->loginPage->specifyUsername($username);
}
/**
* @When I specify the password as :password
* @When I do not specify the password
*/
public function iSpecifyThePasswordAs($password = null)
{
$this->loginPage->specifyPassword($password);
}
/**
* @When I log in
*/
public function iLogIn()
{
$this->loginPage->logIn();
}
/**
* @Then I should be logged in
*/
public function iShouldBeLoggedIn()
{
$this->dashboardPage->verify();
}
/**
* @Then I should not be logged in
*/
public function iShouldNotBeLoggedIn()
{
Assert::false($this->dashboardPage->isOpen());
}
/**
* @Given I should be on login page
*/
public function iShouldBeOnLoginPage()
{
Assert::true($this->loginPage->isOpen());
}
/**
* @Then I should be notified about bad credentials
*/
public function iShouldBeNotifiedAboutBadCredentials()
{
Assert::true($this->loginPage->hasValidationErrorWith('Error Invalid credentials.'));
}
/**
* @Then I should be able to log in as :username authenticated by :password password
*/
public function iShouldBeAbleToLogInAsAuthenticatedByPassword($username, $password)
{
$this->logInAgain($username, $password);
$this->dashboardPage->verify();
}
/**
* @When /^(this administrator) logs in using "([^"]+)" password$/
*/
public function theyLogIn(AdminUserInterface $adminUser, $password)
{
$this->logInAgain($adminUser->getUsername(), $password);
}
/**
* @Then I should not be able to log in as :username authenticated by :password password
*/
public function iShouldNotBeAbleToLogInAsAuthenticatedByPassword($username, $password)
{
$this->logInAgain($username, $password);
Assert::true($this->loginPage->hasValidationErrorWith('Error Invalid credentials.'));
Assert::false($this->dashboardPage->isOpen());
}
/**
* @param string $username
* @param string $password
*/
private function logInAgain($username, $password)
{
$this->dashboardPage->open();
$this->dashboardPage->logOut();
$this->loginPage->open();
$this->loginPage->specifyUsername($username);
$this->loginPage->specifyPassword($password);
$this->loginPage->logIn();
}
/**
* @Then I should be on the login page
*/
public function iShouldBeOnTheLoginPage(): void
{
Assert::true($this->loginPage->isOpen());
}
}