/
AjaxModeTest.php
126 lines (107 loc) · 4.22 KB
/
AjaxModeTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
namespace ls\tests;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\Exception\NoSuchElementException;
/**
* @since 2017-11-13
* @group ajaxmode
*/
class AjaxModeTest extends TestBaseClassWeb
{
/**
* Setup before class.
*/
public static function setupBeforeClass()
{
parent::setUpBeforeClass();
// Import survey.
$surveyFile = self::$surveysFolder . '/limesurvey_survey_366446.lss';
self::importSurvey($surveyFile);
// Activate survey.
self::$testHelper->activateSurvey(self::$surveyId);
}
/**
* Test that Ajax mode records answer.
*/
public function testAjaxModeRecordsAnswer()
{
// Get questions.
$survey = \Survey::model()->findByPk(self::$surveyId);
$questionObjects = $survey->groups[0]->questions;
$questions = [];
foreach ($questionObjects as $q) {
$questions[$q->title] = $q;
}
// Make sure there are no responses in database.
$query = sprintf(
'SELECT * FROM {{survey_%d}}',
self::$surveyId
);
$db = \Yii::app()->getDb();
$rows = $db->createCommand($query)->queryAll();
$this->assertEmpty($rows, 'No answers');
// Execute survey.
$urlMan = \Yii::app()->urlManager;
$urlMan->setBaseUrl('http://' . self::$domain . '/index.php');
$url = $urlMan->createUrl(
'survey/index',
[
'sid' => self::$surveyId,
'newtest' => 'Y',
'lang' => 'pt'
]
);
try {
// Click welcome page.
self::$webDriver->get($url);
$nextButton = self::$webDriver->findElement(WebDriverBy::id('ls-button-submit'));
$nextButton->click();
sleep(1);
// TODO: Temporary, test fails here (but only on fresh install).
$screenshot = self::$webDriver->takeScreenshot();
$filename = self::$screenshotsFolder.'/AjaxModeTest.png';
file_put_contents($filename, $screenshot);
// Find yes-no radio buttons, click "Yes".
$items = self::$webDriver->findElements(WebDriverBy::cssSelector('ul.yesno-button li'));
$this->assertCount(3, $items, 'Three radio buttons for yes-no question');
$items[0]->click();
// Check that EM is reacting.
$div = self::$webDriver->findElement(WebDriverBy::cssSelector('div#question' . $questions['q2']->qid));
$this->assertEquals($div->getText(), 'The previous answer was FALSE');
// Click "No".
$items[1]->click();
// Check EM.
$div = self::$webDriver->findElement(WebDriverBy::cssSelector('div#question' . $questions['q2']->qid));
$this->assertEquals($div->getText(), 'The previous answer was TRUE');
// Click submit.
$submitButton = self::$webDriver->findElement(WebDriverBy::id('ls-button-submit'));
$submitButton->click();
// Check so that we see end page.
$completed = self::$webDriver->findElement(WebDriverBy::cssSelector('div.completed-text'));
$this->assertEquals(
$completed->getText(),
"Thank you!\nYour survey responses have been recorded.",
'I can see completed text'
);
} catch (NoSuchElementException $ex) {
$screenshot = self::$webDriver->takeScreenshot();
$filename = self::$screenshotsFolder.'/AjaxModeTest.png';
file_put_contents($filename, $screenshot);
$this->assertFalse(
true,
'Url: ' . $url . PHP_EOL .
'Screenshot in ' .$filename . PHP_EOL . $ex->getMessage()
);
}
// Check answer in database.
$query = sprintf(
'SELECT * FROM {{survey_%d}}',
self::$surveyId
);
$rows = $db->createCommand($query)->queryAll();
$this->assertCount(1, $rows);
$sgqa = self::$surveyId . 'X' . $survey->groups[0]->gid . 'X' . $questions['q1']->qid;
$answer = $rows[0][$sgqa];
$this->assertEquals('N', $answer, 'Answer is "N"');
}
}