예제 #1
0
 public function testFiltersMatchingRows()
 {
     $filter = new \Rhubarb\Stem\Filters\Equals("Forename", "Tom");
     $this->list->filter($filter);
     $this->assertCount(1, $this->list);
     $this->assertEquals("Thumb", $this->list[0]->Surname);
 }
예제 #2
0
 public function testBetweenNumbers()
 {
     $this->list->filter(new Between("FavouriteNumber", 10, 20));
     $this->assertCount(2, $this->list);
     $this->assertEquals("John", $this->list[0]->Forename);
     $this->assertEquals("Mary", $this->list[1]->Forename);
 }
예제 #3
0
 public function testFiltersOnOtherColumn()
 {
     $filter = new \Rhubarb\Stem\Filters\LessThan("Forename", "@{Surname}", true);
     $this->list->filter($filter);
     $this->assertCount(1, $this->list);
     $this->assertEquals("Morris", $this->list[0]->Surname);
 }
예제 #4
0
 public function testFiltersAlpha()
 {
     $filter = new \Rhubarb\Stem\Filters\GreaterThan("Forename", "Mary", true);
     $this->list->filter($filter);
     $this->assertCount(2, $this->list);
     $filter = new \Rhubarb\Stem\Filters\GreaterThan("Forename", "Mary", false);
     $this->list->filter($filter);
     $this->assertCount(1, $this->list);
     $this->assertContains("Tom", $this->list[0]->Forename);
 }
예제 #5
0
 public function testFiltersCaseSensitive()
 {
     $filter = new \Rhubarb\Stem\Filters\Contains("Forename", "Jo", true);
     $this->list->filter($filter);
     $this->assertCount(1, $this->list);
     $this->assertContains("John", $this->list[0]->Forename);
     $filter = new \Rhubarb\Stem\Filters\Contains("Forename", "oH", true);
     $this->list->filter($filter);
     $this->assertCount(0, $this->list);
 }
예제 #6
0
 public function testFiltersCaseSensitive()
 {
     $filter = new \Rhubarb\Stem\Filters\EndsWith("Forename", "ry", true);
     $this->list->filter($filter);
     $this->assertCount(1, $this->list);
     $this->assertContains("Mary", $this->list[0]->Forename);
     $filter = new \Rhubarb\Stem\Filters\EndsWith("Forename", "RY", true);
     $this->list->filter($filter);
     $this->assertCount(0, $this->list);
 }
예제 #7
0
 public function testFilters()
 {
     $filter = new \Rhubarb\Stem\Filters\OneOf("Forename", ["Cuthbert", "Dibble", "Grub", "Pugh"]);
     $this->list->filter($filter);
     $this->assertCount(5, $this->list);
     $this->assertContains("Pugh", $this->list[0]->Forename);
     $filter = new \Rhubarb\Stem\Filters\OneOf("Forename", ["Cuthbert", "Dibble", "Grub"]);
     $this->list->filter($filter);
     $this->assertCount(3, $this->list);
     $this->assertContains("Cuthbert", $this->list[0]->Forename);
 }
 function testFiltersWithGroupedGroup()
 {
     $filterGroup1 = new \Rhubarb\Stem\Filters\Group("And");
     $filterGroup1->addFilters(new \Rhubarb\Stem\Filters\Contains("Forename", "Jo", true), new \Rhubarb\Stem\Filters\Contains("Surname", "Jo", true));
     $filterGroup2 = new \Rhubarb\Stem\Filters\Group("Or");
     $filterGroup2->addFilters(new \Rhubarb\Stem\Filters\Contains("Surname", "Luc", true), new \Rhubarb\Stem\Filters\LessThan("DateOfBirth", "1980-01-01", true));
     $filterGroup = new \Rhubarb\Stem\Filters\Group("Or");
     $filterGroup->addFilters($filterGroup1, $filterGroup2);
     $notGroup = $filterGroup->getInvertedFilter();
     $this->list->filter($notGroup);
     $this->assertCount(1, $this->list);
     $this->assertContains("Smithe", $this->list[0]->Surname);
 }
