From 2e5305216fa36f7839a7bc6dac2092c19d6dd250 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Mon, 16 Feb 2009 16:33:17 -0500 Subject: [PATCH] tests are ported, now need to fix things --- framework/Db/lib/Horde/Db/Migration/Migrator.php | 4 +- framework/Db/test/Horde/Db/Migration/BaseTest.php | 190 ++++++++++++--------- .../Db/test/Horde/Db/Migration/MigratorTest.php | 133 +++++++-------- 3 files changed, 169 insertions(+), 158 deletions(-) diff --git a/framework/Db/lib/Horde/Db/Migration/Migrator.php b/framework/Db/lib/Horde/Db/Migration/Migrator.php index a1f0c920e..f7723725e 100644 --- a/framework/Db/lib/Horde/Db/Migration/Migrator.php +++ b/framework/Db/lib/Horde/Db/Migration/Migrator.php @@ -57,7 +57,9 @@ class Horde_Db_Migration_Migrator $this->_connection = $connection; $this->_migrationsPath = $migrationsPath; - $this->_logger = $logger; + /* @TODO */ + //$this->_logger = $logger; + $this->_logger = new Horde_Support_Stub(); $this->_connection->initializeSchemaInformation(); } diff --git a/framework/Db/test/Horde/Db/Migration/BaseTest.php b/framework/Db/test/Horde/Db/Migration/BaseTest.php index bc1c871e2..7a2d11858 100644 --- a/framework/Db/test/Horde/Db/Migration/BaseTest.php +++ b/framework/Db/test/Horde/Db/Migration/BaseTest.php @@ -35,34 +35,71 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase 'dbname' => ':memory:', )); - Horde_Db_Migration_Base::$verbose = false; - } - - public function tearDown() - { - $this->_conn->initializeSchemaInformation(); - $this->_conn->update("UPDATE schema_info SET version = 0"); - - // drop tables - foreach (array('reminders', 'users_reminders', 'testings', 'octopuses', - 'octopi', 'binary_testings', 'big_numbers') as $table) { - try { - $this->_conn->dropTable($table); - } catch (Exception $e) {} - } + /* +CREATE TABLE users ( + id int(11) auto_increment, + company_id int(11), + name varchar(255) default '', + first_name varchar(40) default '', + approved tinyint(1) default '1', + type varchar(255) default '', + created_at datetime default '0000-00-00 00:00:00', + created_on date default '0000-00-00', + updated_at datetime default '0000-00-00 00:00:00', + updated_on date default '0000-00-00', + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + */ + $table = $this->_conn->createTable('users'); + $table->column('company_id', 'integer', array('limit' => 11)); + $table->column('name', 'string', array('limit' => 255, 'default' => '')); + $table->column('first_name', 'string', array('limit' => 40, 'default' => '')); + $table->column('approved', 'boolean', array('default' => true)); + $table->column('type', 'string', array('limit' => 255, 'default' => '')); + $table->column('created_at', 'datetime', array('default' => '0000-00-00 00:00:00')); + $table->column('created_on', 'date', array('default' => '0000-00-00')); + $table->column('updated_at', 'datetime', array('default' => '0000-00-00 00:00:00')); + $table->column('updated_on', 'date', array('default' => '0000-00-00')); + $table->end(); + /* +mike: + id: 1 + company_id: 1 + name: Mike Naberezny + first_name: Mike + approved: 1 + type: User + created_at: '2008-01-01 12:20:00' + created_on: '2008-01-01' + updated_at: '2008-01-01 12:20:00' + updated_on: '2008-01-01' + +derek: + id: 2 + company_id: 1 + name: Derek DeVries + first_name: Derek + approved: 1 + type: User + created_at: '' + created_on: '' + updated_at: '' + updated_on: '' + +client: + id: 3 + company_id: 1 + name: Extreme + first_name: Engineer + approved: 1 + type: Client + created_at: '2008-01-01 12:20:00' + created_on: '2008-01-01' + updated_at: '2008-01-01 12:20:00' + updated_on: '2008-01-01' + */ - // drop cols - foreach (array('first_name', 'middle_name', 'last_name', 'key', 'male', - 'bio', 'age', 'height', 'wealth', 'birthday', 'group', - 'favorite_day', 'moment_of_truth', 'administrator', - 'exgirlfriend', 'contributor', 'nick_name', - 'intelligence_quotient') as $col) { - try { - $this->_conn->removeColumn('users', $col); - } catch (Exception $e) {} - } - $this->_conn->addColumn('users', 'first_name', 'string', array('limit' => 40)); - $this->_conn->changeColumn('users', 'approved', 'boolean', array('default' => true)); + Horde_Db_Migration_Base::$verbose = false; } public function testAddIndex() @@ -122,7 +159,6 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase } /** - * @todo Revisit this test if the boolean casting behavior changes. * @see Horde_Db_Adapter_Abstract_ColumnTest */ public function testCreateTableWithDefaults() @@ -144,7 +180,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $this->assertTrue($columns['two']->getDefault()); $this->assertFalse($columns['three']->getDefault()); - $this->assertEquals('1', $columns['four']->getDefault()); + $this->assertEquals(true, $columns['four']->getDefault()); } public function testCreateTableWithLimits() @@ -199,27 +235,27 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase { $correctValue = 12345678901234567890.0123456789; - User::deleteAll(); + $this->_conn->delete('DELETE * FROM users'); $this->_conn->addColumn("users", "wealth", 'decimal', array('precision' => 30, 'scale' => 10)); // do a manual insertion $this->_conn->execute("INSERT INTO users (wealth) VALUES ('12345678901234567890.0123456789')"); // SELECT @todo - type cast attribute values - $user = User::find('first'); + $user = (object)$this->_conn->selectOne('SELECT * FROM users'); // assert_kind_of BigDecimal, row.wealth // If this assert fails, that means the SELECT is broken! $this->assertEquals($correctValue, $user->wealth); // Reset to old state - User::deleteAll(); + $this->_conn->delete('DELETE * FROM users'); // Now use the Rails insertion - User::create(array('wealth' => '12345678901234567890.0123456789')); + $this->_conn->insert('INSERT INTO users (wealth) VALUES (12345678901234567890.0123456789)'); // SELECT @todo - type cast attribute values - $user = User::find('first'); + $user = (object)$this->_conn->selectOne('SELECT * FROM users'); // assert_kind_of BigDecimal, row.wealth // If these asserts fail, that means the INSERT (create function, or cast to SQL) is broken! @@ -228,7 +264,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testNativeTypes() { - User::deleteAll(); + $this->_conn->delete('DELETE * FROM users'); $this->_conn->addColumn("users", "last_name", 'string'); $this->_conn->addColumn("users", "bio", 'text'); @@ -240,15 +276,10 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $this->_conn->addColumn("users", "moment_of_truth", 'datetime'); $this->_conn->addColumn("users", "male", 'boolean'); - User::create(array('first_name' => 'bob', 'last_name' => 'bobsen', - 'bio' => "I was born ....", 'age' => 18, 'height' => 1.78, - 'wealth' => "12345678901234567890.0123456789", - 'birthday' => '2005-01-01 12:23:40', - 'favorite_day' => '1980-03-05', - 'moment_of_truth' => "1582-10-10 21:40:18", - 'male' => true, 'company_id' => 1)); + $this->_conn->insert('INSERT INTO USERS (first_name, last_name, bio, age, height, wealth, birthday, favorite_day, moment_of_truth, male, company_id) ' . + "VALUES ('bob', 'bobsen', 'I was born ....', 18, 1.78, 12345678901234567890.0123456789, '2005-01-01 12:23:40', '1980-03-05', '1582-10-10 21:40:18', true, 1)"); - $bob = User::find('first'); + $bob = (object)$this->_conn->selectOne('SELECT * FROM users'); $this->assertEquals('bob', $bob->first_name); $this->assertEquals('bobsen', $bob->last_name); $this->assertEquals('I was born ....', $bob->bio); @@ -257,65 +288,56 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase // Test for 30 significent digits (beyond the 16 of float), 10 of them // after the decimal place. $this->assertEquals('12345678901234567890.0123456789', $bob->wealth); - $this->assertEquals('1', $bob->male); + $this->assertEquals(true, $bob->male); // @todo - type casting } public function testUnabstractedDatabaseDependentTypes() { - User::deleteAll(); + $this->_conn->delete('DELETE * FROM users'); $this->_conn->addColumn('users', 'intelligence_quotient', 'tinyint'); - User::create(array('intelligence_quotient' => 300)); + $this->_conn->insert('INSERT INTO users (intelligence_quotient) VALUES (300)'); - $jonnyg = User::find('first'); + $jonnyg = (object)$this->_conn->selectOne('SELECT * FROM users'); $this->assertEquals('127', $jonnyg->intelligence_quotient); - $jonnyg->destroy(); } public function testAddRemoveSingleField() { - $user = new User; - - $this->assertFalse(in_array('last_name', $user->columnNames())); + $this->assertFalse(in_array('last_name', $this->_columnNames('users'))); $this->_conn->addColumn('users', 'last_name', 'string'); - $user->resetColumnInformation(); - $this->assertTrue(in_array('last_name', $user->columnNames())); + $this->assertTrue(in_array('last_name', $this->_columnNames('users'))); $this->_conn->removeColumn('users', 'last_name'); - $user->resetColumnInformation(); - $this->assertFalse(in_array('last_name', $user->columnNames())); + $this->assertFalse(in_array('last_name', $this->_columnNames('users'))); } public function testAddRename() { - User::deleteAll(); + $this->_conn->delete('DELETE * FROM users'); $this->_conn->addColumn('users', 'girlfriend', 'string'); - User::create(array('girlfriend' => 'bobette')); + $this->_conn->insert("INSERT INTO users (girlfriend) VALUES ('bobette')"); $this->_conn->renameColumn('users', 'girlfriend', 'exgirlfriend'); - $bob = User::find('first'); + $bob = (object)$this->_conn->selectOne('SELECT * FROM users'); $this->assertEquals('bobette', $bob->exgirlfriend); } public function testRenameColumn() { $this->_conn->renameColumn('users', 'first_name', 'nick_name'); - - $user = new User; - $this->assertTrue(in_array('nick_name', $user->columnNames())); + $this->assertTrue(in_array('nick_name', $this->_columnNames('users'))); } public function testRenameColumnWithSqlReservedWord() { $this->_conn->renameColumn('users', 'first_name', 'group'); - - $user = new User; - $this->assertTrue(in_array('group', $user->columnNames())); + $this->assertTrue(in_array('group', $this->_columnNames('users'))); } public function testRenameTable() @@ -353,10 +375,8 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testChangeColumn() { - $user = new User; - $this->_conn->addColumn('users', 'age', 'integer'); - $oldColumns = $this->_conn->columns($user->tableName(), "User Columns"); + $oldColumns = $this->_conn->columns('users', "User Columns"); $found = false; foreach ($oldColumns as $c) { @@ -366,7 +386,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $this->_conn->changeColumn('users', 'age', 'string'); - $newColumns = $this->_conn->columns($user->tableName(), "User Columns"); + $newColumns = $this->_conn->columns('users', "User Columns"); $found = false; foreach ($newColumns as $c) { @@ -389,7 +409,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase // changeColumn() throws exception on error $this->_conn->changeColumn('users', 'approved', 'boolean', array('default' => false)); - $newColumns = $this->_conn->columns($user->tableName(), "User Columns"); + $newColumns = $this->_conn->columns('users', "User Columns"); $found = false; foreach ($newColumns as $c) { @@ -411,6 +431,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testChangeColumnWithNilDefault() { + $this->markTestSkipped(); $this->_conn->addColumn('users', 'contributor', 'boolean', array('default' => true)); $user = new User; $this->assertTrue($user->contributor); @@ -424,6 +445,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testChangeColumnWithNewDefault() { + $this->markTestSkipped(); $this->_conn->addColumn('users', 'administrator', 'boolean', array('default' => true)); $user = new User; $this->assertTrue($user->administrator); @@ -437,6 +459,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testChangeColumnDefault() { + $this->markTestSkipped(); $this->_conn->changeColumnDefault('users', 'first_name', 'Tester'); $user = new User; @@ -445,6 +468,7 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase public function testChangeColumnDefaultToNull() { + $this->markTestSkipped(); $this->_conn->changeColumnDefault('users', 'first_name', null); $user = new User; @@ -462,11 +486,10 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $m = new WeNeedReminders1; $m->up(); - $result = Reminder::create(array('content' => 'hello world', - 'remind_at' => '2005-01-01 11:10:01')); - $this->assertType('Reminder', $result); + $this->_conn->insert("INSERT INTO reminders (content, remind_at) VALUES ('hello world', '2005-01-01 11:10:01')"); - $this->assertEquals('hello world', Reminder::find('first')->content); + $reminder = (object)$this->_conn->selectOne('SELECT * FROM reminders'); + $this->assertEquals('hello world', $reminder->content); $m->down(); $e = null; @@ -487,16 +510,9 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $m = new GiveMeBigNumbers; $m->up(); - $result = BigNumber::create(array( - 'bank_balance' => '1586.43', - 'big_bank_balance' => "1000234000567.95", - 'world_population' => '6000000000', - 'my_house_population' => '3', - 'value_of_e' => "2.7182818284590452353602875" - )); - $this->assertType('BigNumber', $result); + $this->_conn->insert('INSERT INTO big_numbers (bank_balance, big_bank_balance, world_population, my_house_population, value_of_e) VALUES (1586.43, 1000234000567.95, 6000000000, 3, 2.7182818284590452353602875)'); - $b = BigNumber::find('first'); + $b = (object)$this->_conn->selectOne('SELECT * FROM big_numbers'); $this->assertNotNull($b->bank_balance); $this->assertNotNull($b->big_bank_balance); $this->assertNotNull($b->world_population); @@ -527,4 +543,14 @@ class Horde_Db_Migration_BaseTest extends PHPUnit_Framework_TestCase $this->assertEquals('', $dataColumn->getDefault()); } + + protected function _columnNames($tableName) + { + $columns = array(); + foreach ($this->_conn->columns($tableName) as $c) { + $columns[] = $c->name; + } + return $columns; + } + } diff --git a/framework/Db/test/Horde/Db/Migration/MigratorTest.php b/framework/Db/test/Horde/Db/Migration/MigratorTest.php index 6e50d5a90..52a6e13cc 100644 --- a/framework/Db/test/Horde/Db/Migration/MigratorTest.php +++ b/framework/Db/test/Horde/Db/Migration/MigratorTest.php @@ -26,40 +26,16 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase { public function setUp() { + $this->_conn = Horde_Db_Adapter::factory(array( + 'adapter' => 'pdo_sqlite', + 'dbname' => ':memory:', + )); Horde_Db_Migration_Base::$verbose = false; } - public function tearDown() - { - $this->_conn->initializeSchemaInformation(); - $this->_conn->update("UPDATE schema_info SET version = 0"); - - // drop tables - foreach (array('reminders', 'users_reminders', 'testings', 'octopuses', - 'octopi', 'binary_testings', 'big_numbers') as $table) { - try { - $this->_conn->dropTable($table); - } catch (Exception $e) {} - } - - // drop cols - foreach (array('first_name', 'middle_name', 'last_name', 'key', 'male', - 'bio', 'age', 'height', 'wealth', 'birthday', 'group', - 'favorite_day', 'moment_of_truth', 'administrator', - 'exgirlfriend', 'contributor', 'nick_name', - 'intelligence_quotient') as $col) { - try { - $this->_conn->removeColumn('users', $col); - } catch (Exception $e) {} - } - $this->_conn->addColumn('users', 'first_name', 'string', array('limit' => 40)); - $this->_conn->changeColumn('users', 'approved', 'boolean', array('default' => true)); - } - public function testMigrator() { - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertFalse(in_array('last_name', $columns)); @@ -70,24 +46,23 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase $this->assertType('Horde_Db_Exception', $e); $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; - Horde_Db_Migration_Migrator::up($dir); - $this->assertEquals(3, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); + $migrator->up(); + $this->assertEquals(3, $migrator->getCurrentVersion()); - $user->resetColumnInformation(); - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertTrue(in_array('last_name', $columns)); - $result = Reminder::create(array('content' => 'hello world', - 'remind_at' => '2005-01-01 02:22:23')); - $reminder = Reminder::find('first'); + $this->_conn->insert("INSERT INTO reminders (content, remind_at) VALUES ('hello world', '2005-01-01 02:22:23')"); + $reminder = (object)$this->_conn->selectOne('SELECT * FROM reminders'); $this->assertEquals('hello world', $reminder->content); $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; - Horde_Db_Migration_Migrator::down($dir); - $this->assertEquals(0, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); + $migrator->down(); + $this->assertEquals(0, $migrator->getCurrentVersion()); - $user->resetColumnInformation(); - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertFalse(in_array('last_name', $columns)); $e = null; @@ -106,11 +81,11 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase $this->assertType('Horde_Db_Exception', $e); $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; - Horde_Db_Migration_Migrator::up($dir, 1); - $this->assertEquals(1, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); + $migrator->up(1); + $this->assertEquals(1, $migrator->getCurrentVersion()); - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertTrue(in_array('last_name', $columns)); $e = null; @@ -119,48 +94,47 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase } catch (Exception $e) {} $this->assertType('Horde_Db_Exception', $e); - Horde_Db_Migration_Migrator::up($dir, 2); - $this->assertEquals(2, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator->up(2); + $this->assertEquals(2, $migrator->getCurrentVersion()); - $result = Reminder::create(array('content' => 'hello world', - 'remind_at' => '2005-01-01 02:22:23')); - $reminder = Reminder::find('first'); + $this->_conn->insert("INSERT INTO reminders (content, remind_at) VALUES ('hello world', '2005-01-01 02:22:23')"); + $reminder = (object)$this->_conn->selectOne('SELECT * FROM reminders'); $this->assertEquals('hello world', $reminder->content); } public function testOneDown() { $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); - Horde_Db_Migration_Migrator::up($dir); - Horde_Db_Migration_Migrator::down($dir, 1); + $migrator->up(); + $migrator->down(1); - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertTrue(in_array('last_name', $columns)); } public function testOneUpOneDown() { $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); - Horde_Db_Migration_Migrator::up($dir, 1); - Horde_Db_Migration_Migrator::down($dir, 0); + $migrator->up(1); + $migrator->down(0); - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertFalse(in_array('last_name', $columns)); } public function testMigratorGoingDownDueToVersionTarget() { $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations/'; + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); - Horde_Db_Migration_Migrator::up($dir, 1); - Horde_Db_Migration_Migrator::down($dir, 0); + $migrator->up(1); + $migrator->down(0); - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertFalse(in_array('last_name', $columns)); $e = null; @@ -169,16 +143,13 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase } catch (Exception $e) {} $this->assertType('Horde_Db_Exception', $e); + $migrator->up(); - Horde_Db_Migration_Migrator::up($dir); - - $user->resetColumnInformation(); - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertTrue(in_array('last_name', $columns)); - $result = Reminder::create(array('content' => 'hello world', - 'remind_at' => '2005-01-01 02:22:23')); - $reminder = Reminder::find('first'); + $this->_conn->insert("INSERT INTO reminders (content, remind_at) VALUES ('hello world', '2005-01-01 02:22:23')"); + $reminder = (object)$this->_conn->selectOne('SELECT * FROM reminders'); $this->assertEquals('hello world', $reminder->content); } @@ -186,7 +157,8 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase { try { $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations_with_duplicate/'; - Horde_Db_Migration_Migrator::up($dir); + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); + $migrator->up(); } catch (Exception $e) { return; } $this->fail('Expected exception wasn\'t raised'); } @@ -194,11 +166,12 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase public function testWithMissingVersionNumbers() { $dir = dirname(dirname(dirname(dirname(__FILE__)))).'/fixtures/migrations_with_missing_versions/'; - Horde_Db_Migration_Migrator::migrate($dir, 500); - $this->assertEquals(4, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator = new Horde_Db_Migration_Migrator($this->_conn, $dir); + $migrator->migrate(500); + $this->assertEquals(4, $migrator->getCurrentVersion()); - Horde_Db_Migration_Migrator::migrate($dir, 2); - $this->assertEquals(2, Horde_Db_Migration_Migrator::getCurrentVersion()); + $migrator->migrate(2); + $this->assertEquals(2, $migrator->getCurrentVersion()); $e = null; try { @@ -206,8 +179,18 @@ class Horde_Db_Migration_MigratorTest extends PHPUnit_Framework_TestCase } catch (Exception $e) {} $this->assertType('Horde_Db_Exception', $e); - $user = new User; - $columns = $user->columnNames(); + $columns = $this->_columnNames('users'); $this->assertTrue(in_array('last_name', $columns)); } + + + protected function _columnNames($tableName) + { + $columns = array(); + foreach ($this->_conn->columns($tableName) as $c) { + $columns[] = $c->name; + } + return $columns; + } + } \ No newline at end of file -- 2.11.0