Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
16591 anikendra 1
<?php
2
/**
3
 * DataSourceTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice.
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Model.Datasource
15
 * @since         CakePHP(tm) v 1.2.0.4206
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Model', 'Model');
20
App::uses('DataSource', 'Model/Datasource');
21
 
22
/**
23
 * TestSource
24
 *
25
 * @package       Cake.Test.Case.Model.Datasource
26
 */
27
class TestSource extends DataSource {
28
 
29
/**
30
 * _schema
31
 * @var type
32
 */
33
	protected $_schema = array(
34
		'id' => array(
35
			'type' => 'integer',
36
			'null' => false,
37
			'key' => 'primary',
38
			'length' => 11,
39
		),
40
		'text' => array(
41
			'type' => 'string',
42
			'null' => true,
43
			'length' => 140,
44
		),
45
		'status' => array(
46
			'type' => 'string',
47
			'null' => true,
48
			'length' => 140,
49
		),
50
		'customField' => array(
51
			'type' => 'string',
52
			'null' => true,
53
			'length' => 255,
54
		),
55
	);
56
 
57
/**
58
 * listSources
59
 *
60
 * @return bool
61
 */
62
	public function listSources() {
63
		return null;
64
	}
65
 
66
/**
67
 * Returns the schema for the datasource to enable create/update
68
 *
69
 * @param object $Model
70
 * @return array
71
 */
72
	public function describe(Model $Model) {
73
		return $this->_schema;
74
	}
75
 
76
/**
77
 * Just return $func to pass to read() to figure out the COUNT
78
 * Required for delete/update to work
79
 *
80
 * @param Model $Model
81
 * @param type $func
82
 * @param type $params
83
 * @return array
84
 */
85
	public function calculate(Model $Model, $func, $params = array()) {
86
		return $func;
87
	}
88
 
89
}
90
 
91
/**
92
 * DataSourceTest class
93
 *
94
 * @package       Cake.Test.Case.Model.Datasource
95
 */
96
class DataSourceTest extends CakeTestCase {
97
 
98
/**
99
 * Name of test source
100
 *
101
 * @var string
102
 */
103
	public $sourceName = 'myapitest';
104
 
105
/**
106
 * setUp method
107
 *
108
 * @return void
109
 */
110
	public function setUp() {
111
		parent::setUp();
112
		$this->Source = $this->getMock(
113
			'TestSource',
114
			array('create', 'read', 'update', 'delete')
115
		);
116
		ConnectionManager::create($this->sourceName, array(
117
			'datasource' => get_class($this->Source),
118
			'apiKey' => '1234abcd',
119
		));
120
		$this->Model = $this->getMock(
121
			'Model',
122
			array('getDataSource'),
123
			array(array('ds' => $this->sourceName))
124
		);
125
		$this->Model->expects($this->any())
126
			->method('getDataSource')
127
			->will($this->returnValue($this->Source));
128
	}
129
 
130
/**
131
 * tearDown method
132
 *
133
 * @return void
134
 */
135
	public function tearDown() {
136
		parent::tearDown();
137
		unset($this->Model, $this->Source);
138
		ConnectionManager::drop($this->sourceName);
139
	}
140
 
141
/**
142
 * testCreate
143
 *
144
 * @return void
145
 */
146
	public function testCreate() {
147
		$data = array(
148
			$this->Model->alias => array(
149
				'text' => 'This is a test',
150
				'status' => 'Test status',
151
				'customField' => array(
152
					'array', 'field', 'type',
153
					'for', 'custom', 'datasources',
154
				),
155
			),
156
		);
157
		$this->Source->expects($this->once())
158
			->method('create')
159
			->with(
160
				$this->equalTo($this->Model),
161
				$this->equalTo(array_keys($data[$this->Model->alias])),
162
				$this->equalTo(array_values($data[$this->Model->alias]))
163
			);
164
		$this->Model->save($data);
165
	}
166
 
167
/**
168
 * testRead
169
 *
170
 * @return void
171
 */
172
	public function testRead() {
173
		$expected = array(
174
			'conditions'	=> array('status' => 'test'),
175
			'fields'		=> null,
176
			'joins'			=> array(),
177
			'limit'			=> 10,
178
			'offset'		=> null,
179
			'order'			=> array(array('status')),
180
			'page'			=> 1,
181
			'group'			=> null,
182
			'callbacks'		=> true,
183
		);
184
		$this->Source->expects($this->once())
185
			->method('read')
186
			->with(
187
				$this->anything(),
188
				$this->equalTo($expected)
189
			);
190
		$this->Model->find('all', array(
191
			'conditions' => array('status' => 'test'),
192
			'limit' => 10,
193
			'order' => array('status'),
194
		));
195
	}
196
 
197
/**
198
 * testUpdate
199
 *
200
 * @return void
201
 */
202
	public function testUpdate() {
203
		$data = array(
204
			$this->Model->alias => array(
205
				'id' => 1,
206
				'text' => 'This is a test',
207
				'status' => 'Test status',
208
				'customField' => array(
209
					'array', 'field', 'type',
210
					'for', 'custom', 'datasources',
211
				),
212
			),
213
		);
214
		$this->Source->expects($this->any())
215
			->method('read')
216
			->will($this->returnValue(array(
217
				array($this->Model->alias => array('count' => 1))
218
			)));
219
		$this->Source->expects($this->once())
220
			->method('update')
221
			->with(
222
				$this->equalTo($this->Model),
223
				$this->equalTo(array_keys($data[$this->Model->alias])),
224
				$this->equalTo(array_values($data[$this->Model->alias]))
225
			);
226
		$this->Model->save($data);
227
	}
228
 
229
/**
230
 * testDelete
231
 *
232
 * @return void
233
 */
234
	public function testDelete() {
235
		$this->Source->expects($this->any())
236
			->method('read')
237
			->will($this->returnValue(array(
238
				array($this->Model->alias => array('count' => 1))
239
			)));
240
		$this->Source->expects($this->once())
241
			->method('delete')
242
			->with(
243
				$this->equalTo($this->Model),
244
				$this->equalTo(array($this->Model->alias . '.id' => 1))
245
			);
246
		$this->Model->delete(1);
247
	}
248
 
249
}