Skip to content

Commit

Permalink
fixing up the tests for sluggable and a small issue in the query
Browse files Browse the repository at this point in the history
  • Loading branch information
dogmatic69 committed Aug 24, 2012
1 parent 4e865f5 commit a551eac
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 26 deletions.
26 changes: 14 additions & 12 deletions Core/Libs/Model/Behavior/SluggableBehavior.php
Expand Up @@ -61,21 +61,21 @@ public function setup($Model, $settings = array()) {

$field = $Model->schema($this->__settings[$Model->alias]['slug']);
$this->__settings[$Model->alias]['length'] = $field['length'];

if (!is_array($this->__settings[$Model->alias]['label'])) {
$this->__settings[$Model->alias]['label'] = array($this->__settings[$Model->alias]['label']);
}

foreach ($this->__settings[$Model->alias]['label'] as $k => $field) {
if (!$Model->hasField($field)) {
unset($this->__settings[$Model->alias]['label'][$k]);
}

if($field == $this->__settings[$Model->alias]['slug']) {
throw new Exception(sprintf('Model "%s" can not slug its slug field "%s"', $Model->alias, $this->__settings[$Model->alias]['slug']));
}
}

if(empty($this->__settings[$Model->alias]['label'])) {
throw new Exception(sprintf('Model "%s" has no sluggable fields', $Model->alias));
}
Expand All @@ -94,22 +94,22 @@ public function setup($Model, $settings = array()) {
*/
public function beforeSave($Model) {
$return = parent::beforeSave($Model);

$isBlank = false;
if(isset($Model->data[$Model->alias][$this->__settings[$Model->alias]['slug']]) && empty($Model->data[$Model->alias][$this->__settings[$Model->alias]['slug']])) {
$isBlank = true;
}

$shouldSlug = $Model->hasField($this->__settings[$Model->alias]['slug']) && (
$isBlank ||
$this->__settings[$Model->alias]['overwrite'] ||
$isBlank ||
$this->__settings[$Model->alias]['overwrite'] ||
empty($Model->id)
);

if(!$shouldSlug) {
return $return;
}

$label = '';
foreach ($this->__settings[$Model->alias]['label'] as $field) {
if (!empty($Model->data[$Model->alias][$field])) {
Expand All @@ -120,9 +120,11 @@ public function beforeSave($Model) {
if (empty($label)) {
return $return;
}

$slug = $this->__slug($label, $this->__settings[$Model->alias]);
$conditions = array($Model->alias . '.' . $this->__settings[$Model->alias]['slug'] => 'LIKE ' . $slug . '%');
$conditions = array(
sprintf('%s.%s LIKE', $Model->alias, $this->__settings[$Model->alias]['slug']) => $slug . '%'
);

if (!empty($Model->id)) {
$conditions[$Model->alias . '.' . $Model->primaryKey] = '!= ' . $Model->id;
Expand Down
@@ -1,20 +1,21 @@
<?php
App::uses('SluggableBehavior', 'Libs.Model/Behavior');
App::uses('GlobalContent', 'Contents.Model');

App::uses('Model', 'Model');

class GlobalContentTest extends Model {
public $useTable = 'global_contents';

public $alias = 'GlobalContent';

public $actsAs = array(
'Libs.Sluggable' => array(
'label' => 'title'
)
);

public $belongsTo = array();

public $hasMany = array();
}

Expand All @@ -26,17 +27,17 @@ class SluggableBehaviorTestCase extends CakeTestCase {
public $fixtures = array(
'plugin.contents.global_content'
);

/**
* setUp method
*
* @return void
*/
public function setUp() {
parent::setUp();

$this->GlobalContent = ClassRegistry::init('GlobalContentTest');

$this->Sluggable = new SluggableBehavior();
}

Expand All @@ -50,28 +51,28 @@ public function tearDown() {

parent::tearDown();
}

public function testSluggin() {
$data = array('title' => 'abc 123');
$this->assertTrue((bool)$this->GlobalContent->save(array('GlobalContent' => $data)));
$id = $this->GlobalContent->id;

$expected = array('GlobalContent' => array('title' => 'abc 123', 'slug' => 'abc-123'));
$result = $this->GlobalContent->find('first', array('fields' => array('title', 'slug'), 'conditions' => array('id' => $id)));
$this->assertEqual($result, $expected);

$data['id'] = $id;
$data['slug'] = 'custom';
$this->assertTrue((bool)$this->GlobalContent->save(array('GlobalContent' => $data)));

$expected = array('GlobalContent' => array('title' => 'abc 123', 'slug' => 'custom'));
$result = $this->GlobalContent->find('first', array('fields' => array('title', 'slug'), 'conditions' => array('id' => $id)));
$this->assertEqual($result, $expected);

$data['id'] = $id;
$data['slug'] = '';
$this->assertTrue((bool)$this->GlobalContent->save(array('GlobalContent' => $data)));

$expected = array('GlobalContent' => array('title' => 'abc 123', 'slug' => 'abc-123'));
$result = $this->GlobalContent->find('first', array('fields' => array('title', 'slug'), 'conditions' => array('id' => $id)));
$this->assertEqual($result, $expected);
Expand Down

0 comments on commit a551eac

Please sign in to comment.