예제 #9
0
 public function testCanFilterOnRelatedModelProperties()
 {
     $gcd = new Company();
     $gcd->CompanyName = "GCD";
     $gcd->save();
     $widgetCo = new Company();
     $widgetCo->CompanyName = "Widgets";
     $widgetCo->save();
     $example = new User();
     $example->Username = "******";
     $widgetCo->Users->Append($example);
     $example = new User();
     $example->Username = "******";
     $gcd->Users->Append($example);
     $example = new User();
     $example->Username = "******";
     $widgetCo->Users->Append($example);
     $example = new User();
     $example->Username = "******";
     $gcd->Users->Append($example);
     $list = new Collection("Rhubarb\\Stem\\Tests\\Fixtures\\User");
     $list->filter(new Equals("Company.CompanyName", "GCD"));
     $this->assertCount(2, $list);
     $this->assertEquals("b", $list[0]->Username);
     $this->assertEquals("d", $list[1]->Username);
 }
 public function testDataListFetchesObjects()
 {
     MySql::executeStatement("TRUNCATE TABLE tblCompany");
     $company = new Company();
     $company->CompanyName = "GCD";
     $company->save();
     $company = new Company();
     $company->CompanyName = "Unit Design";
     $company->save();
     $company = new Company();
     $company->CompanyName = "Goats Boats";
     $company->save();
     $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company");
     $this->assertCount(3, $list);
     $repository = $company->getRepository();
     $repository->clearObjectCache();
     $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company");
     $this->assertCount(3, $list);
     $this->assertEquals("Unit Design", $list[1]->CompanyName);
     $filter = new Equals("CompanyName", "Unit Design");
     $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company");
     $list->filter($filter);
     $this->assertCount(1, $list);
     $this->assertEquals("Unit Design", $list[0]->CompanyName);
     $filter = new Equals("CompanyIDSquared", $company->CompanyID * $company->CompanyID);
     $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company");
     $list->filter($filter);
     $this->assertCount(1, $list);
     $this->assertEquals("Goats Boats", $list[0]->CompanyName);
 }
예제 #11
0
 public function testSumIsCalculatedOnRepository()
 {
     $examples = new Collection("Company");
     list($sumTotal) = $examples->calculateAggregates([new MySqlSum("Balance")]);
     $this->assertEquals(6, $sumTotal);
     $lastStatement = MySql::getPreviousStatement(false);
     $this->assertContains("SUM( `Balance` ) AS `SumOfBalance`", $lastStatement);
     $examples = new Collection("Company");
     $examples->filter(new GreaterThan("Balance", 1));
     list($sumTotal) = $examples->calculateAggregates(new MySqlSum("Balance"));
     $this->assertEquals(5, $sumTotal);
     $lastStatement = MySql::getPreviousStatement(false);
     $this->assertContains("SUM( `Balance` ) AS `SumOfBalance`", $lastStatement);
     $this->assertContains("WHERE `tblCompany`.`Balance` > ", $lastStatement);
 }
