Completed
Pull Request — feature/create-sfo-behat-test (#192)
by
unknown
04:17 queued 02:30
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 Surfnet\StepupGateway\Behat\Service\FixtureService;
25
26
class FeatureContext implements Context
27
{
28
    /**
29
     * @var FixtureService
30
     */
31
    private $fixtureService;
32
33
    private $whitelistedInstitutions = [];
34
35
    /**
36
     * @var MinkContext
37
     */
38
    private $minkContext;
39
40
    /**
41
     * @var array
42
     */
43
    private $currentToken;
44
45
    public function __construct(FixtureService $fixtureService)
46
    {
47
        $this->fixtureService = $fixtureService;
48
    }
49
50
    /**
51
     * @BeforeFeature
52
     */
53
    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...
54
    {
55
        // Generate test databases
56
        echo "Preparing test schemas\n";
57
        shell_exec("/var/www/app/console doctrine:schema:drop --env=webtest --force");
58
        shell_exec("/var/www/app/console doctrine:schema:create --env=webtest");
59
    }
60
61
    /**
62
     * @BeforeScenario
63
     */
64
    public function gatherContexts(BeforeScenarioScope $scope)
65
    {
66
        $environment = $scope->getEnvironment();
67
        $this->minkContext = $environment->getContext(MinkContext::class);
68
    }
69
70
    /**
71
     * @Given /^a user from ([^"]*) identified by ([^"]*) with a vetted ([^"]*) token$/
72
     */
73
    public function aUserIdentifiedByWithAVettedToken($institution, $nameId, $tokenType)
74
    {
75
        switch (strtolower($tokenType)) {
76
            case "yubikey":
77
                $this->currentToken = $this->fixtureService->registerYubikeyToken($nameId, $institution);
78
                break;
79
            case "sms":
80
                $this->currentToken = $this->fixtureService->registerSmsToken($nameId, $institution);
81
                break;
82
        }
83
    }
84
85
    /**
86
     * @Then I should see the Yubikey OTP screen
87
     */
88
    public function iShouldSeeTheYubikeyOtpScreen()
89
    {
90
        $this->minkContext->assertPageContainsText('Log in with YubiKey');
91
        $this->minkContext->assertPageContainsText('Your YubiKey-code');
92
    }
93
94
    /**
95
     * @Then I should see the SMS verification screen
96
     */
97
    public function iShouldSeeTheSMSScreen()
98
    {
99
        $this->minkContext->assertPageContainsText('Log in with SMS');
100
        $this->minkContext->assertPageContainsText('Enter the received code on the next page');
101
        $this->minkContext->pressButton('gateway_send_sms_challenge_send_challenge');
102
        $this->minkContext->assertPageContainsText('Enter the received SMS-code');
103
        $this->minkContext->assertPageContainsText('Send again');
104
    }
105
106
    /**
107
     * @When I enter the OTP
108
     */
109
    public function iEnterTheOtp()
110
    {
111
        $this->minkContext->fillField('gateway_verify_yubikey_otp_otp', 'bogus-otp-we-use-a-mock-yubikey-service');
112
        $this->minkContext->pressButton('gateway_verify_yubikey_otp_submit');
113
        $this->minkContext->pressButton('Submit');
114
    }
115
116
    /**
117
     * @When I enter the SMS verification code
118
     */
119
    public function iEnterTheSmsVerificationCode()
120
    {
121
        $this->minkContext->fillField('gateway_verify_sms_challenge_challenge', '432543');
122
        $this->minkContext->pressButton('gateway_verify_sms_challenge_verify_challenge');
123
        $this->minkContext->pressButton('Submit');
124
    }
125
126
    /**
127
     * @Given /^a whitelisted institution ([^"]*)$/
128
     */
129
    public function aWhitelistedInstitution($institution)
130
    {
131
        $this->whitelistedInstitutions[] = $this->fixtureService->whitelist($institution)['institution'];
132
    }
133
134
    /**
135
     * @Then /^I select my ([^"]*) token on the WAYG$/
136
     */
137
    public function iShouldSelectMyTokenOnTheWAYG($tokenType)
138
    {
139
        switch (strtolower($tokenType)) {
140
            case "yubikey":
141
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_yubikey');
142
                break;
143
            case "sms":
144
                $this->minkContext->pressButton('gateway_choose_second_factor_choose_sms');
145
                break;
146
        }
147
    }
148
149
    /**
150
     * @Then /^I should be on the WAYG$/
151
     */
152
    public function iShouldBeOnTheWAYG()
153
    {
154
        $this->minkContext->assertPageContainsText('Choose a token for login');
155
    }
156
}
157