fivestar.field.test
6.97 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
/**
* @file
* Simpletests for the Fivestar module.
*/
class FivestarTestCase extends FivestarBaseTestCase {
public static function getInfo() {
return array(
'name' => 'Fivestar widgets',
'description' => 'Make sure fivestar widgets can be created and used.',
'group' => 'Fivestar',
);
}
/**
* Test that authors can rate their own content.
*/
public function testAuthorRating() {
$this->drupalLogin($this->admin_user);
// Add an author-rated fivestar field to the test_node_type content type.
$this->createFivestarField(array('widget_type' => 'stars'));
// Load the instance settings so we can set allow_ownvote.
$instance = field_read_instance('node', 'fivestar_test', 'test_node_type');
$instance['settings']['allow_ownvote'] = 1;
field_update_instance($instance);
// Save an test_node_typee node with a two-star rating.
$edit = array(
'title' => $this->randomString(),
'fivestar_test[und][0][rating]' => '40' // Equals a rating of 2 stars.
);
$this->drupalPost('node/add/test_node_type', $edit, t('Save'));
// Make sure the two-star rating shows on the node view.
$result = $this->xpath("//div[contains(@class, 'field-name-fivestar-test')]//div[contains(@class,'star-first')]/span");
$this->assertEqual($result[0][0], '2', 'Content authors can rate their own content using the stars widget.');
}
/**
* Test that users can rate content with exposed widgets.
*/
public function testViewerRating() {
$this->createFivestarField(array('widget_type' => 'exposed'));
// Add an test_node_type to rate.
$node = $this->drupalCreateNode(array('type' => 'test_node_type'));
$this->drupalGet('node/' . $node->nid);
$this->drupalLogin($this->voter_user);
// Rate the test_node_type.
$edit = array(
'vote' => '60',
);
$this->drupalPost('node/' . $node->nid, $edit, t('Rate'));
$this->assertNoRaw(t('No votes yet'), 'Visitors can rate content using the exposed widget.');
// Load the instance settings so we can change certain settings.
$instance = field_read_instance('node', 'fivestar_test', 'test_node_type');
// Lets see if visitors is able to re-vote.
// §see http://drupal.org/node/356605
$instance['settings']['allow_revote'] = 1;
field_update_instance($instance);
$this->drupalGet('node/' . $node->nid);
$result = $this->xpath("//div[contains(@class, 'field-name-fivestar-test')]//select[contains(@name,'vote')]");
$this->assertEqual(count($result), TRUE, 'Visitors can re-vote');
// Lets test to make sure the cancel option is not available if disabled.
// @see http://drupal.org/node/1269276
$this->assertNoRaw(t('Cancel rating'), 'User cannot cancel his vote.');
$instance['settings']['allow_clear'] = 1;
field_update_instance($instance);
$this->drupalGet('node/' . $node->nid);
$this->assertRaw(t('Cancel rating'), 'User can cancel his vote.');
// Now lets change the field to have exposed off and make sure the value is still there.
// @see http://drupal.org/node/1242082
$instance['display']['default']['settings']['expose'] = FALSE;
field_update_instance($instance);
$this->drupalGet('node/' . $node->nid);
$this->assertFalse($this->xpath("//form[contains(@class, 'fivestar-widget')]"));
// Make sure the three-star rating still shows on the node view.
$result = $this->xpath("//div[contains(@class, 'field-name-fivestar-test')]//div[contains(@class,'star-first')]/span");
$this->assertEqual($result[0][0], '3', 'The static display still shows three stars.');
}
/**
* Test that users can not rate content with exposed widgets that has the exposed
* display setting set to FALSE.
*/
public function testViewerNonRating() {
// Add an exposed field, with the Exposed display settings set to FALSE.
$this->createFivestarField(array(
'widget_type' => 'exposed',
'display' => array(
'default' => array(
'type' => 'fivestar_formatter_default',
'settings' => array(
'style' => 'average',
'text' => 'average',
'expose' => FALSE,
),
),
),
));
// Add an test_node_type to test static widget.
$node = $this->drupalCreateNode(array('type' => 'test_node_type'));
// Rate the test_node_type.
$this->drupalLogin($this->voter_user);
$this->drupalGet('node/' . $node->nid);
$this->assertRaw(t('No votes yet'), 'Fivestar field has no votes.');
$this->assertFalse($this->xpath("//form[contains(@class, 'fivestar-widget')]"));
}
/**
* Test that users can rate content with exposed widgets.
*/
public function testViewerRatingAjax() {
// Add a viewer-rated fivestar field to the test_node_type content type.
$this->createFivestarField(array('widget_type' => 'exposed'));
// Add an test_node_type to rate.
$node = $this->drupalCreateNode(array('type' => 'test_node_type'));
// Rate the test_node_type.
$this->drupalLogin($this->voter_user);
$edit = array(
'vote' => '60',
);
$commands = $this->drupalPostAJAX('node/' . $node->nid, $edit, "vote",
NULL, array(), array(), "fivestar-custom-widget");
$expected = array(
'command' => 'fivestarUpdate',
// TODO: we should text the data being returned.
);
$this->assertCommand($commands, $expected, "The fivestarUpdate AJAX command was returned.");
}
/**
* Test that we can switch the fivestar widgets around for the exposed
* widget type.
*/
public function testExposedWidgetDisplay() {
// Lets add an exposed widget but display the static widget.
// It's simpler to compare the display type using the static widget.
$this->createFivestarField(array(
'widget_type' => 'exposed',
'display' => array(
'default' => array(
'type' => 'fivestar_formatter_default',
'settings' => array(
'style' => 'average',
'text' => 'average',
'expose' => FALSE,
),
),
),
));
$instance = field_read_instance('node', 'fivestar_test', 'test_node_type');
// Add an test_node_type to test widget against.
$node = $this->drupalCreateNode(array('type' => 'test_node_type'));
// Test the Default Widget.
$this->drupalGet('node/' . $node->nid);
$this->assertTrue($this->xpath("//div[contains(@class, 'fivestar-default')]//div[contains(@class,'star-first')]/span"));
$widgets = module_invoke_all('fivestar_widgets');
foreach ($widgets as $path => $name) {
$instance['display']['default']['settings']['widget']['fivestar_widget'] = $path;
field_update_instance($instance);
$widget_class = 'fivestar-' . drupal_strtolower($name);
$this->drupalGet('node/' . $node->nid);
$result = $this->xpath("//div[contains(@class, '" . $widget_class . "')]//div[contains(@class,'star-first')]/span");
$this->assertEqual($result[0][0], '0', t('The @name fivestar widget is properly display.', array('@name' => $name)));
}
}
}