Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12345 anikendra 1
<?php
2
/**
3
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
4
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
5
 *
6
 * Licensed under The MIT License
7
 * For full copyright and license information, please see the LICENSE.txt
8
 * Redistributions of files must retain the above copyright notice
9
 *
10
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
11
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
12
 * @since         CakePHP(tm) v 1.2.0.5669
13
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
14
 */
15
 
16
App::uses('Model', 'Model');
17
App::uses('AppModel', 'Model');
18
 
19
require_once dirname(dirname(__FILE__)) . DS . 'models.php';
20
 
21
/**
22
 * TranslateBehaviorTest class
23
 *
24
 * @package       Cake.Test.Case.Model.Behavior
25
 */
26
class TranslateBehaviorTest extends CakeTestCase {
27
 
28
/**
29
 * autoFixtures property
30
 *
31
 * @var bool
32
 */
33
	public $autoFixtures = false;
34
 
35
/**
36
 * fixtures property
37
 *
38
 * @var array
39
 */
40
	public $fixtures = array(
41
		'core.translated_item', 'core.translate', 'core.translate_table',
42
		'core.translated_article', 'core.translate_article', 'core.user', 'core.comment', 'core.tag', 'core.articles_tag',
43
		'core.translate_with_prefix'
44
	);
45
 
46
/**
47
 * Test that count queries with conditions get the correct joins
48
 *
49
 * @return void
50
 */
51
	public function testCountWithConditions() {
52
		$this->loadFixtures('Translate', 'TranslatedItem');
53
 
54
		$Model = new TranslatedItem();
55
		$Model->locale = 'eng';
56
		$result = $Model->find('count', array(
57
			'conditions' => array(
58
				'I18n__content.locale' => 'eng'
59
			)
60
		));
61
		$this->assertEquals(3, $result);
62
	}
63
 
64
/**
65
 * testTranslateModel method
66
 *
67
 * @return void
68
 */
69
	public function testTranslateModel() {
70
		$this->loadFixtures('TranslateTable', 'Tag', 'TranslatedItem', 'Translate', 'User', 'TranslatedArticle', 'TranslateArticle');
71
		$TestModel = new Tag();
72
		$TestModel->translateTable = 'another_i18n';
73
		$TestModel->Behaviors->load('Translate', array('title'));
74
		$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
75
		$this->assertEquals('I18nModel', $translateModel->name);
76
		$this->assertEquals('another_i18n', $translateModel->useTable);
77
 
78
		$TestModel = new User();
79
		$TestModel->Behaviors->load('Translate', array('title'));
80
		$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
81
		$this->assertEquals('I18nModel', $translateModel->name);
82
		$this->assertEquals('i18n', $translateModel->useTable);
83
 
84
		$TestModel = new TranslatedArticle();
85
		$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
86
		$this->assertEquals('TranslateArticleModel', $translateModel->name);
87
		$this->assertEquals('article_i18n', $translateModel->useTable);
88
 
89
		$TestModel = new TranslatedItem();
90
		$translateModel = $TestModel->Behaviors->Translate->translateModel($TestModel);
91
		$this->assertEquals('TranslateTestModel', $translateModel->name);
92
		$this->assertEquals('i18n', $translateModel->useTable);
93
	}
94
 
95
/**
96
 * testLocaleFalsePlain method
97
 *
98
 * @return void
99
 */
100
	public function testLocaleFalsePlain() {
101
		$this->loadFixtures('Translate', 'TranslatedItem', 'User');
102
 
103
		$TestModel = new TranslatedItem();
104
		$TestModel->locale = false;
105
 
106
		$result = $TestModel->read(null, 1);
107
		$expected = array('TranslatedItem' => array(
108
			'id' => 1,
109
			'slug' => 'first_translated',
110
			'translated_article_id' => 1,
111
		));
112
		$this->assertEquals($expected, $result);
113
 
114
		$result = $TestModel->find('all', array('fields' => array('slug')));
115
		$expected = array(
116
			array('TranslatedItem' => array('slug' => 'first_translated')),
117
			array('TranslatedItem' => array('slug' => 'second_translated')),
118
			array('TranslatedItem' => array('slug' => 'third_translated'))
119
		);
120
		$this->assertEquals($expected, $result);
121
	}
122
 
123
/**
124
 * testLocaleFalseAssociations method
125
 *
126
 * @return void
127
 */
128
	public function testLocaleFalseAssociations() {
129
		$this->loadFixtures('Translate', 'TranslatedItem');
130
 
131
		$TestModel = new TranslatedItem();
132
		$TestModel->locale = false;
133
		$TestModel->unbindTranslation();
134
		$translations = array('title' => 'Title', 'content' => 'Content');
135
		$TestModel->bindTranslation($translations, false);
136
 
137
		$result = $TestModel->read(null, 1);
138
		$expected = array(
139
			'TranslatedItem' => array('id' => 1, 'slug' => 'first_translated', 'translated_article_id' => 1),
140
			'Title' => array(
141
				array('id' => 1, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Title #1'),
142
				array('id' => 3, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titel #1'),
143
				array('id' => 5, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titulek #1')
144
			),
145
			'Content' => array(
146
				array('id' => 2, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Content #1'),
147
				array('id' => 4, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Inhalt #1'),
148
				array('id' => 6, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Obsah #1')
149
			)
150
		);
151
		$this->assertEquals($expected, $result);
152
 
153
		$TestModel->hasMany['Title']['fields'] = $TestModel->hasMany['Content']['fields'] = array('content');
154
		$TestModel->hasMany['Title']['conditions']['locale'] = $TestModel->hasMany['Content']['conditions']['locale'] = 'eng';
155
 
156
		$result = $TestModel->find('all', array('fields' => array('TranslatedItem.slug')));
157
		$expected = array(
158
			array(
159
				'TranslatedItem' => array('id' => 1, 'slug' => 'first_translated'),
160
				'Title' => array(array('foreign_key' => 1, 'content' => 'Title #1')),
161
				'Content' => array(array('foreign_key' => 1, 'content' => 'Content #1'))
162
			),
163
			array(
164
				'TranslatedItem' => array('id' => 2, 'slug' => 'second_translated'),
165
				'Title' => array(array('foreign_key' => 2, 'content' => 'Title #2')),
166
				'Content' => array(array('foreign_key' => 2, 'content' => 'Content #2'))
167
			),
168
			array(
169
				'TranslatedItem' => array('id' => 3, 'slug' => 'third_translated'),
170
				'Title' => array(array('foreign_key' => 3, 'content' => 'Title #3')),
171
				'Content' => array(array('foreign_key' => 3, 'content' => 'Content #3'))
172
			)
173
		);
174
		$this->assertEquals($expected, $result);
175
	}
176
 
177
/**
178
 * testLocaleSingle method
179
 *
180
 * @return void
181
 */
182
	public function testLocaleSingle() {
183
		$this->loadFixtures('Translate', 'TranslatedItem');
184
 
185
		$TestModel = new TranslatedItem();
186
		$TestModel->locale = 'eng';
187
 
188
		$result = $TestModel->read(null, 1);
189
		$expected = array(
190
			'TranslatedItem' => array(
191
				'id' => 1,
192
				'slug' => 'first_translated',
193
				'locale' => 'eng',
194
				'title' => 'Title #1',
195
				'content' => 'Content #1',
196
				'translated_article_id' => 1,
197
			)
198
		);
199
		$this->assertEquals($expected, $result);
200
 
201
		$result = $TestModel->find('all');
202
		$expected = array(
203
			array(
204
				'TranslatedItem' => array(
205
					'id' => 1,
206
					'slug' => 'first_translated',
207
					'locale' => 'eng',
208
					'title' => 'Title #1',
209
					'content' => 'Content #1',
210
					'translated_article_id' => 1,
211
				)
212
			),
213
			array(
214
				'TranslatedItem' => array(
215
					'id' => 2,
216
					'slug' => 'second_translated',
217
					'locale' => 'eng',
218
					'title' => 'Title #2',
219
					'content' => 'Content #2',
220
					'translated_article_id' => 1,
221
				)
222
			),
223
			array(
224
				'TranslatedItem' => array(
225
					'id' => 3,
226
					'slug' => 'third_translated',
227
					'locale' => 'eng',
228
					'title' => 'Title #3',
229
					'content' => 'Content #3',
230
					'translated_article_id' => 1,
231
				)
232
			)
233
		);
234
		$this->assertEquals($expected, $result);
235
 
236
		$result = $TestModel->field('title', array('TranslatedItem.id' => 1));
237
		$expected = 'Title #1';
238
		$this->assertEquals($expected, $result);
239
 
240
		$result = $TestModel->read('title', 1);
241
		$expected = array(
242
			'TranslatedItem' => array(
243
				'id' => 1,
244
				'slug' => 'first_translated',
245
				'locale' => 'eng',
246
				'title' => 'Title #1',
247
				'translated_article_id' => 1,
248
			)
249
		);
250
		$this->assertEquals($expected, $result);
251
 
252
		$result = $TestModel->read('id, title', 1);
253
		$expected = array(
254
			'TranslatedItem' => array(
255
				'id' => 1,
256
				'locale' => 'eng',
257
				'title' => 'Title #1',
258
			)
259
		);
260
		$this->assertEquals($expected, $result);
261
	}
262
 
263
/**
264
 * testLocaleSingleWithConditions method
265
 *
266
 * @return void
267
 */
268
	public function testLocaleSingleWithConditions() {
269
		$this->loadFixtures('Translate', 'TranslatedItem');
270
 
271
		$TestModel = new TranslatedItem();
272
		$TestModel->locale = 'eng';
273
		$result = $TestModel->find('all', array('conditions' => array('slug' => 'first_translated')));
274
		$expected = array(
275
			array(
276
				'TranslatedItem' => array(
277
					'id' => 1,
278
					'slug' => 'first_translated',
279
					'locale' => 'eng',
280
					'title' => 'Title #1',
281
					'content' => 'Content #1',
282
					'translated_article_id' => 1,
283
				)
284
			)
285
		);
286
		$this->assertEquals($expected, $result);
287
 
288
		$result = $TestModel->find('all', array('conditions' => "TranslatedItem.slug = 'first_translated'"));
289
		$expected = array(
290
			array(
291
				'TranslatedItem' => array(
292
					'id' => 1,
293
					'slug' => 'first_translated',
294
					'locale' => 'eng',
295
					'title' => 'Title #1',
296
					'content' => 'Content #1',
297
					'translated_article_id' => 1,
298
				)
299
			)
300
		);
301
		$this->assertEquals($expected, $result);
302
	}
303
 
304
/**
305
 * testLocaleSingleCountWithConditions method
306
 *
307
 * @return void
308
 */
309
	public function testLocaleSingleCountWithConditions() {
310
		$this->loadFixtures('Translate', 'TranslatedItem');
311
 
312
		$TestModel = new TranslatedItem();
313
		$TestModel->locale = 'eng';
314
		$result = $TestModel->find('all', array(
315
			'conditions' => array('slug' => 'first_translated')
316
		));
317
		$expected = array(
318
			array(
319
				'TranslatedItem' => array(
320
					'id' => 1,
321
					'slug' => 'first_translated',
322
					'locale' => 'eng',
323
					'title' => 'Title #1',
324
					'content' => 'Content #1',
325
					'translated_article_id' => 1,
326
				)
327
			)
328
		);
329
		$this->assertEquals($expected, $result);
330
 
331
		$result = $TestModel->find('count', array(
332
			'conditions' => array('slug' => 'first_translated')
333
		));
334
		$expected = 1;
335
		$this->assertEquals($expected, $result);
336
	}
337
 
338
/**
339
 * testLocaleSingleAssociations method
340
 *
341
 * @return void
342
 */
343
	public function testLocaleSingleAssociations() {
344
		$this->loadFixtures('Translate', 'TranslatedItem');
345
 
346
		$TestModel = new TranslatedItem();
347
		$TestModel->locale = 'eng';
348
		$TestModel->unbindTranslation();
349
		$translations = array('title' => 'Title', 'content' => 'Content');
350
		$TestModel->bindTranslation($translations, false);
351
 
352
		$result = $TestModel->read(null, 1);
353
		$expected = array(
354
			'TranslatedItem' => array(
355
				'id' => 1,
356
				'slug' => 'first_translated',
357
				'locale' => 'eng',
358
				'title' => 'Title #1',
359
				'content' => 'Content #1',
360
				'translated_article_id' => 1,
361
			),
362
			'Title' => array(
363
				array('id' => 1, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Title #1'),
364
				array('id' => 3, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titel #1'),
365
				array('id' => 5, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titulek #1')
366
			),
367
			'Content' => array(
368
				array('id' => 2, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Content #1'),
369
				array('id' => 4, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Inhalt #1'),
370
				array('id' => 6, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Obsah #1')
371
			)
372
		);
373
		$this->assertEquals($expected, $result);
374
 
375
		$TestModel->hasMany['Title']['fields'] = $TestModel->hasMany['Content']['fields'] = array('content');
376
		$TestModel->hasMany['Title']['conditions']['locale'] = $TestModel->hasMany['Content']['conditions']['locale'] = 'eng';
377
 
378
		$result = $TestModel->find('all', array('fields' => array('TranslatedItem.title')));
379
		$expected = array(
380
			array(
381
				'TranslatedItem' => array(
382
					'id' => 1,
383
					'locale' => 'eng',
384
					'title' => 'Title #1',
385
					'slug' => 'first_translated',
386
					'translated_article_id' => 1,
387
				),
388
				'Title' => array(array('foreign_key' => 1, 'content' => 'Title #1')),
389
				'Content' => array(array('foreign_key' => 1, 'content' => 'Content #1'))
390
			),
391
			array(
392
				'TranslatedItem' => array(
393
					'id' => 2,
394
					'locale' => 'eng',
395
					'title' => 'Title #2',
396
					'slug' => 'second_translated',
397
					'translated_article_id' => 1,
398
				),
399
				'Title' => array(array('foreign_key' => 2, 'content' => 'Title #2')),
400
				'Content' => array(array('foreign_key' => 2, 'content' => 'Content #2'))
401
			),
402
			array(
403
				'TranslatedItem' => array(
404
					'id' => 3,
405
					'locale' => 'eng',
406
					'title' => 'Title #3',
407
					'slug' => 'third_translated',
408
					'translated_article_id' => 1,
409
				),
410
				'Title' => array(array('foreign_key' => 3, 'content' => 'Title #3')),
411
				'Content' => array(array('foreign_key' => 3, 'content' => 'Content #3'))
412
			)
413
		);
414
		$this->assertEquals($expected, $result);
415
	}
416
 
417
/**
418
 * Test loading fields with 0 as the translated value.
419
 *
420
 * @return void
421
 */
422
	public function testFetchTranslationsWithZero() {
423
		$this->loadFixtures('Translate', 'TranslatedItem');
424
 
425
		$model = new TranslatedItem();
426
		$translateModel = $model->translateModel();
427
		$translateModel->updateAll(array('content' => "'0'"));
428
		$model->locale = 'eng';
429
 
430
		$result = $model->read(null, 1);
431
		$expected = array(
432
			'TranslatedItem' => array(
433
				'id' => 1,
434
				'slug' => 'first_translated',
435
				'locale' => 'eng',
436
				'title' => '0',
437
				'content' => '0',
438
				'translated_article_id' => 1,
439
			)
440
		);
441
		$this->assertEquals($expected, $result);
442
	}
443
 
444
/**
445
 * testLocaleMultiple method
446
 *
447
 * @return void
448
 */
449
	public function testLocaleMultiple() {
450
		$this->loadFixtures('Translate', 'TranslatedItem');
451
 
452
		$TestModel = new TranslatedItem();
453
		$TestModel->locale = array('deu', 'eng', 'cze');
454
 
455
		$result = $TestModel->read(null, 1);
456
		$expected = array(
457
			'TranslatedItem' => array(
458
				'id' => 1,
459
				'slug' => 'first_translated',
460
				'locale' => 'deu',
461
				'title' => 'Titel #1',
462
				'content' => 'Inhalt #1',
463
				'translated_article_id' => 1,
464
			)
465
		);
466
		$this->assertEquals($expected, $result);
467
 
468
		$result = $TestModel->find('all', array('fields' => array('slug', 'title', 'content')));
469
		$expected = array(
470
			array(
471
				'TranslatedItem' => array(
472
					'slug' => 'first_translated',
473
					'locale' => 'deu',
474
					'content' => 'Inhalt #1',
475
					'title' => 'Titel #1',
476
				)
477
			),
478
			array(
479
				'TranslatedItem' => array(
480
					'slug' => 'second_translated',
481
					'locale' => 'deu',
482
					'title' => 'Titel #2',
483
					'content' => 'Inhalt #2',
484
				)
485
			),
486
			array(
487
				'TranslatedItem' => array(
488
					'slug' => 'third_translated',
489
					'locale' => 'deu',
490
					'title' => 'Titel #3',
491
					'content' => 'Inhalt #3',
492
				)
493
			)
494
		);
495
		$this->assertEquals($expected, $result);
496
 
497
		$TestModel = new TranslatedItem();
498
		$TestModel->locale = array('pt-br');
499
		$result = $TestModel->find('all');
500
		$this->assertCount(3, $result, '3 records should have been found, no SQL error.');
501
	}
502
 
503
/**
504
 * testMissingTranslation method
505
 *
506
 * @return void
507
 */
508
	public function testMissingTranslation() {
509
		$this->loadFixtures('Translate', 'TranslatedItem');
510
 
511
		$TestModel = new TranslatedItem();
512
		$TestModel->locale = 'rus';
513
		$result = $TestModel->read(null, 1);
514
		$this->assertSame(array(), $result);
515
 
516
		$TestModel->locale = array('rus');
517
		$result = $TestModel->read(null, 1);
518
		$expected = array(
519
			'TranslatedItem' => array(
520
				'id' => 1,
521
				'slug' => 'first_translated',
522
				'locale' => 'rus',
523
				'title' => '',
524
				'content' => '',
525
				'translated_article_id' => 1,
526
			)
527
		);
528
		$this->assertEquals($expected, $result);
529
	}
530
 
531
/**
532
 * testTranslatedFindList method
533
 *
534
 * @return void
535
 */
536
	public function testTranslatedFindList() {
537
		$this->loadFixtures('Translate', 'TranslatedItem');
538
 
539
		$TestModel = new TranslatedItem();
540
		$TestModel->locale = 'deu';
541
		$TestModel->displayField = 'title';
542
		$result = $TestModel->find('list', array('recursive' => 1));
543
		$expected = array(1 => 'Titel #1', 2 => 'Titel #2', 3 => 'Titel #3');
544
		$this->assertEquals($expected, $result);
545
 
546
		// SQL Server trigger an error and stops the page even if the debug = 0
547
		if ($this->db instanceof Sqlserver) {
548
			$debug = Configure::read('debug');
549
			Configure::write('debug', 0);
550
 
551
			$result = $TestModel->find('list', array('recursive' => 1, 'callbacks' => false));
552
			$this->assertSame(array(), $result);
553
 
554
			$result = $TestModel->find('list', array('recursive' => 1, 'callbacks' => 'after'));
555
			$this->assertSame(array(), $result);
556
			Configure::write('debug', $debug);
557
		}
558
 
559
		$result = $TestModel->find('list', array('recursive' => 1, 'callbacks' => 'before'));
560
		$expected = array(1 => null, 2 => null, 3 => null);
561
		$this->assertEquals($expected, $result);
562
	}
563
 
564
/**
565
 * testReadSelectedFields method
566
 *
567
 * @return void
568
 */
569
	public function testReadSelectedFields() {
570
		$this->loadFixtures('Translate', 'TranslatedItem');
571
 
572
		$TestModel = new TranslatedItem();
573
		$TestModel->locale = 'eng';
574
		$result = $TestModel->find('all', array('fields' => array('slug', 'TranslatedItem.content')));
575
		$expected = array(
576
			array('TranslatedItem' => array('slug' => 'first_translated', 'locale' => 'eng', 'content' => 'Content #1')),
577
			array('TranslatedItem' => array('slug' => 'second_translated', 'locale' => 'eng', 'content' => 'Content #2')),
578
			array('TranslatedItem' => array('slug' => 'third_translated', 'locale' => 'eng', 'content' => 'Content #3'))
579
		);
580
		$this->assertEquals($expected, $result);
581
 
582
		$result = $TestModel->find('all', array('fields' => array('TranslatedItem.slug', 'content')));
583
		$this->assertEquals($expected, $result);
584
 
585
		$TestModel->locale = array('eng', 'deu', 'cze');
586
		$delete = array(array('locale' => 'deu'), array('field' => 'content', 'locale' => 'eng'));
587
		$I18nModel = ClassRegistry::getObject('TranslateTestModel');
588
		$I18nModel->deleteAll(array('or' => $delete));
589
 
590
		$result = $TestModel->find('all', array('fields' => array('title', 'content')));
591
		$expected = array(
592
			array('TranslatedItem' => array('locale' => 'eng', 'title' => 'Title #1', 'content' => 'Obsah #1')),
593
			array('TranslatedItem' => array('locale' => 'eng', 'title' => 'Title #2', 'content' => 'Obsah #2')),
594
			array('TranslatedItem' => array('locale' => 'eng', 'title' => 'Title #3', 'content' => 'Obsah #3'))
595
		);
596
		$this->assertEquals($expected, $result);
597
	}
598
 
599
/**
600
 * testSaveCreate method
601
 *
602
 * @return void
603
 */
604
	public function testSaveCreate() {
605
		$this->loadFixtures('Translate', 'TranslatedItem');
606
 
607
		$TestModel = new TranslatedItem();
608
		$TestModel->locale = 'spa';
609
		$data = array(
610
			'slug' => 'fourth_translated',
611
			'title' => 'Leyenda #4',
612
			'content' => 'Contenido #4',
613
			'translated_article_id' => 1,
614
		);
615
		$TestModel->create($data);
616
		$TestModel->save();
617
		$result = $TestModel->read();
618
		$expected = array('TranslatedItem' => array_merge($data, array('id' => $TestModel->id, 'locale' => 'spa')));
619
		$this->assertEquals($expected, $result);
620
	}
621
 
622
/**
623
 * test saving/deleting with an alias, uses the model name.
624
 *
625
 * @return void
626
 */
627
	public function testSaveDeleteIgnoreAlias() {
628
		$this->loadFixtures('Translate', 'TranslatedItem');
629
 
630
		$TestModel = new TranslatedItem(array('alias' => 'SomethingElse'));
631
		$TestModel->locale = 'spa';
632
		$data = array(
633
			'slug' => 'fourth_translated',
634
			'title' => 'Leyenda #4',
635
			'content' => 'Contenido #4',
636
			'translated_article_id' => 1,
637
		);
638
		$TestModel->create($data);
639
		$TestModel->save();
640
		$id = $TestModel->id;
641
		$result = $TestModel->read();
642
		$expected = array($TestModel->alias => array_merge($data, array('id' => $id, 'locale' => 'spa')));
643
		$this->assertEquals($expected, $result);
644
 
645
		$TestModel->delete($id);
646
		$result = $TestModel->translateModel()->find('count', array(
647
			'conditions' => array('foreign_key' => $id)
648
		));
649
		$this->assertEquals(0, $result);
650
	}
651
 
652
/**
653
 * test save multiple locales method
654
 *
655
 * @return void
656
 */
657
	public function testSaveMultipleLocales() {
658
		$this->loadFixtures('Translate', 'TranslatedItem');
659
 
660
		$TestModel = new TranslatedItem();
661
		$data = array(
662
			'slug' => 'fourth_translated',
663
			'title' => array(
664
				'eng' => 'Title #4',
665
				'spa' => 'Leyenda #4',
666
			),
667
			'content' => array(
668
				'eng' => 'Content #4',
669
				'spa' => 'Contenido #4',
670
			),
671
			'translated_article_id' => 1,
672
		);
673
		$TestModel->create();
674
		$TestModel->save($data);
675
 
676
		$translations = array('title' => 'Title', 'content' => 'Content');
677
		$TestModel->bindTranslation($translations, false);
678
		$TestModel->locale = array('eng', 'spa');
679
		$result = $TestModel->read();
680
 
681
		$this->assertCount(2, $result['Title']);
682
		$this->assertEquals($result['Title'][0]['locale'], 'eng');
683
		$this->assertEquals($result['Title'][0]['content'], 'Title #4');
684
		$this->assertEquals($result['Title'][1]['locale'], 'spa');
685
		$this->assertEquals($result['Title'][1]['content'], 'Leyenda #4');
686
 
687
		$this->assertCount(2, $result['Content']);
688
	}
689
 
690
/**
691
 * testSaveAssociatedCreate method
692
 *
693
 * @return void
694
 */
695
	public function testSaveAssociatedMultipleLocale() {
696
		$this->loadFixtures('Translate', 'TranslatedItem');
697
 
698
		$TestModel = new TranslatedItem();
699
		$data = array(
700
			'slug' => 'fourth_translated',
701
			'title' => array(
702
				'eng' => 'Title #4',
703
				'spa' => 'Leyenda #4',
704
			),
705
			'content' => array(
706
				'eng' => 'Content #4',
707
				'spa' => 'Contenido #4',
708
			),
709
			'translated_article_id' => 1,
710
		);
711
		$TestModel->create();
712
		$TestModel->saveAssociated($data);
713
 
714
		$translations = array('title' => 'Title', 'content' => 'Content');
715
		$TestModel->bindTranslation($translations, false);
716
		$TestModel->locale = array('eng', 'spa');
717
		$result = $TestModel->read();
718
		$this->assertCount(2, $result['Title']);
719
		$this->assertCount(2, $result['Content']);
720
	}
721
 
722
/**
723
 * Test that saving only some of the translated fields allows the record to be found again.
724
 *
725
 * @return void
726
 */
727
	public function testSavePartialFields() {
728
		$this->loadFixtures('Translate', 'TranslatedItem');
729
 
730
		$TestModel = new TranslatedItem();
731
		$TestModel->locale = 'spa';
732
		$data = array(
733
			'slug' => 'fourth_translated',
734
			'title' => 'Leyenda #4',
735
		);
736
		$TestModel->create($data);
737
		$TestModel->save();
738
		$result = $TestModel->read();
739
		$expected = array(
740
			'TranslatedItem' => array(
741
				'id' => $TestModel->id,
742
				'translated_article_id' => null,
743
				'locale' => 'spa',
744
				'content' => '',
745
			) + $data
746
		);
747
		$this->assertEquals($expected, $result);
748
	}
749
 
750
/**
751
 * Test that all fields are create with partial data + multiple locales.
752
 *
753
 * @return void
754
 */
755
	public function testSavePartialFieldMultipleLocales() {
756
		$this->loadFixtures('Translate', 'TranslatedItem');
757
 
758
		$TestModel = new TranslatedItem();
759
		$TestModel->locale = 'eng';
760
		$data = array(
761
			'slug' => 'fifth_translated',
762
			'title' => array('eng' => 'Title #5', 'spa' => 'Leyenda #5'),
763
		);
764
		$TestModel->create($data);
765
		$TestModel->save();
766
		$TestModel->unbindTranslation();
767
 
768
		$translations = array('title' => 'Title', 'content' => 'Content');
769
		$TestModel->bindTranslation($translations, false);
770
		$result = $TestModel->read(null, $TestModel->id);
771
		$expected = array(
772
			'TranslatedItem' => array(
773
				'id' => '4',
774
				'translated_article_id' => null,
775
				'slug' => 'fifth_translated',
776
				'locale' => 'eng',
777
				'title' => 'Title #5',
778
				'content' => ''
779
			),
780
			'Title' => array(
781
 
782
					'id' => '19',
783
					'locale' => 'eng',
784
					'model' => 'TranslatedItem',
785
					'foreign_key' => '4',
786
					'field' => 'title',
787
					'content' => 'Title #5'
788
				),
789
				1 => array(
790
					'id' => '20',
791
					'locale' => 'spa',
792
					'model' => 'TranslatedItem',
793
					'foreign_key' => '4',
794
					'field' => 'title',
795
					'content' => 'Leyenda #5'
796
				)
797
			),
798
			'Content' => array(
799
 
800
					'id' => '21',
801
					'locale' => 'eng',
802
					'model' => 'TranslatedItem',
803
					'foreign_key' => '4',
804
					'field' => 'content',
805
					'content' => ''
806
				),
807
				1 => array(
808
					'id' => '22',
809
					'locale' => 'spa',
810
					'model' => 'TranslatedItem',
811
					'foreign_key' => '4',
812
					'field' => 'content',
813
					'content' => ''
814
				)
815
			)
816
		);
817
		$this->assertEquals($expected, $result);
818
	}
819
 
820
/**
821
 * testSaveUpdate method
822
 *
823
 * @return void
824
 */
825
	public function testSaveUpdate() {
826
		$this->loadFixtures('Translate', 'TranslatedItem');
827
 
828
		$TestModel = new TranslatedItem();
829
		$TestModel->locale = 'spa';
830
		$oldData = array('slug' => 'fourth_translated', 'title' => 'Leyenda #4', 'translated_article_id' => 1);
831
		$TestModel->create($oldData);
832
		$TestModel->save();
833
		$id = $TestModel->id;
834
		$newData = array('id' => $id, 'content' => 'Contenido #4');
835
		$TestModel->create($newData);
836
		$TestModel->save();
837
		$result = $TestModel->read(null, $id);
838
		$expected = array('TranslatedItem' => array_merge($oldData, $newData, array('locale' => 'spa')));
839
		$this->assertEquals($expected, $result);
840
	}
841
 
842
/**
843
 * testMultipleCreate method
844
 *
845
 * @return void
846
 */
847
	public function testMultipleCreate() {
848
		$this->loadFixtures('Translate', 'TranslatedItem');
849
 
850
		$TestModel = new TranslatedItem();
851
		$TestModel->locale = 'deu';
852
		$data = array(
853
			'slug' => 'new_translated',
854
			'title' => array('eng' => 'New title', 'spa' => 'Nuevo leyenda'),
855
			'content' => array('eng' => 'New content', 'spa' => 'Nuevo contenido')
856
		);
857
		$TestModel->create($data);
858
		$TestModel->save();
859
 
860
		$TestModel->unbindTranslation();
861
		$translations = array('title' => 'Title', 'content' => 'Content');
862
		$TestModel->bindTranslation($translations, false);
863
		$TestModel->locale = array('eng', 'spa');
864
 
865
		$result = $TestModel->read();
866
		$expected = array(
867
			'TranslatedItem' => array(
868
				'id' => 4,
869
				'slug' => 'new_translated',
870
				'locale' => 'eng',
871
				'title' => 'New title',
872
				'content' => 'New content',
873
				'translated_article_id' => null,
874
			),
875
			'Title' => array(
876
				array('id' => 21, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 4, 'field' => 'title', 'content' => 'New title'),
877
				array('id' => 22, 'locale' => 'spa', 'model' => 'TranslatedItem', 'foreign_key' => 4, 'field' => 'title', 'content' => 'Nuevo leyenda')
878
			),
879
			'Content' => array(
880
				array('id' => 19, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 4, 'field' => 'content', 'content' => 'New content'),
881
				array('id' => 20, 'locale' => 'spa', 'model' => 'TranslatedItem', 'foreign_key' => 4, 'field' => 'content', 'content' => 'Nuevo contenido')
882
			)
883
		);
884
		$this->assertEquals($expected, $result);
885
	}
886
 
887
/**
888
 * testMultipleUpdate method
889
 *
890
 * @return void
891
 */
892
	public function testMultipleUpdate() {
893
		$this->loadFixtures('Translate', 'TranslatedItem');
894
 
895
		$TestModel = new TranslatedItem();
896
		$TestModel->locale = 'eng';
897
		$TestModel->validate['title'] = 'notEmpty';
898
		$data = array('TranslatedItem' => array(
899
			'id' => 1,
900
			'title' => array('eng' => 'New Title #1', 'deu' => 'Neue Titel #1', 'cze' => 'Novy Titulek #1'),
901
			'content' => array('eng' => 'New Content #1', 'deu' => 'Neue Inhalt #1', 'cze' => 'Novy Obsah #1')
902
		));
903
		$TestModel->create();
904
		$TestModel->save($data);
905
 
906
		$TestModel->unbindTranslation();
907
		$translations = array('title' => 'Title', 'content' => 'Content');
908
		$TestModel->bindTranslation($translations, false);
909
		$result = $TestModel->read(null, 1);
910
		$expected = array(
911
			'TranslatedItem' => array(
912
				'id' => '1',
913
				'slug' => 'first_translated',
914
				'locale' => 'eng',
915
				'title' => 'New Title #1',
916
				'content' => 'New Content #1',
917
				'translated_article_id' => 1,
918
			),
919
			'Title' => array(
920
				array('id' => 1, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'New Title #1'),
921
				array('id' => 3, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Neue Titel #1'),
922
				array('id' => 5, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Novy Titulek #1')
923
			),
924
			'Content' => array(
925
				array('id' => 2, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'New Content #1'),
926
				array('id' => 4, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Neue Inhalt #1'),
927
				array('id' => 6, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Novy Obsah #1')
928
			)
929
		);
930
		$this->assertEquals($expected, $result);
931
 
932
		$TestModel->unbindTranslation($translations);
933
		$TestModel->bindTranslation(array('title', 'content'), false);
934
	}
935
 
936
/**
937
 * testMixedCreateUpdateWithArrayLocale method
938
 *
939
 * @return void
940
 */
941
	public function testMixedCreateUpdateWithArrayLocale() {
942
		$this->loadFixtures('Translate', 'TranslatedItem');
943
 
944
		$TestModel = new TranslatedItem();
945
		$TestModel->locale = array('cze', 'deu');
946
		$data = array('TranslatedItem' => array(
947
			'id' => 1,
948
			'title' => array('eng' => 'Updated Title #1', 'spa' => 'Nuevo leyenda #1'),
949
			'content' => 'Upraveny obsah #1'
950
		));
951
		$TestModel->create();
952
		$TestModel->save($data);
953
 
954
		$TestModel->unbindTranslation();
955
		$translations = array('title' => 'Title', 'content' => 'Content');
956
		$TestModel->bindTranslation($translations, false);
957
		$result = $TestModel->read(null, 1);
958
		$result['Title'] = Hash::sort($result['Title'], '{n}.id', 'asc');
959
		$result['Content'] = Hash::sort($result['Content'], '{n}.id', 'asc');
960
		$expected = array(
961
			'TranslatedItem' => array(
962
				'id' => 1,
963
				'slug' => 'first_translated',
964
				'locale' => 'cze',
965
				'title' => 'Titulek #1',
966
				'content' => 'Upraveny obsah #1',
967
				'translated_article_id' => 1,
968
			),
969
			'Title' => array(
970
				array('id' => 1, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Updated Title #1'),
971
				array('id' => 3, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titel #1'),
972
				array('id' => 5, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Titulek #1'),
973
				array('id' => 19, 'locale' => 'spa', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'title', 'content' => 'Nuevo leyenda #1')
974
			),
975
			'Content' => array(
976
				array('id' => 2, 'locale' => 'eng', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Content #1'),
977
				array('id' => 4, 'locale' => 'deu', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Inhalt #1'),
978
				array('id' => 6, 'locale' => 'cze', 'model' => 'TranslatedItem', 'foreign_key' => 1, 'field' => 'content', 'content' => 'Upraveny obsah #1')
979
			)
980
		);
981
		$this->assertEquals($expected, $result);
982
	}
983
 
984
/**
985
 * Test that saveAll() works with hasMany associations that contain
986
 * translations.
987
 *
988
 * @return void
989
 */
990
	public function testSaveAllTranslatedAssociations() {
991
		$this->loadFixtures('Translate', 'TranslateArticle', 'TranslatedItem', 'TranslatedArticle', 'User');
992
		$Model = new TranslatedArticle();
993
		$Model->locale = 'eng';
994
 
995
		$data = array(
996
			'TranslatedArticle' => array(
997
				'id' => 4,
998
				'user_id' => 1,
999
				'published' => 'Y',
1000
				'title' => 'Title (eng) #1',
1001
				'body' => 'Body (eng) #1'
1002
			),
1003
			'TranslatedItem' => array(
1004
				array(
1005
					'slug' => '',
1006
					'title' => 'Nuevo leyenda #1',
1007
					'content' => 'Upraveny obsah #1'
1008
				),
1009
				array(
1010
					'slug' => '',
1011
					'title' => 'New Title #2',
1012
					'content' => 'New Content #2'
1013
				),
1014
			)
1015
		);
1016
		$result = $Model->saveAll($data);
1017
		$this->assertTrue($result);
1018
 
1019
		$result = $Model->TranslatedItem->find('all', array(
1020
			'conditions' => array('translated_article_id' => $Model->id)
1021
		));
1022
		$this->assertCount(2, $result);
1023
		$this->assertEquals($data['TranslatedItem'][0]['title'], $result[0]['TranslatedItem']['title']);
1024
		$this->assertEquals($data['TranslatedItem'][1]['title'], $result[1]['TranslatedItem']['title']);
1025
	}
1026
 
1027
/**
1028
 * testValidation method
1029
 *
1030
 * @return void
1031
 */
1032
	public function testValidation() {
1033
		Configure::write('Config.language', 'eng');
1034
		$this->loadFixtures('Translate', 'TranslatedItem');
1035
 
1036
		$TestModel = new TranslatedItem();
1037
		$TestModel->locale = 'eng';
1038
		$TestModel->validate['title'] = '/Only this title/';
1039
		$data = array(
1040
			'TranslatedItem' => array(
1041
				'id' => 1,
1042
				'title' => array('eng' => 'New Title #1', 'deu' => 'Neue Titel #1', 'cze' => 'Novy Titulek #1'),
1043
				'content' => array('eng' => 'New Content #1', 'deu' => 'Neue Inhalt #1', 'cze' => 'Novy Obsah #1')
1044
			)
1045
		);
1046
		$TestModel->create();
1047
		$this->assertFalse($TestModel->save($data));
1048
		$this->assertEquals(array('This field cannot be left blank'), $TestModel->validationErrors['title']);
1049
 
1050
		$TestModel->locale = 'eng';
1051
		$TestModel->validate['title'] = '/Only this title/';
1052
		$data = array('TranslatedItem' => array(
1053
			'id' => 1,
1054
			'title' => array('eng' => 'Only this title', 'deu' => 'Neue Titel #1', 'cze' => 'Novy Titulek #1'),
1055
			'content' => array('eng' => 'New Content #1', 'deu' => 'Neue Inhalt #1', 'cze' => 'Novy Obsah #1')
1056
		));
1057
		$TestModel->create();
1058
		$result = $TestModel->save($data);
1059
		$this->assertFalse(empty($result));
1060
	}
1061
 
1062
/**
1063
 * test restoring fields after temporary binds method
1064
 *
1065
 * @return void
1066
 */
1067
	public function testFieldsRestoreAfterBind() {
1068
		$this->loadFixtures('Translate', 'TranslatedItem');
1069
 
1070
		$TestModel = new TranslatedItem();
1071
 
1072
		$translations = array('title' => 'Title');
1073
		$TestModel->bindTranslation($translations);
1074
 
1075
		$result = $TestModel->find('first');
1076
		$this->assertArrayHasKey('Title', $result);
1077
		$this->assertArrayHasKey('content', $result['Title'][0]);
1078
		$this->assertArrayNotHasKey('title', $result);
1079
 
1080
		$result = $TestModel->find('first');
1081
		$this->assertArrayNotHasKey('Title', $result);
1082
		$this->assertEquals('Title #1', $result['TranslatedItem']['title']);
1083
	}
1084
 
1085
/**
1086
 * testAttachDetach method
1087
 *
1088
 * @return void
1089
 */
1090
	public function testAttachDetach() {
1091
		$this->loadFixtures('Translate', 'TranslatedItem');
1092
 
1093
		$TestModel = new TranslatedItem();
1094
 
1095
		$TestModel->unbindTranslation();
1096
		$translations = array('title' => 'Title', 'content' => 'Content');
1097
		$TestModel->bindTranslation($translations, false);
1098
 
1099
		$result = array_keys($TestModel->hasMany);
1100
		$expected = array('Title', 'Content');
1101
		$this->assertEquals($expected, $result);
1102
 
1103
		$TestModel->Behaviors->unload('Translate');
1104
		$result = array_keys($TestModel->hasMany);
1105
		$expected = array();
1106
		$this->assertEquals($expected, $result);
1107
 
1108
		$result = isset($TestModel->Behaviors->Translate);
1109
		$this->assertFalse($result);
1110
 
1111
		$result = isset($Behavior->settings[$TestModel->alias]);
1112
		$this->assertFalse($result);
1113
 
1114
		$result = isset($Behavior->runtime[$TestModel->alias]);
1115
		$this->assertFalse($result);
1116
 
1117
		$TestModel->Behaviors->load('Translate', array('title' => 'Title', 'content' => 'Content'));
1118
		$result = array_keys($TestModel->hasMany);
1119
		$expected = array('Title', 'Content');
1120
		$this->assertEquals($expected, $result);
1121
 
1122
		$result = isset($TestModel->Behaviors->Translate);
1123
		$this->assertTrue($result);
1124
 
1125
		$Behavior = $TestModel->Behaviors->Translate;
1126
 
1127
		$result = isset($Behavior->settings[$TestModel->alias]);
1128
		$this->assertTrue($result);
1129
 
1130
		$result = isset($Behavior->runtime[$TestModel->alias]);
1131
		$this->assertTrue($result);
1132
	}
1133
 
1134
/**
1135
 * testAnotherTranslateTable method
1136
 *
1137
 * @return void
1138
 */
1139
	public function testAnotherTranslateTable() {
1140
		$this->loadFixtures('Translate', 'TranslatedItem', 'TranslateTable');
1141
 
1142
		$TestModel = new TranslatedItemWithTable();
1143
		$TestModel->locale = 'eng';
1144
		$result = $TestModel->read(null, 1);
1145
		$expected = array(
1146
			'TranslatedItemWithTable' => array(
1147
				'id' => 1,
1148
				'slug' => 'first_translated',
1149
				'locale' => 'eng',
1150
				'title' => 'Another Title #1',
1151
				'content' => 'Another Content #1',
1152
				'translated_article_id' => 1,
1153
			)
1154
		);
1155
		$this->assertEquals($expected, $result);
1156
	}
1157
 
1158
/**
1159
 * testTranslateWithAssociations method
1160
 *
1161
 * @return void
1162
 */
1163
	public function testTranslateWithAssociations() {
1164
		$this->loadFixtures('TranslateArticle', 'TranslatedArticle', 'TranslatedItem', 'User', 'Comment', 'ArticlesTag', 'Tag');
1165
 
1166
		$TestModel = new TranslatedArticle();
1167
		$TestModel->locale = 'eng';
1168
		$recursive = $TestModel->recursive;
1169
 
1170
		$result = $TestModel->read(null, 1);
1171
		$expected = array(
1172
			'TranslatedArticle' => array(
1173
				'id' => 1,
1174
				'user_id' => 1,
1175
				'published' => 'Y',
1176
				'created' => '2007-03-18 10:39:23',
1177
				'updated' => '2007-03-18 10:41:31',
1178
				'locale' => 'eng',
1179
				'title' => 'Title (eng) #1',
1180
				'body' => 'Body (eng) #1'
1181
			),
1182
			'User' => array(
1183
				'id' => 1,
1184
				'user' => 'mariano',
1185
				'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
1186
				'created' => '2007-03-17 01:16:23',
1187
				'updated' => '2007-03-17 01:18:31'
1188
			),
1189
			'TranslatedItem' => array(
1190
				array(
1191
					'id' => 1,
1192
					'translated_article_id' => 1,
1193
					'slug' => 'first_translated'
1194
				),
1195
				array(
1196
					'id' => 2,
1197
					'translated_article_id' => 1,
1198
					'slug' => 'second_translated'
1199
				),
1200
				array(
1201
					'id' => 3,
1202
					'translated_article_id' => 1,
1203
					'slug' => 'third_translated'
1204
				),
1205
			)
1206
		);
1207
		$this->assertEquals($expected, $result);
1208
 
1209
		$result = $TestModel->find('all', array('recursive' => -1));
1210
		$expected = array(
1211
			array(
1212
				'TranslatedArticle' => array(
1213
					'id' => 1,
1214
					'user_id' => 1,
1215
					'published' => 'Y',
1216
					'created' => '2007-03-18 10:39:23',
1217
					'updated' => '2007-03-18 10:41:31',
1218
					'locale' => 'eng',
1219
					'title' => 'Title (eng) #1',
1220
					'body' => 'Body (eng) #1'
1221
				)
1222
			),
1223
			array(
1224
				'TranslatedArticle' => array(
1225
					'id' => 2,
1226
					'user_id' => 3,
1227
					'published' => 'Y',
1228
					'created' => '2007-03-18 10:41:23',
1229
					'updated' => '2007-03-18 10:43:31',
1230
					'locale' => 'eng',
1231
					'title' => 'Title (eng) #2',
1232
					'body' => 'Body (eng) #2'
1233
				)
1234
			),
1235
			array(
1236
				'TranslatedArticle' => array(
1237
					'id' => 3,
1238
					'user_id' => 1,
1239
					'published' => 'Y',
1240
					'created' => '2007-03-18 10:43:23',
1241
					'updated' => '2007-03-18 10:45:31',
1242
					'locale' => 'eng',
1243
					'title' => 'Title (eng) #3',
1244
					'body' => 'Body (eng) #3'
1245
				)
1246
			)
1247
		);
1248
		$this->assertEquals($expected, $result);
1249
		$this->assertEquals($TestModel->recursive, $recursive);
1250
 
1251
		$TestModel->recursive = -1;
1252
		$result = $TestModel->read(null, 1);
1253
		$expected = array(
1254
			'TranslatedArticle' => array(
1255
				'id' => 1,
1256
				'user_id' => 1,
1257
				'published' => 'Y',
1258
				'created' => '2007-03-18 10:39:23',
1259
				'updated' => '2007-03-18 10:41:31',
1260
				'locale' => 'eng',
1261
				'title' => 'Title (eng) #1',
1262
				'body' => 'Body (eng) #1'
1263
			)
1264
		);
1265
		$this->assertEquals($expected, $result);
1266
	}
1267
 
1268
/**
1269
 * testTranslateTableWithPrefix method
1270
 * Tests that is possible to have a translation model with a custom tablePrefix
1271
 *
1272
 * @return void
1273
 */
1274
	public function testTranslateTableWithPrefix() {
1275
		$this->loadFixtures('TranslateWithPrefix', 'TranslatedItem');
1276
		$TestModel = new TranslatedItem2;
1277
		$TestModel->locale = 'eng';
1278
		$result = $TestModel->read(null, 1);
1279
		$expected = array('TranslatedItem' => array(
1280
			'id' => 1,
1281
			'slug' => 'first_translated',
1282
			'locale' => 'eng',
1283
			'content' => 'Content #1',
1284
			'title' => 'Title #1',
1285
			'translated_article_id' => 1,
1286
		));
1287
		$this->assertEquals($expected, $result);
1288
	}
1289
 
1290
/**
1291
 * Test infinite loops not occurring with unbindTranslation()
1292
 *
1293
 * @return void
1294
 */
1295
	public function testUnbindTranslationInfinteLoop() {
1296
		$this->loadFixtures('Translate', 'TranslatedItem');
1297
 
1298
		$TestModel = new TranslatedItem();
1299
		$TestModel->Behaviors->unload('Translate');
1300
		$TestModel->actsAs = array();
1301
		$TestModel->Behaviors->load('Translate');
1302
		$TestModel->bindTranslation(array('title', 'content'), true);
1303
		$result = $TestModel->unbindTranslation();
1304
 
1305
		$this->assertFalse($result);
1306
	}
1307
 
1308
/**
1309
 * Test that an exception is raised when you try to over-write the name attribute.
1310
 *
1311
 * @expectedException CakeException
1312
 * @return void
1313
 */
1314
	public function testExceptionOnNameTranslation() {
1315
		$this->loadFixtures('Translate', 'TranslatedItem');
1316
		$TestModel = new TranslatedItem();
1317
		$TestModel->bindTranslation(array('name' => 'name'));
1318
	}
1319
 
1320
/**
1321
 * Test that translations can be bound and unbound dynamically.
1322
 *
1323
 * @return void
1324
 */
1325
	public function testUnbindTranslation() {
1326
		$this->loadFixtures('Translate', 'TranslatedItem');
1327
		$Model = new TranslatedItem();
1328
		$Model->unbindTranslation();
1329
		$Model->bindTranslation(array('body', 'slug'), false);
1330
 
1331
		$result = $Model->Behaviors->Translate->settings['TranslatedItem'];
1332
		$this->assertEquals(array('body', 'slug'), $result);
1333
 
1334
		$Model->unbindTranslation(array('body'));
1335
		$result = $Model->Behaviors->Translate->settings['TranslatedItem'];
1336
		$this->assertNotContains('body', $result);
1337
 
1338
		$Model->unbindTranslation('slug');
1339
		$result = $Model->Behaviors->Translate->settings['TranslatedItem'];
1340
		$this->assertNotContains('slug', $result);
1341
	}
1342
 
1343
/**
1344
 * Test that additional records are not inserted for associated translations.
1345
 *
1346
 * @return void
1347
 */
1348
	public function testNoExtraRowsForAssociatedTranslations() {
1349
		$this->loadFixtures('Translate', 'TranslatedItem');
1350
		$TestModel = new TranslatedItem();
1351
		$TestModel->locale = 'spa';
1352
		$TestModel->unbindTranslation();
1353
		$TestModel->bindTranslation(array('name' => 'nameTranslate'));
1354
 
1355
		$data = array(
1356
			'TranslatedItem' => array(
1357
				'slug' => 'spanish-name',
1358
				'name' => 'Spanish name',
1359
			),
1360
		);
1361
		$TestModel->create($data);
1362
		$TestModel->save();
1363
 
1364
		$Translate = $TestModel->translateModel();
1365
		$results = $Translate->find('all', array(
1366
			'conditions' => array(
1367
				'locale' => $TestModel->locale,
1368
				'foreign_key' => $TestModel->id
1369
			)
1370
		));
1371
		$this->assertCount(1, $results, 'Only one field should be saved');
1372
		$this->assertEquals('name', $results[0]['TranslateTestModel']['field']);
1373
	}
1374
 
1375
}