function test_sti_field_is_saved_and_used_correctly() { setup_sqlite_test_db(); # Create a dummy test entries $dummy = Test::create(array("dummy" => "TestDummy")); $this->assertEqual($dummy->type, NULL); $stest = new SuperTest(array("dummy" => "SuperDummy")); $stest->save(); $this->assertEqual(strtolower($stest->type), "supertest"); $utest = new UltraTest(array("dummy" => "UltraDummy")); $utest->save(); $this->assertEqual(strtolower($utest->type), "ultratest"); $atest = new AutoTest(array("dummy" => "AutoDummy")); $atest->save(); $this->assertEqual(strtolower($atest->type), "autotest"); # PHP 5.3 needed to call magic methods statically, so # work around by instanciating the class as singleton $Test = Singleton::instance("Test"); # Load and check test entries $dummy2 = $Test->find_by_dummy("TestDummy"); $this->assertEqual($dummy2->type, NULL); $this->assertEqual(strtolower(get_class($dummy2)), "test"); $stest2 = $Test->find_by_dummy("SuperDummy"); $this->assertEqual(strtolower($stest2->type), "supertest"); $this->assertEqual(strtolower(get_class($stest2)), "supertest"); $utest2 = $Test->find_by_dummy("UltraDummy"); $this->assertEqual(strtolower($utest2->type), "ultratest"); $this->assertEqual(strtolower(get_class($utest2)), "ultratest"); $atest2 = $Test->find_by_dummy("AutoDummy"); $this->assertEqual(strtolower($atest2->type), "autotest"); $this->assertEqual(strtolower(get_class($atest2)), "autotest"); }
function test_find_by() { setup_sqlite_test_db(); # PHP 5.3 needed to call magic methods statically, so # work around by instanciating the class as singleton $Test = Singleton::instance("Test"); # create two test entries to be found Test::create(array("dummy" => "Test 1"), array("dummy" => "Test 2")); # Test find_by single id $dummy = $Test->find_by_id(1); $this->assertEqual(strtolower(get_class($dummy)), "test"); $this->assertEqual($dummy->dummy, "Test 1"); # Test find_by id array $dummies = $Test->find_by_id(array(1, 2), array("order" => "id")); $this->assertEqual(count($dummies), 2); $this->assertEqual($dummies[0]->dummy, "Test 1"); $this->assertEqual($dummies[1]->dummy, "Test 2"); # Test it works with strings, too $dummy = $Test->find_by_dummy("Test 2"); $this->assertEqual($dummy->id, 2); # Test their combination $dummy = $Test->find_by_id_and_dummy(1, "Test 1"); $this->assertEqual($dummy->id, 1); $this->assertEqual($dummies[0]->dummy, "Test 1"); # Test their array'ed combination $dummies = $Test->find_by_id_and_dummy(array(1, 2), array("Test 1", "Test 2"), array("order" => "id")); $this->assertEqual(count($dummies), 2); $this->assertEqual($dummies[0]->dummy, "Test 1"); $this->assertEqual($dummies[1]->dummy, "Test 2"); }
function test_find_conditions_for_multiple_results() { setup_sqlite_test_db(); # create two test entries to be found Test::create(array("dummy" => "Test 1"), array("dummy" => "Test 2")); $result = Test::find(array("conditions" => "id = 1 OR id = 2", "order" => "id")); $this->assertEqual(count($result), 2); $result = Test::find(array("conditions" => array("id = ? OR dummy = ?", 1, "Test 2"), "order" => "id")); $this->assertEqual(count($result), 2); $result = Test::find(array("conditions" => array("id IN (?)", array(1, 2)), "order" => "id")); $this->assertEqual(count($result), 2); $result = Test::find(array("conditions" => array(array("id IN (?)", array(1, 2)), array("dummy IN (?)", array("Test 1", "Test 2"))), "order" => "id")); $this->assertEqual(count($result), 2); }
function test_belongs_to_with_preloaded_data() { setup_sqlite_test_db(); preload_sqlite_data(); $result1 = TestResult::find(1); $test = $result1->test; $this->assertEqual($test->dummy, "Test1"); $result2 = TestResult::find(2); $test = $result2->test; $this->assertEqual($test->dummy, "Test2"); $result3 = TestResult::find(3); $test = $result3->test; $this->assertEqual($test->dummy, "Test2"); }
function test_class_to_table_name() { setup_sqlite_test_db(); # Basic test to ensure inflections for table names work and # auto-inheritance from class name resolves correctly $test = new Test(); $this->assertEqual($test->_table_name, "tests"); # Now test the same works for STI and resolves to the base # class name $sti_test = new STITest(); $this->assertEqual($sti_test->_table_name, "tests"); $this->assertEqual(strtolower($sti_test->_type_name), "stitest"); # Ensure CamelCase class names resolve properly to their # "tableized" camel_cases counterpart $camel_case = new CamelCase(); $this->assertEqual($camel_case->_table_name, "camel_cases"); }
function test_create() { setup_sqlite_test_db(); # Create a dummy test entry, ensure it is of correct type and got its # parameters correctly saved $dummy = Test::create(array("dummy" => "Test456")); $this->assertEqual(strtolower(get_class($dummy)), "test"); $this->assertEqual($dummy->_base_class, "Test"); $this->assertEqual($dummy->dummy, "Test456"); $this->assertTrue($dummy->id > 0); # Now create two test entries at once $dummys = Test::create(array("dummy" => "Test567"), array("dummy" => "Test678")); $this->assertEqual(count($dummys), 2); # Return the complete table and check there is exactly one row $all_rows = Test::find("all"); $this->assertEqual(count($all_rows), 3); # Return the first row and check it still matches our first dummy test entry $first = Test::find("first"); $this->assertEqual($first->dummy, "Test456"); $this->assertTrue($first->id > 0); }