예제 #12
0
 function testXOR()
 {
     $filterOne = new \Rhubarb\Stem\Filters\Contains("Forename", "Jo", true);
     $filterTwo = new \Rhubarb\Stem\Filters\Contains("Surname", "Jo", true);
     $filterAnd = new \Rhubarb\Stem\Filters\Group("And");
     $filterAnd->addFilters($filterOne, $filterTwo);
     $filterOr = new \Rhubarb\Stem\Filters\Group("Or");
     $filterOr->addFilters($filterOne, $filterTwo);
     $filterNotAnd = new \Rhubarb\Stem\Filters\Not($filterAnd);
     $filterXor = new \Rhubarb\Stem\Filters\Group("And");
     $filterXor->addFilters($filterNotAnd, $filterOr);
     $this->list->filter($filterXor);
     $this->assertCount(2, $this->list);
     $this->assertContains("Luc", $this->list[0]->Surname);
 }
 protected function getCurrentlyAvailableSelectionItems()
 {
     if ($this->Phrase == "") {
         return [];
     }
     $class = $this->modelClassName;
     $list = new Collection($class);
     $filter = $this->getCollectionFilter($this->Phrase);
     $list->filter($filter);
     $results = [];
     foreach ($list as $item) {
         $result = $this->makeItem($item->getUniqueIdentifier(), $item->getLabel(), $this->getDataForItem($item));
         $results[] = $result;
     }
     return $results;
 }
 public function login($username, $password)
 {
     // We don't allow spaces around our usernames and passwords
     $username = trim($username);
     $password = trim($password);
     if ($username == "") {
         throw new LoginFailedException();
     }
     $list = new Collection($this->modelClassName);
     $list->filter(new Equals($this->usernameColumnName, $username));
     if (!sizeof($list)) {
         throw new LoginFailedException();
     }
     $hashProvider = HashProvider::getHashProvider();
     // There should only be one user matching the username. It would be possible to support
     // unique *combinations* of username and password but it's a potential security issue and
     // could trip us up when supporting the project.
     if (sizeof($list) > 1) {
         throw new LoginFailedException();
     }
     $user = $list[0];
     $this->checkUserIsPermitted($user);
     // Test the password matches.
     $userPasswordHash = $user[$this->passwordColumnName];
     if ($hashProvider->compareHash($password, $userPasswordHash)) {
         // Matching login - but is it enabled?
         if ($this->isModelActive($user)) {
             $this->LoggedIn = true;
             $this->LoggedInUserIdentifier = $user->getUniqueIdentifier();
             $this->storeSession();
             return true;
         } else {
             throw new LoginDisabledException();
         }
     }
     throw new LoginFailedException();
 }
예제 #15
0
 /**
  * Returns the Collection of models matching the given filter.
  *
  * @param Filter $filter
  * @return Collection
  */
 public static function find(Filter $filter = null)
 {
     $modelClass = get_called_class();
     $collections = new Collection($modelClass);
     if ($filter !== null) {
         $collections->filter($filter);
     }
     return $collections;
 }
예제 #16
0
 public function fetchFor(Model $relatedTo)
 {
     $targetModel = SolutionSchema::getModel($this->targetModelName);
     $sourceValue = $relatedTo[$this->getSourceColumnName()];
     $targetColumnName = $this->getTargetColumnName();
     if ($targetColumnName == $targetModel->UniqueIdentifierColumnName) {
         if ($sourceValue === null) {
             return null;
         }
         try {
             return SolutionSchema::getModel($this->targetModelName, $sourceValue);
         } catch (RecordNotFoundException $er) {
             return null;
         }
     } else {
         $collection = new Collection($this->targetModelName);
         $collection->filter(new Equals($targetColumnName, $sourceValue));
         if (sizeof($collection) > 0) {
             return $collection[0];
         }
     }
     return null;
 }
예제 #17
0
 public function testIsNullFilter()
 {
     MySql::executeStatement("TRUNCATE TABLE tblCompany");
     $company = new \Rhubarb\Stem\Tests\Fixtures\Company();
     $company->CompanyName = "GCD";
     $company->save();
     $companies = new Collection('Rhubarb\\Stem\\Tests\\Fixtures\\Company');
     $companies->filter(new Equals("CompanyName", null));
     $this->assertEquals(0, $companies->count());
     $companies = new Collection('Rhubarb\\Stem\\Tests\\Fixtures\\Company');
     $companies->filter(new Equals("ProjectCount", null));
     $this->assertEquals(1, $companies->count());
 }
예제 #18
0
 public function testEmptyCandidatesArray()
 {
     $filter = new InArray("Surname", []);
     $this->list->filter($filter);
     $this->assertCount(0, $this->list);
 }