-
Notifications
You must be signed in to change notification settings - Fork 0
/
pinapi.test
189 lines (163 loc) · 5.87 KB
/
pinapi.test
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
/**
* @file
* Tests for pinapi.module
*/
class PinAPITestCase extends DrupalWebTestCase {
/**
* Returns a new collection with random properties.
*/
function createCollection() {
// Create a collection.
$collection = new stdClass();
$collection->name = $this->randomName();
$collection->machine_name = drupal_strtolower($this->randomName());
$collection->description = $this->randomName();
$collection->status = TRUE;
pinapi_collection_save($collection);
return $collection;
}
/**
* Returns a new pin with random properties.
*/
function createPin($collection, $quantity = 1) {
$pin = new stdClass();
$pin->cid = $collection->cid;
$pin->code = $this->randomName();
$pin->quantity = $quantity;
$pin->status = TRUE;
pinapi_pin_save($pin);
return $pin;
}
}
/**
* Tests for the pinapi collection interface.
*/
class PinAPICollectionInterfaceTest extends PinAPITestCase {
public static function getInfo() {
return array(
'name' => 'Pin API Collection Interface',
'description' => 'Test the pin collection interface.',
'group' => 'Pin API',
);
}
function setUp() {
parent::setUp('pinapi');
$this->admin_user = $this->drupalCreateUser(array('administer pins'));
$this->drupalLogin($this->admin_user);
$this->collection = $this->createCollection();
}
/**
* Create, edit and delete a collection via the user inferface.
*/
function testCollectionInterface() {
// Visit the pin overview page.
$this->drupalGet('admin/structure/pin');
// Create a new collection.
$this->clickLink(t('Add collection'));
$edit = array();
$machine_name = drupal_strtolower($this->randomName());
$edit['name'] = $this->randomName();
$edit['machine_name'] = $machine_name;
$edit['description'] = $this->randomName();
$edit['status'] = TRUE;
$this->drupalPost(NULL, $edit, t('Save'));
$this->assertRaw(t('Created new collection %name.', array('%name' => $edit['name'])), t('Collection created successfully'));
// Edit the collection.
$this->drupalGet('admin/structure/pin');
$this->assertText($edit['name'], t('Collection found in the collection overview listing.'));
$this->clickLink(t('edit collection'));
$edit = array();
$edit['name'] = $this->randomName();
$this->drupalPost(NULL, $edit, t('Save'));
$this->drupalGet('admin/structure/pin');
$this->assertText($edit['name'], t('Collection found in the collection overview listing.'));
// Try to submit a collection with a duplicate machine name.
$edit['machine_name'] = $machine_name;
$this->drupalPost('admin/structure/pin/collection/add', $edit, t('Save'));
$this->assertText(t('The machine-readable name is already in use. It must be unique.'));
// Try to submit an invalid machine name.
$edit['machine_name'] = '!&^%';
$this->drupalPost('admin/structure/pin/collection/add', $edit, t('Save'));
$this->assertText(t('The machine-readable name must contain only lowercase letters, numbers, and underscores.'));
}
/**
* Delete a collection.
*/
function testCollectionDelete() {
// Create collection.
$edit = array(
'name' => $this->randomName(),
'machine_name' => drupal_strtolower($this->randomName()),
);
$this->drupalPost('admin/structure/pin/collection/add', $edit, t('Save'));
$this->assertText(t('Created new collection'), t('New collection was created.'));
// Confirm collection was created.
$collections = pinapi_collection_load_all();
$cid = $collections[count($collections) - 1]->cid;
$collection = pinapi_collection_load($cid);
$this->assertTrue($collection, t('Collection found in database.'));
// Delete collection.
$edit = array();
$this->drupalPost('admin/structure/pin/collection/' . $collection->cid . '/edit', $edit, t('Delete'));
$this->assertRaw(t('Are you sure you want to delete this collection %name?', array('%name' => $collection->name)), t('[confirm deletion] Asks for confirmation.'));
$this->assertText(t('This action cannot be undone.'), t('[confirm deletion] Inform that collection will be deleted.'));
// Confirm deletion.
$this->drupalPost(NULL, NULL, t('Delete'));
$this->assertRaw(t('Deleted collection %name.', array('%name' => $collection->name)), t('Collection deleted'));
pinapi_collection_static_reset();
$this->assertFalse(pinapi_collection_load($cid), t('Collection is not found in the database'));
}
}
/**
* Tests for Pins.
*/
class PinAPIPinTest extends PinAPITestCase {
public static function getInfo() {
return array(
'name' => 'Pin API Pin',
'description' => 'Test the pin.',
'group' => 'Pin API',
);
}
function setUp() {
parent::setUp('pinapi');
$this->admin_user = $this->drupalCreateUser(array('administer pins'));
$this->drupalLogin($this->admin_user);
$this->collection = $this->createCollection();
$this->pins = array();
for ( $i = 0; $i < 5; $i++ ) {
$this->pins[] = $this->createPin($this->collection);
}
}
/**
* Create pin.
*/
function testPinCreate() {
$pid = $this->pins[count($this->pins) - 1]->pid;
$pin = pinapi_pin_load($pid);
$this->assertTrue($pin, t('Pin found in database.'));
}
/**
* Update pin.
*/
function testPinUpdate() {
// Check that changed timestamp is updated when saving.
$pid = $this->pins[count($this->pins) - 1]->pid;
$pin = pinapi_pin_load($pid);
$changed = $pin->changed;
sleep(1);
pinapi_pin_save($pin);
$this->assertTrue($changed != $pin->changed, t('Pin has updated changed timestamp.'));
}
/**
* Delete pin.
*/
function testPinDelete() {
$pid = $this->pins[count($this->pins) - 1]->pid;
$pin = pinapi_pin_load($pid);
pinapi_pin_delete($pin->pid);
$pin = pinapi_pin_load($pid);
$this->assertFalse($pin, t('Pin not found in database.'));
}
}