Completed
Pull Request — feature/acceptance-tests (#191)
by Michiel
04:02 queued 02:04
created

aUserIdentifiedByWithAVettedToken()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
cc 3
nc 3
nop 3
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=test --force");
59
        shell_exec("/var/www/app/console doctrine:schema:create --env=test");
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
    /**
109
     * @When I enter the OTP
110
     */
111
    public function iEnterTheOtp()
112
    {
113
        $this->minkContext->fillField('gateway_verify_yubikey_otp_otp', 'bogus-otp-we-use-a-mock-yubikey-service');
114
        $this->minkContext->pressButton('gateway_verify_yubikey_otp_submit');
115
        $this->minkContext->pressButton('Submit');
116
    }
117
118
    /**
119
     * @When I enter the SMS verification code
120
     */
121
    public function iEnterTheSmsVerificationCode()
122
    {
123
        $this->minkContext->fillField('gateway_verify_sms_challenge_challenge', '432543');
124
        $this->minkContext->pressButton('gateway_verify_sms_challenge_verify_challenge');
125
        $this->minkContext->pressButton('Submit');
126
    }
127
128
    /**
129
     * @Given /^a whitelisted institution ([^"]*)$/
130
     */
131
    public function aWhitelistedInstitution($institution)
132
    {
133
        $this->whitelistedInstitutions[] = $this->fixtureService->whitelist($institution)['institution'];
134
    }
135
136
    /**
137
     * @Then /^I select my ([^"]*) token on the WAYG$/
138
     */
139
    public function iShouldSelectMyTokenOnTheWAYG($tokenType)
140
    {
141
        $this->minkContext->assertPageContainsText('Choose a token for login');
142
        switch (strtolower($tokenType)) {
143
            case "yubikey":
144
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_yubikey');
145
                break;
146
            case "sms":
147
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_sms');
148
                break;
149
        }
150
    }
151
}
152