Security update for permissions_by_term
[yaffs-website] / vendor / behat / mink-extension / spec / Behat / MinkExtension / Listener / SessionsListenerSpec.php
1 <?php
2
3 namespace spec\Behat\MinkExtension\Listener;
4
5 use Behat\Behat\EventDispatcher\Event\ScenarioTested;
6 use Behat\Gherkin\Node\FeatureNode;
7 use Behat\Gherkin\Node\ScenarioNode;
8 use Behat\Mink\Mink;
9 use Behat\Testwork\ServiceContainer\Exception\ProcessingException;
10 use Behat\Testwork\Suite\Exception\SuiteConfigurationException;
11 use Behat\Testwork\Suite\Suite;
12 use PhpSpec\ObjectBehavior;
13
14 class SessionsListenerSpec extends ObjectBehavior
15 {
16     function let(Mink $mink, ScenarioTested $event, FeatureNode $feature, ScenarioNode $scenario, Suite $suite)
17     {
18         $this->beConstructedWith($mink, 'goutte', 'selenium2', array('selenium2', 'sahi'));
19
20         $event->getSuite()->willReturn($suite);
21         $event->getFeature()->willReturn($feature);
22         $event->getScenario()->willReturn($scenario);
23
24         $suite->hasSetting('mink_session')->willReturn(false);
25         $suite->getName()->willReturn('default');
26
27         $feature->hasTag('insulated')->willReturn(false);
28         $feature->getTags()->willReturn(array());
29         $scenario->hasTag('insulated')->willReturn(false);
30         $scenario->getTags()->willReturn(array());
31     }
32
33     function it_is_an_event_subscriber()
34     {
35         $this->shouldHaveType('Symfony\Component\EventDispatcher\EventSubscriberInterface');
36     }
37
38     function it_resets_the_default_session_before_scenarios($event, $mink)
39     {
40         $mink->resetSessions()->shouldBeCalled();
41         $mink->setDefaultSessionName('goutte')->shouldBeCalled();
42
43         $this->prepareDefaultMinkSession($event);
44     }
45
46     function it_supports_changing_the_default_session_per_suite($event, $mink, $suite)
47     {
48         $suite->hasSetting('mink_session')->willReturn(true);
49         $suite->getSetting('mink_session')->willReturn('test');
50
51         $mink->resetSessions()->shouldBeCalled();
52         $mink->setDefaultSessionName('test')->shouldBeCalled();
53
54         $this->prepareDefaultMinkSession($event);
55     }
56
57     function it_fails_for_non_string_default_suite_session($event, $suite)
58     {
59         $suite->hasSetting('mink_session')->willReturn(true);
60         $suite->getSetting('mink_session')->willReturn(array());
61
62         $this->shouldThrow(new SuiteConfigurationException('`mink_session` setting of the "default" suite is expected to be a string, array given.', 'default'))
63             ->duringPrepareDefaultMinkSession($event);
64     }
65
66     function it_switches_to_the_javascript_session_for_tagged_scenarios($event, $mink, $scenario, $suite)
67     {
68         $suite->hasSetting('mink_javascript_session')->willReturn(false);
69         $scenario->getTags()->willReturn(array('javascript'));
70         $mink->resetSessions()->shouldBeCalled();
71         $mink->setDefaultSessionName('selenium2')->shouldBeCalled();
72
73         $this->prepareDefaultMinkSession($event);
74     }
75
76     function it_switches_to_the_javascript_session_for_tagged_features($event, $mink, $feature, $suite)
77     {
78         $suite->hasSetting('mink_javascript_session')->willReturn(false);
79         $feature->getTags()->willReturn(array('javascript'));
80         $mink->resetSessions()->shouldBeCalled();
81         $mink->setDefaultSessionName('selenium2')->shouldBeCalled();
82
83         $this->prepareDefaultMinkSession($event);
84     }
85
86     function it_supports_changing_the_default_javascript_session_per_suite($event, $mink, $scenario, $suite)
87     {
88         $suite->hasSetting('mink_javascript_session')->willReturn(true);
89         $suite->getSetting('mink_javascript_session')->willReturn('sahi');
90
91         $scenario->getTags()->willReturn(array('javascript'));
92         $mink->resetSessions()->shouldBeCalled();
93         $mink->setDefaultSessionName('sahi')->shouldBeCalled();
94
95         $this->prepareDefaultMinkSession($event);
96     }
97
98     function it_fails_for_non_string_javascript_suite_session($event, $scenario, $suite)
99     {
100         $suite->hasSetting('mink_javascript_session')->willReturn(true);
101         $suite->getSetting('mink_javascript_session')->willReturn(array());
102
103         $scenario->getTags()->willReturn(array('javascript'));
104
105         $this->shouldThrow(new SuiteConfigurationException('`mink_javascript_session` setting of the "default" suite is expected to be a string, array given.', 'default'))
106             ->duringPrepareDefaultMinkSession($event);
107     }
108
109     function it_fails_for_invalid_javascript_suite_session($event, $scenario, $suite)
110     {
111         $suite->hasSetting('mink_javascript_session')->willReturn(true);
112         $suite->getSetting('mink_javascript_session')->willReturn('test');
113
114         $scenario->getTags()->willReturn(array('javascript'));
115
116         $this->shouldThrow(new SuiteConfigurationException('`mink_javascript_session` setting of the "default" suite is not a javascript session. test given but expected one of selenium2, sahi.', 'default'))
117             ->duringPrepareDefaultMinkSession($event);
118     }
119
120     function it_fails_when_the_javascript_session_is_used_but_not_defined($event, $mink, $feature, $suite)
121     {
122         $suite->hasSetting('mink_javascript_session')->willReturn(false);
123         $this->beConstructedWith($mink, 'goutte', null);
124         $feature->getTags()->willReturn(array('javascript'));
125
126         $this->shouldThrow(new ProcessingException('The @javascript tag cannot be used without enabling a javascript session'))
127             ->duringPrepareDefaultMinkSession($event);
128     }
129
130     function it_switches_to_a_named_session($event, $mink, $scenario)
131     {
132         $scenario->getTags()->willReturn(array('mink:test'));
133         $mink->resetSessions()->shouldBeCalled();
134         $mink->setDefaultSessionName('test')->shouldBeCalled();
135
136         $this->prepareDefaultMinkSession($event);
137     }
138
139     function it_prefers_the_scenario_over_the_feature($event, $mink, $scenario, $feature, $suite)
140     {
141         $suite->hasSetting('mink_javascript_session')->willReturn(false);
142         $scenario->getTags()->willReturn(array('mink:test'));
143         $feature->getTags()->willReturn(array('javascript'));
144         $mink->resetSessions()->shouldBeCalled();
145         $mink->setDefaultSessionName('test')->shouldBeCalled();
146
147         $this->prepareDefaultMinkSession($event);
148     }
149
150     function it_stops_the_sessions_for_insulated_scenarios($event, $mink, $scenario)
151     {
152         $scenario->hasTag('insulated')->willReturn(true);
153         $mink->stopSessions()->shouldBeCalled();
154         $mink->setDefaultSessionName('goutte')->shouldBeCalled();
155
156         $this->prepareDefaultMinkSession($event);
157     }
158
159     function it_stops_the_sessions_for_insulated_features($event, $mink, $feature)
160     {
161         $feature->hasTag('insulated')->willReturn(true);
162         $mink->stopSessions()->shouldBeCalled();
163         $mink->setDefaultSessionName('goutte')->shouldBeCalled();
164
165         $this->prepareDefaultMinkSession($event);
166     }
167
168     function it_stops_the_sessions_at_the_end_of_the_exercise($mink)
169     {
170         $mink->stopSessions()->shouldBeCalled();
171
172         $this->tearDownMinkSessions();
173     }
174 }