GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( e55d70...f7638b )
by Alexei
34:28
created

SoapContext::expectException()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 12
rs 9.4285
cc 2
eloc 5
nc 2
nop 3
1
<?php
2
/**
3
 * @author Alexei Gorobet, <[email protected]>
4
 */
5
namespace Behat\SoapExtension\Context;
6
7
use Symfony\Component\Yaml\Yaml;
8
use PHPUnit_Framework_Assert as Assertions;
9
// Argument processors.
10
use Behat\Gherkin\Node\TableNode;
11
use Behat\Gherkin\Node\PyStringNode;
12
// Utils.
13
use Behat\SoapExtension\Utils\SoapFaultProcessor;
14
// Scopes.
15
use Behat\Behat\Hook\Scope\BeforeStepScope;
16
17
/**
18
 * Class SoapContext.
19
 *
20
 * @package Behat\SoapExtension\Context
21
 *
22
 * @todo Rename methods.
23
 * @todo Document methods.
24
 * @todo Make steps more flexible with regex.
25
 */
26
class SoapContext extends RawSoapContext
27
{
28
    /**
29
     * @var mixed
30
     */
31
    private $value;
32
    private $fault;
33
34
    /**
35
     * Sets the WSDL for the next SOAP request.
36
     *
37
     * @param string $wsdl
38
     *   Publicly accessible URL to wsdl
39
     *
40
     * @Given I am working with SOAP service WSDL :wsdl
41
     */
42
    public function iAmWorkingWithSoapServiceWSDL($wsdl)
43
    {
44
        $this->setWSDL($wsdl);
45
    }
46
47
    /**
48
     * Sets the WSDL for the next SOAP request to NULL.
49
     *
50
     * @Given I am working with SOAP service in non-WSDL mode
51
     */
52
    public function iAmWorkingWithSoapServiceNoWSDL()
53
    {
54
        $this->setWSDL(null);
55
    }
56
57
    /**
58
     * @Given I am working with SOAP service with options list:
59
     */
60
    public function iAmWorkingWithSoapServiceWithOptions(TableNode $options)
61
    {
62
        foreach ($options->getRowsHash() as $option => $value) {
63
            $this->setOption($option, $value);
64
        }
65
    }
66
67
    /**
68
     * @Given I am working with SOAP service with options as YAML:
69
     */
70
    public function iAmWorkingWithSoapServiceWithOptionsYaml(PyStringNode $options)
71
    {
72
        foreach (Yaml::parse($options->getRaw()) as $option => $value) {
0 ignored issues
show
Bug introduced by
The expression \Symfony\Component\Yaml\...rse($options->getRaw()) of type array|string|object<stdClass> is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
73
            $this->setOption($option, $value);
74
        }
75
    }
76
77
    /**
78
     * Send SOAP request with params list.
79
     *
80
     * @Given I call SOAP function :function with params list:
81
     */
82
    public function iSendRequestWithParams($function, TableNode $params)
83
    {
84
        $this->sendRequest($function, [$params->getRowsHash()]);
85
    }
86
87
    /**
88
     * Send SOAP request with raw body.
89
     *
90
     * @Given I call SOAP with raw body:
91
     */
92
    public function iSendRequestBody(PyStringNode $body)
93
    {
94
        // Tell SOAP we want to send the body as XML, if not otherwise specified.
95
        $this->setOption('use', SOAP_LITERAL);
96
        $this->setOption('style', SOAP_DOCUMENT);
97
        $this->sendRequest('MethodNameIsIgnored', [new \SoapVar($body->getRaw(), XSD_ANYXML)]);
98
    }
99
100
    /**
101
     * @Given I register the following XPATH namespaces:
102
     */
103
    public function iRegisterXpathNamespaces(TableNode $namespaces)
104
    {
105
        foreach ($namespaces->getRowsHash() as $prefix => $uri) {
106
            $this->setNamespace($prefix, $uri);
107
        }
108
    }
109
110
    /**
111
     * @Then /^(?:|I )expect SOAP exception(?:| with code "(\d+)")(?:|( and| or)? with message "([^"]+?)")$/
112
     */
113
    public function expectException($code = null, $condition = null, $message = null)
114
    {
115
        // Exit with an error because we're expected an exception and got nothing.
116
        if (null === $this->fault) {
117
            throw new \RuntimeException('Expected \SoapFault exception was not thrown!');
118
        }
119
120
        new SoapFaultProcessor($this->fault, $code, $message, $condition);
121
122
        // If processor didn't throw an exception, then we shouldn't too.
123
        $this->fault = null;
124
    }
125
126
    /**
127
     * @Given I should see SOAP response property :property equals to :text
128
     */
129
    public function iShouldSeeSoapResponsePropertyEquals($text, $property)
130
    {
131
        Assertions::assertEquals($text, $this->extractResponseProperty($property));
132
    }
133
134
    /**
135
     * @Given I should see SOAP response property :property is not :text
136
     */
137
    public function iShouldSeeSoapResponsePropertyNotEquals($text, $property)
138
    {
139
        Assertions::assertNotEquals($text, $this->extractResponseProperty($property));
140
    }
141
142
    /**
143
     * @Given I should see SOAP response property :property contains :text
144
     */
145
    public function iShouldSeeSoapResponsePropertyContains($text, $property)
146
    {
147
        Assertions::assertContains($text, $this->extractResponseProperty($property));
148
    }
149
150
    /**
151
     * @Given I should see SOAP response property :property doesn't contain :text
152
     */
153
    public function iShouldSeeSoapResponsePropertyNotContains($text, $property)
154
    {
155
        Assertions::assertNotContains($text, $this->extractResponseProperty($property));
156
    }
157
158
    /**
159
     * @Then I should see SOAP response property :property matching pattern :pattern
160
     */
161
    public function iShouldSeeSoapResponsePropertyMatches($pattern, $property)
162
    {
163
        Assertions::assertRegExp($pattern, $this->extractResponseProperty($property));
164
    }
165
166
    /**
167
     * @Then I should see that SOAP Response matches XPATH :xpath
168
     */
169
    public function iShouldSeeThatSOAPResponseMatchesXpath($xpath)
170
    {
171
        Assertions::assertTrue(
172
            $this->extractResponseValueMatchingXPATH($xpath) !== false,
173
            "Couldn't find node matching provided XPATH: "
174
        );
175
    }
176
177
    /**
178
     * @Given I am working with SOAP response property :property
179
     */
180
    public function iWorkWithResponseProperty($property)
181
    {
182
        $this->value = $this->extractResponseProperty($property);
183
    }
184
185
    /**
186
     * @Given I am working with SOAP element matching XPATH :xpath
187
     */
188
    public function iWorkWithElementTextMatchingXPATH($xpath)
189
    {
190
        $this->value = $this->extractResponseValueMatchingXPATH($xpath);
191
    }
192
193
    /**
194
     * @Then saved SOAP value equals to :text
195
     */
196
    public function savedValueEquals($text)
197
    {
198
        Assertions::assertEquals($text, $this->value);
199
    }
200
201
    /**
202
     * @Then saved SOAP value is not equal to :text
203
     */
204
    public function savedValueNotEquals($text)
205
    {
206
        Assertions::assertNotEquals($text, $this->value);
207
    }
208
209
    /**
210
     * @Then saved SOAP value contains :text
211
     */
212
    public function savedValueContains($text)
213
    {
214
        Assertions::assertContains($text, $this->value);
215
    }
216
217
    /**
218
     * @Then saved SOAP value doesn't contain :text
219
     */
220
    public function savedValueNotContains($text)
221
    {
222
        Assertions::assertNotContains($text, $this->value);
223
    }
224
225
    /**
226
     * @Then saved SOAP value matches :pattern
227
     */
228
    public function savedValueMatchesRegExp($pattern)
229
    {
230
        Assertions::assertRegExp($pattern, $this->value);
231
    }
232
233
    /**
234
     * @Then saved SOAP value doesn't match :pattern
235
     */
236
    public function savedValueNotMatchesRegExp($pattern)
237
    {
238
        Assertions::assertNotRegExp($pattern, $this->value);
239
    }
240
241
    /**
242
     * @BeforeStep
243
     */
244
    public function beforeStepCheckForException(BeforeStepScope $scope)
245
    {
246
        // Check for SOAP exception from previously executed step.
247
        $this->fault = $this->getException();
248
249
        // @todo Is it really a better way to do this?
250
        if (null !== $this->fault && strpos($scope->getStep()->getText(), 'SOAP exception') === false) {
251
            throw $this->fault;
252
        }
253
    }
254
}
255