ソースを参照

tests for logable behavior

euromark 12 年 前
コミット
a3097d1c4c

+ 636 - 0
Test/Case/Model/Behavior/LogableBehaviorTest.php

@@ -0,0 +1,636 @@
+<?php
+App::uses('LogableBehavior', 'Tools.Model/Behavior');
+App::uses('Log', 'Tools.Model');
+
+class LogableBehaviorTest extends CakeTestCase {
+
+	public $Log = null;
+
+	public $fixtures = array('core.cake_session', 'plugin.tools.logable_log', 'plugin.tools.logable_book', 'plugin.tools.logable_user', 'plugin.tools.logable_comment', 'core.user');
+
+	public function setUp() {
+		parent::setUp();
+
+		Configure::write('Config.language', 'eng');
+
+		$this->LogableBook = ClassRegistry::init('LogableBook');
+		$this->Log = ClassRegistry::init('LogableLog');
+		//die(debug($this->Log->find('all')));
+		$this->LogableUser = ClassRegistry::init('LogableUser');
+		$this->LogableComment = ClassRegistry::init('LogableComment');
+	}
+
+	public function tearDown() {
+		parent::tearDown();
+		unset($this->LogableBook);
+		unset($this->Log);
+		unset($this->LogableUser);
+		unset($this->LogableComment);
+	}
+
+	public function testFindLog() {
+		// no params should give all log items of current model
+		$result = $this->LogableBook->findLog(array('order' => 'LogableLog.id DESC'));
+		$result = Set::combine($result, '/LogableLog/id', '/LogableLog/description');
+
+		$expected = array(
+			5 => 'LogableBook "New Book" (7) added by LogableUser "Steven" (301).',
+			4 => 'LogableBook "Fifth Book" (6) deleted by LogableUser "Alexander" (66).',
+			2 => 'LogableBook "Fifth Book" (6) updated by LogableUser "Alexander" (66).',
+			1 => 'LogableBook "Fifth Book" (6) created by LogableUser "Alexander" (66).'
+		);
+		$this->assertEquals($expected, $result);
+
+		// asking for user, but not model, so should just get users changes on current model
+		$expected = array(
+			5 => 'LogableBook "New Book" (7) added by LogableUser "Steven" (301).'
+		);
+		$result = $this->LogableBook->findLog(array('user_id'=>301, 'order' => 'id DESC'));
+		$result = Set::combine($result, '/LogableLog/id', '/LogableLog/description');
+
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			5 => 'LogableBook "New Book" (7) added by LogableUser "Steven" (301).'
+		);
+		$result = $this->LogableBook->findLog(array('foreign_id' => 7, 'order' => 'id DESC'));
+		$result = Set::combine($result, '/LogableLog/id', '/LogableLog/description');
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 4)),
+			1 => array('LogableLog' => array('id' => 2)),
+			2 => array('LogableLog' => array('id' => 1))
+		);
+		$result = $this->LogableBook->findLog(array('foreign_id'=>6, 'fields' => array('id'), 'order' => 'id DESC'));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(0 => array('LogableLog' => array('id' => 4)));
+		$result = $this->LogableBook->findLog(array('action' => 'delete', 'fields' => array('id'), 'order' => 'id DESC'));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5)),
+			1 => array('LogableLog' => array('id' => 1))
+		);
+		$result = $this->LogableBook->findLog(array('action' => 'add', 'fields' => array('id'), 'order' => 'id DESC'));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(0 => array('LogableLog' => array('id' => 2)));
+		$result = $this->LogableBook->findLog(array('action' => 'edit', 'fields' => array('id'), 'order' => 'id DESC'));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5)),
+			1 => array('LogableLog' => array('id' => 1))
+		);
+		$result = $this->LogableBook->findLog(array(
+			'action' => 'add',
+			'fields' => array('id'),
+			'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5)),
+			1 => array('LogableLog' => array('id' => 1))
+		);
+		$result = $this->LogableBook->findLog(array(
+			'action' => 'add',
+			'fields' => array('id'),
+			'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(0 => array('LogableLog' => array('id' => 4)));
+		$result = $this->LogableBook->findLog(array(
+			'fields' => array('id'),
+			'conditions' => array('user_id' < 300, 'action' => 'delete'),
+			'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testFindLogMoreModels() {
+		// all actions of user Steven
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5)),
+			1 => array('LogableLog' => array('id' => 3))
+		);
+		$result = $this->LogableBook->findLog(array(
+			'fields' => array('id'),
+			'user_id' => 301,
+			'model' => false,
+			'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+
+		// all delete actions of user Alexander
+		$expected = array(0 => array('LogableLog' => array('id' => 4)));
+		$result = $this->LogableBook->findLog(array(
+			'fields' => array('id'),
+			'user_id' => 66,
+			'action' => 'delete',
+			'model' => false,
+			 'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+
+		// get a differnt models logs
+		$expected = array(0 => array('LogableLog' => array('id' => 3)));
+		$result = $this->LogableBook->findLog(array(
+			'fields' => array('id'),
+			'order' => 'id ASC',
+			'model' => 'LogableUser',
+			'order' => 'id DESC'
+		));
+		$this->assertEquals($expected, $result);
+
+	}
+
+	public function testFindUserActions() {
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5)),
+			1 => array('LogableLog' => array('id' => 3))
+		);
+		$result = $this->LogableBook->findUserActions(301, array('fields' => 'id'));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 4, 'event' => 'Alexander deleted the logablebook(id 6)')),
+			1 => array('LogableLog' => array('id' => 2, 'event' => 'Alexander edited title of logablebook(id 6)')),
+			2 => array('LogableLog' => array('id' => 1, 'event' => 'Alexander added a logablebook(id 6)'))
+		);
+		$result = $this->LogableBook->findUserActions(66, array('events' => true));
+		$this->assertEquals($expected, $result);
+
+		$expected = array(
+			0 => array('LogableLog' => array('id' => 5))
+		);
+		$result = $this->LogableBook->findUserActions(301, array('fields' => 'id', 'model' => 'LogableBook'));
+		$this->assertEquals($expected, $result);
+
+	}
+
+	public function testAddingModels() {
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'Denver')));
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+
+		$this->assertEquals('Denver', $result['LogableLog']['title']);
+		$this->assertEquals('add', $result['LogableLog']['action']);
+		$this->assertEquals('title', $result['LogableLog']['change']);
+		$this->assertEquals(7, $result['LogableLog']['foreign_id']);
+		$result = Set::combine($result, '/LogableLog/id', '/LogableLog/description');
+
+		$expected = array(
+			6 => 'LogableBook "Denver" (7) added by System.'
+		);
+		// check with user
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->create();
+		$this->LogableBook->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'New Orleans')));
+		$this->LogableBook->clearUserData();
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+
+		$expected = array('LogableLog' => array(
+				'id' => 7,
+				'title' => 'New Orleans',
+				'description' => 'LogableBook "New Orleans" (8) added by LogableUser "Alexander" (66).',
+				'model' => 'LogableBook',
+				'foreign_id' => 8,
+				'action' => 'add',
+				'user_id' => 66,
+				'change' => 'title',
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testEditingModels() {
+		$data = array('LogableBook' => array('id' => 5, 'title' => 'Forth book'));
+		$this->LogableBook->save($data, false);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 6,
+				'title' => 'Forth book',
+				'description' => 'LogableBook "Forth book" (5) updated by System.',
+				'model' => 'LogableBook',
+				'foreign_id' => 5,
+				'action' => 'edit',
+				'user_id' => 0,
+				'change' => 'title',
+			));
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testDeletingModels() {
+		$this->LogableBook->delete(5);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 6,
+				'title' => 'Fourth Book',
+				'description' => 'LogableBook "Fourth Book" (5) deleted by System.',
+				'model' => 'LogableBook',
+				'foreign_id' => 5,
+				'action' => 'delete',
+				'user_id' => 0,
+				'change' => '',
+			));
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testUserLogging() {
+		$this->LogableUser->save(array('LogableUser'=>array('name'=>'Jonny')));
+		$result = $this->Log->get(6, array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change'));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 6,
+				'title' => 'Jonny',
+				'description' => 'LogableUser "Jonny" (302) added by System.',
+				'model' => 'LogableUser',
+				'foreign_id' => 302,
+				'action' => 'add',
+				'user_id' => 0,
+				'change' => 'name',
+			)
+		);
+		// check with LogableUser
+		$this->assertEquals($expected, $result);
+		$this->LogableUser->delete(302);
+		$result = $this->Log->get(7, array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change'));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 7,
+				'title' => 'Jonny',
+				'description' => 'LogableUser "Jonny" (302) deleted by System.',
+				'model' => 'LogableUser',
+				'foreign_id' => 302,
+				'action' => 'delete',
+				'user_id' => 0,
+				'change' => '',
+			)
+		);
+		// check with LogableUser
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testLoggingWithoutDisplayField() {
+		$this->LogableComment->save(array('LogableComment'=>array('content'=>'You too?')));
+		$result = $this->Log->get(6, array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change'));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 6,
+				'title' => 'LogableComment (5)',
+				'description' => 'LogableComment (5) added by System.',
+				'model' => 'LogableComment',
+				'foreign_id' => 5,
+				'action' => 'add',
+				'user_id' => 0,
+				'change' => 'content',
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testConfigurationsWithoutDescription() {
+		$description = $this->Log->schema('description');
+		$this->Log->removeSchema('description');
+		$this->LogableBook->create();
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'Denver XYZ', 'weight'=>1)));
+
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'Denver XYZ',
+				//'description' => 'LogableBook "Denver" (7) added by System.',
+				'description' => '',
+				'model' => 'LogableBook',
+				'foreign_id' => (string)7,
+				'action' => 'add',
+				'user_id' => (string)0,
+				'change' => 'title, weight',
+			)
+		);
+
+		$this->assertEquals($expected, $result);
+
+		$data = array('LogableBook' => array('id' => 5, 'title' => 'Forth book'));
+		$this->LogableBook->save($data, false);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 7,
+				'title' => 'Forth book',
+				//'description' => 'LogableBook "Forth book" (5) updated by System.',
+				'description' => '',
+				'model' => 'LogableBook',
+				'foreign_id' => 5,
+				'action' => 'edit',
+				'user_id' => 0,
+				'change' => 'title',
+			));
+
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->delete(5);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 8,
+				'title' => 'Forth book',
+				//'description' => 'LogableBook "Forth book" (5) deleted by System.',
+				'description' => '',
+				'model' => 'LogableBook',
+				'foreign_id' => 5,
+				'action' => 'delete',
+				'user_id' => 0,
+				'change' => '',
+			));
+		$this->assertEquals($expected, $result);
+
+		$this->Log->setSchema('description', $description);
+	}
+
+	public function testConfigurationsWithoutModel() {
+		$logSchema = $this->Log->schema();
+		$this->Log->removeSchema('description');
+		$this->Log->removeSchema('model');
+		$this->Log->removeSchema('foreign_id');
+
+		$this->LogableBook->create();
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'Denver')));
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'Denver',
+				//'description' => 'LogableBook "Denver" (7) added by System.',
+				'description' => '',
+				'model' => '',
+				'foreign_id' => '0',
+				'action' => 'add',
+				'user_id' => (string)0,
+				'change' => 'title',
+			)
+		);
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->delete(5);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => 7,
+				'title' => 'Fourth Book',
+				//'description' => 'LogableBook "Forth book" (5) deleted by System.',
+				'description' => '',
+				'model' => '',
+				'foreign_id' => '0',
+				'action' => 'delete',
+				'user_id' => 0,
+				'change' => '',
+			));
+
+		$this->assertEquals($expected, $result);
+
+		$this->Log->setSchema(null, $logSchema);
+	}
+
+	public function testConfiguratiosWithoutUserId() {
+		$this->Log->removeSchema('user_id');
+
+		$this->LogableBook->create();
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'New Orleans')));
+
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'New Orleans',
+				'description' => 'LogableBook "New Orleans" (7) added by System.',
+				'model' => 'LogableBook',
+				'foreign_id' => (string)7,
+				'action' => 'add',
+				'user_id' => '0',
+				'change' => 'title',
+			)
+		);
+
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->create();
+		$this->LogableBook->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'New York')));
+		$this->LogableBook->clearUserData();
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)7,
+				'title' => 'New York',
+				'description' => 'LogableBook "New York" (8) added by LogableUser "Alexander" (66).',
+				'model' => 'LogableBook',
+				'foreign_id' => (string)8,
+				'action' => 'add',
+				'user_id' => (string)66,
+				'change' => 'title',
+			)
+		);
+
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testConfiguratiosWithoutAction() {
+		$this->Log->removeSchema('user_id');
+
+		$this->LogableBook->create();
+		$this->LogableBook->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'New Orleans')));
+		$this->LogableBook->clearUserData();
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'New Orleans',
+				'description' => 'LogableBook "New Orleans" (7) added by LogableUser "Alexander" (66).',
+				'model' => 'LogableBook',
+				'foreign_id' => (string)7,
+				'action' => 'add',
+				'user_id' => (string)66,
+				'change' => 'title',
+			)
+		);
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->delete(5);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)7,
+				'title' => 'Fourth Book',
+				'description' => 'LogableBook "Fourth Book" (5) deleted by System.',
+				'model' => 'LogableBook',
+				'foreign_id' => (string)5,
+				'action' => 'delete',
+				'user_id' => '0',
+				'change' => '',
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testConfiguratiosDefaults() {
+		$this->Log->removeSchema('user_id');
+		$this->Log->removeSchema('model');
+		$this->Log->removeSchema('foreign_id');
+		$this->Log->removeSchema('action');
+		$this->Log->removeSchema('change');
+
+		$this->LogableBook->create();
+		$this->LogableBook->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableBook->save(array('LogableBook'=>array('title'=>'New Orleans')));
+		$this->LogableBook->clearUserData();
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'New Orleans',
+				'description' => 'LogableBook "New Orleans" (7) added by LogableUser "Alexander" (66).',
+				'model' => 'LogableBook',
+				'foreign_id' => '7',
+				'action' => 'add',
+				'user_id' => '66',
+				'change' => 'title'
+			)
+		);
+		$this->assertEquals($expected, $result);
+
+		$this->LogableBook->delete(5);
+		$result = $this->Log->find('last', array('fields' => array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change')));
+		$expected = array('LogableLog' => array(
+				'id' => (string)7,
+				'title' => 'Fourth Book',
+				'description' => 'LogableBook "Fourth Book" (5) deleted by System.',
+				'model' => 'LogableBook',
+				'foreign_id' => '5',
+				'action' => 'delete',
+				'user_id' => '0',
+				'change' => ''
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testConfigurationWithoutMost() {
+		$this->LogableComment->Behaviors->load('Logable', array('descriptionIds'=> false, 'userModel'=>'LogableUser'));
+		$this->LogableComment->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableComment->save(array('LogableComment'=>array('id'=>1, 'content'=>'You too?')));
+		$result = $this->Log->get(6, array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change'));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'LogableComment (1)',
+				'model' => 'LogableComment',
+				'foreign_id' => (string)1,
+				'action' => 'edit',
+				'user_id' => (string)66,
+				'change' => 'content',
+				'description' => 'LogableComment updated by LogableUser "Alexander".',
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testIgnoreExtraFields() {
+		$this->LogableComment->setUserData(array('LogableUser'=>array('id'=>66, 'name'=>'Alexander')));
+		$this->LogableComment->save(array('LogableComment'=>array('id'=>1, 'content'=>'You too?', 'extra_field'=>'some data')));
+		$result = $this->Log->get(6, array('id', 'title', 'description', 'model', 'foreign_id', 'action', 'user_id', 'change'));
+		$expected = array(
+			'LogableLog' => array(
+				'id' => (string)6,
+				'title' => 'LogableComment (1)',
+				'description' => 'LogableComment (1) updated by LogableUser "Alexander" (66).',
+				'model' => 'LogableComment',
+				'foreign_id' => (string)1,
+				'action' => 'edit',
+				'user_id' => (string)66,
+				'change' => 'content',
+			)
+		);
+		$this->assertEquals($expected, $result);
+	}
+
+	public function testIgnoreSetup() {
+		$log_rows_before = $this->Log->find('count', array('conditions' => array('model' => 'LogableUser', 'foreign_id' => 301)));
+		$this->LogableUser->save(array('id'=>301, 'counter' => 3));
+		$log_rows_after = $this->Log->find('count', array('conditions' => array('model' => 'LogableUser', 'foreign_id' => 301)));
+		$this->assertEquals($log_rows_after, $log_rows_before);
+
+		$this->LogableUser->save(array('id'=>301, 'name' => 'Steven Segal', 'counter' => 77));
+
+		$result = $this->Log->find('first', array(
+			'order' => 'LogableLog.id DESC',
+			'conditions' => array('model' => 'LogableUser', 'foreign_id' => 301)));
+		$this->assertEquals($result['LogableLog']['change'], 'name');
+	}
+
+
+}
+
+class LogableLog extends Log {
+
+	public $recursive = -1;
+
+	public $order = array('LogableLog.created'=>'DESC');
+
+	public $belongsTo = array(
+		'LogableUser' => array(
+			'className' => 'LogableUser',
+			'foreignKey' => 'user_id',
+			'fields' => array('id', 'name'),
+		),
+	);
+
+	public function removeSchema($field) {
+		if (!isset($this->_schema[$field])) {
+			return;
+		}
+		unset($this->_schema[$field]);
+	}
+
+	public function setSchema($field, $settings) {
+		if ($field === null) {
+			$this->_schema = $settings;
+			return;
+		}
+		$this->_schema[$field] = $settings;
+	}
+
+}
+
+class LogableTestModel extends CakeTestModel {
+
+	public $recursive = -1;
+
+}
+
+class LogableBook extends LogableTestModel {
+
+	public $actsAs = array(
+		'Tools.Logable' => array('userModel'=>'LogableUser', 'logModel'=>'LogableLog'),
+		//'Ordered' => array('foreign_key' => FALSE)
+	);
+
+	public $order = array('LogableBook.weight' => 'ASC');
+
+}
+
+class LogableUser extends LogableTestModel {
+
+	public $actsAs = array('Tools.Logable' => array('userModel'=>'LogableUser', 'logModel'=>'LogableLog', 'ignore'=>array('counter')));
+
+}
+
+class LogableComment extends LogableTestModel {
+
+	public $actsAs = array('Tools.Logable' => array('userModel'=>'LogableUser', 'logModel'=>'LogableLog', ));
+
+}

+ 17 - 0
Test/Fixture/LogableBookFixture.php

@@ -0,0 +1,17 @@
+<?php
+class LogableBookFixture extends CakeTestFixture {
+
+	public $fields = array(
+		'id' => array('type' => 'integer', 'key' => 'primary'),
+		'title' => array('type' => 'string', 'length' => 255, 'null' => false),
+		'weight' => array('type' => 'integer', 'null' => false)
+	);
+	public $records = array(
+		array('id' => 3, 'title' => 'Sixth Book', 'weight' => 6 ),
+		array('id' => 6, 'title' => 'Fifth Book', 'weight' => 5 ),
+		array('id' => 2, 'title' => 'First Book', 'weight' => 1 ),
+		array('id' => 1, 'title' => 'Second Book','weight' => 2 ),
+		array('id' => 4, 'title' => 'Third Book', 'weight' => 3 ),
+		array('id' => 5, 'title' => 'Fourth Book','weight' => 4 )
+	);
+}

+ 16 - 0
Test/Fixture/LogableCommentFixture.php

@@ -0,0 +1,16 @@
+<?php
+class LogableCommentFixture extends CakeTestFixture {
+
+
+	public $fields = array(
+		'id' => array('type' => 'integer', 'key' => 'primary'),
+		'content' => array('type' => 'string', 'length' => 255, 'null' => false),
+	);
+	public $records = array(
+		array('id' => 1, 'content' => 'I like it'),
+		array('id' => 2, 'content' => 'I don\'t'),
+		array('id' => 3, 'content' => 'I LOVE it!'),
+		array('id' => 4, 'content' => 'I hate it'),
+
+	);
+}

+ 82 - 0
Test/Fixture/LogableLogFixture.php

@@ -0,0 +1,82 @@
+<?php
+
+class LogableLogFixture extends CakeTestFixture {
+
+	public $fields = array(
+		'id' => array('type' => 'integer', 'key' => 'primary'),
+		'title' => array(
+			'type' => 'string',
+			'length' => 255,
+			'null' => false),
+		'description' => array(
+			'type' => 'string',
+			'length' => 255,
+			'null' => false),
+		'model' => array(
+			'type' => 'string',
+			'length' => 255,
+			'null' => false),
+		'foreign_id' => array('type' => 'integer', 'null' => false),
+		'action' => array(
+			'type' => 'string',
+			'length' => 25,
+			'null' => false),
+		'user_id' => array('type' => 'integer', 'null' => false),
+		'change' => array(
+			'type' => 'string',
+			'length' => 255,
+			'null' => false),
+		'created' => array('type' => 'datetime', 'null' => false, 'default' => NULL, 'collate' => NULL, 'comment' => ''),
+		'modified' => array('type' => 'datetime', 'null' => false, 'default' => NULL, 'collate' => NULL, 'comment' => ''),
+		'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1)),
+		'tableParameters' => array()
+	);
+
+	public $records = array(
+		array(
+			'id' => 1,
+			'title' => 'Fifth Book',
+			'description' => 'LogableBook "Fifth Book" (6) created by LogableUser "Alexander" (66).',
+			'model' => 'LogableBook',
+			'foreign_id' => 6,
+			'action' => 'add',
+			'user_id' => 66,
+			'change' => 'title'),
+		array(
+			'id' => 2,
+			'title' => 'Fifth Book',
+			'description' => 'LogableBook "Fifth Book" (6) updated by LogableUser "Alexander" (66).',
+			'model' => 'LogableBook',
+			'foreign_id' => 6,
+			'action' => 'edit',
+			'user_id' => 66,
+			'change' => 'title'),
+		array(
+			'id' => 3,
+			'title' => 'Steven',
+			'description' => 'User "Steven" (301) updated by LogableUser "Steven" (301).',
+			'model' => 'LogableUser',
+			'foreign_id' => 301,
+			'action' => 'edit',
+			'user_id' => 301,
+			'change' => 'name'),
+		array(
+			'id' => 4,
+			'title' => 'Fifth Book',
+			'description' => 'LogableBook "Fifth Book" (6) deleted by LogableUser "Alexander" (66).',
+			'model' => 'LogableBook',
+			'foreign_id' => 6,
+			'action' => 'delete',
+			'user_id' => 66,
+			'change' => ''),
+		array(
+			'id' => 5,
+			'title' => 'New Book',
+			'description' => 'LogableBook "New Book" (7) added by LogableUser "Steven" (301).',
+			'model' => 'LogableBook',
+			'foreign_id' => 7,
+			'action' => 'add',
+			'user_id' => 301,
+			'change' => 'title'),
+		);
+}

+ 14 - 0
Test/Fixture/LogableUserFixture.php

@@ -0,0 +1,14 @@
+<?php
+class LogableUserFixture extends CakeTestFixture {
+
+
+	public $fields = array(
+		'id' => array('type' => 'integer', 'key' => 'primary'),
+		'name' => array('type' => 'string', 'length' => 255, 'null' => false),
+		'counter' => array('type' => 'integer', 'length' => 6, 'null' => false, 'default' => 1)
+	);
+	public $records = array(
+		array('id' => 66, 'name' => 'Alexander', 'counter' => 12),
+		array('id' => 301, 'name' => 'Steven', 'counter' => 12),
+	);
+}