Code Duplication    Length = 23-38 lines in 2 locations

src/SilverStripe/BehatExtension/Context/BasicContext.php 2 locations

@@ 137-174 (lines=38) @@
134
     *
135
     * @BeforeStep
136
     */
137
	public function handleAjaxBeforeStep(StepEvent $event) {
138
		try{
139
			$ajaxEnabledSteps = $this->getMainContext()->getAjaxSteps();
140
			$ajaxEnabledSteps = implode('|', array_filter($ajaxEnabledSteps));
141
142
			if (empty($ajaxEnabledSteps) || !preg_match('/(' . $ajaxEnabledSteps . ')/i', $event->getStep()->getText())) {
143
				return;
144
			}
145
146
			$javascript = <<<JS
147
if ('undefined' !== typeof window.jQuery && 'undefined' !== typeof window.jQuery.fn.on) {
148
    window.jQuery(document).on('ajaxStart.ss.test.behaviour', function(){
149
        window.__ajaxStatus = function() {
150
            return 'waiting';
151
        };
152
    });
153
    window.jQuery(document).on('ajaxComplete.ss.test.behaviour', function(e, jqXHR){
154
        if (null === jqXHR.getResponseHeader('X-ControllerURL')) {
155
            window.__ajaxStatus = function() {
156
                return 'no ajax';
157
            };
158
        }
159
    });
160
    window.jQuery(document).on('ajaxSuccess.ss.test.behaviour', function(e, jqXHR){
161
        if (null === jqXHR.getResponseHeader('X-ControllerURL')) {
162
            window.__ajaxStatus = function() {
163
                return 'success';
164
            };
165
        }
166
    });
167
}
168
JS;
169
			$this->getSession()->wait(500); // give browser a chance to process and render response
170
			$this->getSession()->executeScript($javascript);
171
		}catch(\WebDriver\Exception $e){
172
			$this->logException($e);
173
        }
174
    }
175
176
    /**
177
     * Wait for the __ajaxStatus()to return anything but 'waiting'.
@@ 184-206 (lines=23) @@
181
     *
182
     * @AfterStep ~@modal
183
     */
184
	public function handleAjaxAfterStep(StepEvent $event) {
185
		try{
186
			$ajaxEnabledSteps = $this->getMainContext()->getAjaxSteps();
187
			$ajaxEnabledSteps = implode('|', array_filter($ajaxEnabledSteps));
188
189
			if (empty($ajaxEnabledSteps) || !preg_match('/(' . $ajaxEnabledSteps . ')/i', $event->getStep()->getText())) {
190
				return;
191
			}
192
193
			$this->handleAjaxTimeout();
194
195
			$javascript = <<<JS
196
if ('undefined' !== typeof window.jQuery && 'undefined' !== typeof window.jQuery.fn.off) {
197
window.jQuery(document).off('ajaxStart.ss.test.behaviour');
198
window.jQuery(document).off('ajaxComplete.ss.test.behaviour');
199
window.jQuery(document).off('ajaxSuccess.ss.test.behaviour');
200
}
201
JS;
202
			$this->getSession()->executeScript($javascript);
203
		}catch(\WebDriver\Exception $e){
204
			$this->logException($e);
205
        }
206
    }
207
208
	public function handleAjaxTimeout() {
209
        $timeoutMs = $this->getMainContext()->getAjaxTimeout();