public function testOneToMany() { SolutionSchema::registerSchema("MySchema", "Rhubarb\\Stem\\Tests\\Fixtures\\UnitTestingSolutionSchema"); $company = new Company(); $company->getRepository()->clearObjectCache(); $company->CompanyName = "Test Company"; $company->save(); $user = new User(); $user->getRepository()->clearObjectCache(); $user->Username = "******"; $user->Password = "******"; $user->Active = 1; $user->CompanyID = $company->CompanyID; $user->save(); $user = new User(); $user->Username = "******"; $user->Password = ""; $user->Active = 1; $user->CompanyID = $company->CompanyID; $user->save(); $user = new User(); $user->Username = "******"; $user->Password = ""; $user->Active = 0; $user->CompanyID = $company->CompanyID; $user->save(); $oneToMany = new OneToMany("Unused", "Company", "CompanyID", "UnitTestUser"); $list = $oneToMany->fetchFor($company); $this->assertCount(2, $list); $this->assertEquals("msmith", $list[1]->Username); }
public function testManyToMany() { // UnitTestingSolutionSchema sets up a many to many relationship between company and category $company1 = new Company(); $company2 = new Company(); $company3 = new Company(); $company1->getRepository()->clearObjectCache(); $companyCategory = new CompanyCategory(); $companyCategory->getRepository()->clearObjectCache(); $category1 = new Category(); $category2 = new Category(); $category1->getRepository()->clearObjectCache(); $company1->CompanyName = "GCD"; $company1->save(); $company2->CompanyName = "UTV"; $company2->save(); $company3->CompanyName = 'Inactive'; $company3->Active = 0; $company3->save(); $category1->CategoryName = "Fruit"; $category1->save(); $category2->CategoreName = "Apples"; $category2->save(); $companyCategory->CategoryID = $category1->CategoryID; $companyCategory->CompanyID = $company1->CompanyID; $companyCategory->save(); $companyCategory = new CompanyCategory(); $companyCategory->CategoryID = $category1->CategoryID; $companyCategory->CompanyID = $company2->CompanyID; $companyCategory->save(); $companyCategory = new CompanyCategory(); $companyCategory->CategoryID = $category2->CategoryID; $companyCategory->CompanyID = $company2->CompanyID; $companyCategory->save(); $companyCategory = new CompanyCategory(); $companyCategory->CategoryID = $category1->CategoryID; $companyCategory->CompanyID = $company3->CompanyID; $companyCategory->save(); // At this point GCD is in Fruit, while UTV is in Fruit and Apples. $company1 = new Company($company1->CompanyID); $this->assertCount(1, $company1->Categories); $this->assertCount(2, $company2->Categories); $this->assertCount(2, $category1->Companies); $this->assertCount(1, $category2->Companies); $this->assertEquals("UTV", $category2->Companies[0]->CompanyName); }
protected function setUp() { parent::setUp(); MySql::executeStatement("TRUNCATE TABLE tblCompany"); $example = new Company(); $example->getRepository()->clearObjectCache(); $example = new Company(); $example->CompanyName = "a"; $example->Balance = 1; $example->save(); $example = new Company(); $example->CompanyName = "b"; $example->Balance = 2; $example->save(); $example = new Company(); $example->CompanyName = "c"; $example->Balance = 3; $example->save(); }
public function testLimits() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); $company = new Company(); $repos = $company->getRepository(); $repos->clearObjectCache(); $company = new Company(); $company->CompanyName = "A"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "B"; $company->save(); $company = new Company(); $company->CompanyName = "C"; $company->save(); $company = new Company(); $company->CompanyName = "D"; $company->save(); $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company"); $list->setRange(2, 6); $this->assertCount(6, $list); $this->assertEquals("C", $list[2]->CompanyName); $sql = MySql::getPreviousStatement(true); $this->assertContains("LIMIT 2, 6", $sql); // Sorting by a computed column should mean that limits are no longer used. $list->addSort("CompanyIDSquared", true); $this->assertCount(6, $list); $this->assertEquals("C", $list[2]->CompanyName); $sql = MySql::getPreviousStatement(); $this->assertNotContains("LIMIT 2, 6", $sql); $sql = MySql::getPreviousStatement(true); $this->assertNotContains("LIMIT 2, 6", $sql); }
public function testMySqlAggregateSupport() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); MySql::executeStatement("TRUNCATE TABLE tblUser"); $company1 = new Company(); $company1->getRepository()->clearObjectCache(); $company1->CompanyName = "1"; $company1->save(); $company2 = new Company(); $company2->CompanyName = "2"; $company2->save(); $user1 = new User(); $user1->Wage = 100; $company1->Users->Append($user1); $user2 = new User(); $user2->Wage = 200; $company1->Users->Append($user2); $user3 = new User(); $user3->Wage = 300; $company2->Users->Append($user3); $user4 = new User(); $user4->Wage = 400; $company2->Users->Append($user4); $companies = new Collection("Company"); $companies->addAggregateColumn(new Sum("Users.Wage")); $results = []; foreach ($companies as $company) { $results[] = $company->SumOfUsersWage; } $this->assertEquals([300, 700], $results); $sql = MySql::getPreviousStatement(); $this->assertEquals("SELECT `tblCompany`.*, SUM( `Users`.`Wage` ) AS `SumOfUsersWage` FROM `tblCompany` LEFT JOIN `tblUser` AS `Users` ON `tblCompany`.`CompanyID` = `Users`.`CompanyID` GROUP BY `tblCompany`.`CompanyID`", $sql); $companies = new Collection("Company"); $companies->addAggregateColumn(new Sum("Users.BigWage")); $results = []; foreach ($companies as $company) { $results[] = $company->SumOfUsersBigWage; } $this->assertEquals([3000, 7000], $results); }