public function testListSorts() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); $company = new Company(); $repos = $company->getRepository(); $repos->clearObjectCache(); $company = new Company(); $company->CompanyName = "A"; $company->Balance = 5; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->Balance = 3; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->Balance = 4; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->Balance = 2; $company->save(); $company = new Company(); $company->CompanyName = "C"; $company->Balance = 2; $company->save(); $company = new Company(); $company->CompanyName = "D"; $company->Balance = 1; $company->save(); $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company"); $list->addSort("CompanyName", true); // Trigger list fetching. sizeof($list); $sql = Mysql::getPreviousStatement(); $this->assertContains("ORDER BY CompanyName ASC", $sql); $list->addSort("Balance", false); // Trigger list fetching. sizeof($list); $sql = Mysql::getPreviousStatement(); $this->assertContains("ORDER BY CompanyName ASC, Balance DESC", $sql); // this should not affect our order by clause as this column isn't in our schema. $list->addSort("NonExistant", false); try { // Trigger list fetching. sizeof($list); } catch (SortNotValidException $er) { } $sql = Mysql::getPreviousStatement(); // As NonExistant is at the end of the sort collection we can't use any back end performance // optimisation (as the manual sorting will destroy it) $this->assertNotContains("ORDER BY", $sql); $list->replaceSort(["CompanyName" => false, "Balance" => true]); // Trigger list fetching. sizeof($list); $this->assertEquals("D", $list[0]->CompanyName); $this->assertEquals("C", $list[1]->CompanyName); $this->assertEquals("B", $list[2]->CompanyName); $this->assertEquals("B", $list[3]->CompanyName); $this->assertEquals("B", $list[4]->CompanyName); $this->assertEquals("A", $list[5]->CompanyName); $this->assertEquals(2, $list[2]->Balance); $this->assertEquals(3, $list[3]->Balance); $this->assertEquals(4, $list[4]->Balance); $list->replaceSort(["CompanyName" => false, "CompanyIDSquared" => true, "Balance" => false]); // Trigger list fetching. sizeof($list); $this->assertEquals(3, $list[2]->Balance); $this->assertEquals(4, $list[3]->Balance); $this->assertEquals(2, $list[4]->Balance); }