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 testSchemaCanBeCreatedFromMySqlSchema() { $user = new User(); $schema = $user->getSchema(); $comparisonSchema = MySqlComparisonSchema::fromMySqlSchema($schema); $this->assertEquals(["UserID" => "`UserID` int(11) unsigned NOT NULL AUTO_INCREMENT", "CompanyID" => "`CompanyID` int(11) unsigned NOT NULL DEFAULT '0'", "UserType" => "`UserType` enum('Staff','Administrator') NOT NULL DEFAULT 'Staff'", "Username" => "`Username` varchar(40) NOT NULL DEFAULT ''", "Forename" => "`Forename` varchar(40) NOT NULL DEFAULT ''", "Surname" => "`Surname` varchar(40) NOT NULL DEFAULT ''", "Password" => "`Password` varchar(120) NOT NULL DEFAULT ''", "Active" => "`Active` tinyint(3) NOT NULL DEFAULT '0'", "Wage" => "`Wage` decimal(8,2) NOT NULL DEFAULT '0.00'"], $comparisonSchema->columns); $this->assertEquals(["PRIMARY KEY (`UserID`)", "KEY `CompanyID` (`CompanyID`)"], $comparisonSchema->indexes); }
public function testOneToOne() { SolutionSchema::registerSchema("MySchema", "Rhubarb\\Stem\\Tests\\Fixtures\\UnitTestingSolutionSchema"); $company = new Company(); $company->CompanyName = "Test Company"; $company->save(); $user = new User(); $user->Username = "******"; $user->Password = "******"; $user->Active = 1; $user->CompanyID = $company->CompanyID; $user->save(); $oneToOne = new OneToOne("Unused", "User", "CompanyID", "Company", "CompanyID"); $result = $oneToOne->fetchFor($user); $this->assertEquals("Test Company", $result->CompanyName); }
public function testAverage() { $user = new User(); $user->Wage = 100; $user->Active = true; $user->save(); $user = new User(); $user->Wage = 200; $user->Active = true; $user->save(); $user = new User(); $user->Wage = 600; $user->Active = true; $user->save(); $collection = User::find(); list($average) = $collection->calculateAggregates([new Average("Wage")]); $this->assertEquals(300, $average); }
public function testRelationships() { SolutionSchema::clearSchemas(); SolutionSchema::registerSchema("MySchema", "Rhubarb\\Stem\\Tests\\Fixtures\\UnitTestingSolutionSchema"); error_reporting(E_ALL); ini_set("display_errors", "on"); $schema = new UnitTestingSolutionSchema(); $schema->defineRelationships(); $relationship = $schema->getRelationship("UnitTestUser", "Company"); $this->assertInstanceOf("Rhubarb\\Stem\\Schema\\Relationships\\OneToOne", $relationship); $this->assertInstanceOf("Rhubarb\\Stem\\Schema\\Relationships\\OneToMany", $relationship->getOtherSide()); $relationship = $schema->getRelationship("Company", "Users"); $this->assertInstanceOf("Rhubarb\\Stem\\Schema\\Relationships\\OneToMany", $relationship); $relationship = $schema->getRelationship("Company", "Unknown"); $this->assertNull($relationship); $relationship = $schema->getRelationship("Example", "ExampleRelationshipName"); $this->assertInstanceOf("Rhubarb\\Stem\\Schema\\Relationships\\OneToOne", $relationship); $columnRelationships = SolutionSchema::getAllOneToOneRelationshipsForModelBySourceColumnName("UnitTestUser"); $this->assertArrayHasKey("CompanyID", $columnRelationships); $this->assertInstanceOf("Rhubarb\\Stem\\Schema\\Relationships\\OneToOne", $columnRelationships["CompanyID"]); $company = new Company(); $company->CompanyName = "GCD"; $company->save(); $user = new User(); $user->getRepository()->clearObjectCache(); $user->Forename = "a"; $user->save(); $company->Users->Append($user); $b = $user = new User(); $user->Forename = "b"; $user->save(); $company->Users->Append($user); // Just to make sure this doesn't get in our relationship! $user = new User(); $user->Forename = "c"; $user->save(); $company = new Company($company->CompanyID); $this->assertCount(2, $company->Users); $this->assertEquals("a", $company->Users[0]->Forename); $this->assertEquals("b", $company->Users[1]->Forename); $company = $b->Company; $this->assertEquals("GCD", $company->CompanyName); }
public function testCanBeFound() { $user = new User(); $user->Username = "******"; $user->save(); $user = new User(); $user->Username = "******"; $user->save(); $user = new User(); $user->Username = "******"; $user->save(); $user = User::FromUsername("def"); $this->assertEquals("def", $user->Username); $this->setExpectedException("Rhubarb\\Stem\\Exceptions\\RecordNotFoundException"); User::FromUsername("123"); }
public function testAutoHydration() { MySql::executeStatement("TRUNCATE TABLE tblCompany"); $company = new Company(); $company->CompanyName = "GCD"; $company->save(); $user = new User(); $user->Forename = "Andrew"; $user->save(); $company->Users->Append($user); $company->getRepository()->clearObjectCache(); $user->getRepository()->clearObjectCache(); $users = new Collection("Rhubarb\\Stem\\Tests\\Fixtures\\User"); $users->filter(new Equals("Company.CompanyName", "GCD")); count($users); $this->assertStringStartsWith("SELECT `tblUser`.*, `Company`.`CompanyID` AS `CompanyCompanyID`, `Company`.`CompanyName` AS `CompanyCompanyName`, `Company`.`Balance` AS `CompanyBalance`, `Company`.`InceptionDate` AS `CompanyInceptionDate`, `Company`.`LastUpdatedDate` AS `CompanyLastUpdatedDate`, `Company`.`KnockOffTime` AS `CompanyKnockOffTime`, `Company`.`BlueChip` AS `CompanyBlueChip`, `Company`.`ProjectCount` AS `CompanyProjectCount`, `Company`.`CompanyData` AS `CompanyCompanyData` FROM `tblUser` LEFT JOIN `tblCompany` AS `Company` ON `tblUser`.`CompanyID` = `Company`.`CompanyID` WHERE `Company`.`CompanyName` = :", MySql::getPreviousStatement()); $company->getRepository()->clearObjectCache(); $user->getRepository()->clearObjectCache(); $users = new Collection("Rhubarb\\Stem\\Tests\\Fixtures\\User"); $users->replaceSort("Company.CompanyName", true); count($users); $this->assertStringStartsWith("SELECT `tblUser`.*, `Company`.`CompanyID` AS `CompanyCompanyID`, `Company`.`CompanyName` AS `CompanyCompanyName`, `Company`.`Balance` AS `CompanyBalance`, `Company`.`InceptionDate` AS `CompanyInceptionDate`, `Company`.`LastUpdatedDate` AS `CompanyLastUpdatedDate`, `Company`.`KnockOffTime` AS `CompanyKnockOffTime`, `Company`.`BlueChip` AS `CompanyBlueChip`, `Company`.`ProjectCount` AS `CompanyProjectCount`, `Company`.`CompanyData` AS `CompanyCompanyData` FROM `tblUser` LEFT JOIN `tblCompany` AS `Company` ON `tblUser`.`CompanyID` = `Company`.`CompanyID` ORDER BY `Company`.`CompanyName` ASC", MySql::getPreviousStatement()); $user = $users[0]; $this->assertCount(9, $user->ExportRawData(), "The user model should only have 9 columns. More means that the joined tables aren't being removed after the join."); $this->assertArrayHasKey($company->CompanyID, $company->getRepository()->cachedObjectData, "After an auto hydrated fetch the auto hydrated relationship should now be cached and ready for use in the repository"); $this->assertCount(9, $company->getRepository()->cachedObjectData[$company->CompanyID], "The company model should only have 9 columns. More means that the joined tables aren't properly being broken up into their respective models."); }