Completed
Push — bugfix/remove-usage-of-mopa-bo... ( dec083...82d2d0 )
by
unknown
01:57
created

FeatureContext::setupDatabase()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * Copyright 2020 SURFnet B.V.
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace Surfnet\StepupGateway\Behat;
20
21
use Behat\Behat\Context\Context;
22
use Behat\Behat\Hook\Scope\BeforeFeatureScope;
23
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
24
use Behat\Behat\Tester\Exception\PendingException;
25
use Surfnet\StepupGateway\Behat\Service\FixtureService;
26
27
class FeatureContext implements Context
28
{
29
    /**
30
     * @var FixtureService
31
     */
32
    private $fixtureService;
33
34
    private $whitelistedInstitutions = [];
35
36
    /**
37
     * @var MinkContext
38
     */
39
    private $minkContext;
40
41
    /**
42
     * @var array
43
     */
44
    private $currentToken;
45
46
    public function __construct(FixtureService $fixtureService)
47
    {
48
        $this->fixtureService = $fixtureService;
49
    }
50
51
    /**
52
     * @BeforeFeature
53
     */
54
    public static function setupDatabase(BeforeFeatureScope $scope)
0 ignored issues
show
Unused Code introduced by
The parameter $scope is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
55
    {
56
        // Generate test databases
57
        echo "Preparing test schemas\n";
58
        shell_exec("/var/www/app/console doctrine:schema:drop --env=webtest --force");
59
        shell_exec("/var/www/app/console doctrine:schema:create --env=webtest");
60
    }
61
62
    /**
63
     * @BeforeScenario
64
     */
65
    public function gatherContexts(BeforeScenarioScope $scope)
66
    {
67
        $environment = $scope->getEnvironment();
68
        $this->minkContext = $environment->getContext(MinkContext::class);
69
    }
70
71
    /**
72
     * @Given /^a user from "([^"]*)" identified by "([^"]*)" with a vetted "([^"]*)" token$/
73
     */
74
    public function aUserIdentifiedByWithAVettedToken($institution, $nameId, $tokenType)
75
    {
76
        switch (strtolower($tokenType)) {
77
            case "yubikey":
78
                $this->currentToken = $this->fixtureService->registerYubikeyToken($nameId, $institution);
79
                break;
80
            case "sms":
81
                $this->currentToken = $this->fixtureService->registerSmsToken($nameId, $institution);
82
                break;
83
        }
84
    }
85
86
    /**
87
     * @Then I should see the Yubikey OTP screen
88
     */
89
    public function iShouldSeeTheYubikeyOtpScreen()
90
    {
91
        $this->minkContext->assertPageContainsText('Log in with YubiKey');
92
        $this->minkContext->assertPageContainsText('Your YubiKey-code');
93
    }
94
95
    /**
96
     * @Then I should see the SMS verification screen
97
     */
98
    public function iShouldSeeTheSMSScreen()
99
    {
100
        $this->minkContext->assertPageContainsText('Log in with SMS');
101
        $this->minkContext->assertPageContainsText('Enter the received code on the next page');
102
        $this->minkContext->pressButton('gateway_send_sms_challenge_send_challenge');
103
        $this->minkContext->assertPageContainsText('Enter the received SMS-code');
104
        $this->minkContext->assertPageContainsText('Send again');
105
    }
106
107
    /**
108
     * @When I enter the OTP
109
     */
110
    public function iEnterTheOtp()
111
    {
112
        $this->minkContext->fillField('gateway_verify_yubikey_otp_otp', 'bogus-otp-we-use-a-mock-yubikey-service');
113
        $this->minkContext->pressButton('gateway_verify_yubikey_otp_submit');
114
        if (!$this->minkContext->isSelenium()) {
115
            $this->minkContext->pressButton('Submit');
116
        }
117
    }
118
119
    /**
120
     * @When I enter the SMS verification code
121
     */
122
    public function iEnterTheSmsVerificationCode()
123
    {
124
        $this->minkContext->fillField('gateway_verify_sms_challenge_challenge', '432543');
125
        $this->minkContext->pressButton('gateway_verify_sms_challenge_verify_challenge');
126
        if (!$this->minkContext->isSelenium()) {
127
            $this->minkContext->pressButton('Submit');
128
        }
129
    }
130
131
    /**
132
     * @Given /^a whitelisted institution ([^"]*)$/
133
     */
134
    public function aWhitelistedInstitution($institution)
135
    {
136
        $this->whitelistedInstitutions[] = $this->fixtureService->whitelist($institution)['institution'];
137
    }
138
139
    /**
140
     * @Then /^I select my ([^"]*) token on the WAYG$/
141
     */
142
    public function iShouldSelectMyTokenOnTheWAYG($tokenType)
143
    {
144
        switch (strtolower($tokenType)) {
145
            case "yubikey":
146
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_yubikey');
147
                break;
148
            case "sms":
149
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_sms');
150
                break;
151
        }
152
    }
153
154
    /**
155
     * @Then /^I should be on the WAYG$/
156
     */
157
    public function iShouldBeOnTheWAYG()
158
    {
159
        $this->minkContext->assertPageContainsText('Choose a token for login');
160
    }
161
162
    /**
163
     * @Then /^an error response is posted back to the SP$/
164
     */
165
    public function anErrorResponseIsPostedBackToTheSP()
166
    {
167
        $this->minkContext->pressButton('Submit');
168
    }
169
170
    /**
171
     * @Given /^I cancel the authentication$/
172
     */
173
    public function iCancelTheAuthentication()
174
    {
175
        $this->minkContext->pressButton('Cancel');
176
    }
177
}
178