RandomCriteria::PARAM_VALUE, ]; $criteria = SortParser::parse($parameters)[0]; static::assertInstanceOf(RandomCriteria::class, $criteria); } /** * The Sort Parser shall parse Relation Criteria. * * @return void */ public function test_parse_relation_criteria(): void { $parameters = [ SortParser::param() => collect($this->faker->words())->join('.'), ]; $criteria = SortParser::parse($parameters)[0]; static::assertInstanceOf(RelationCriteria::class, $criteria); } /** * The Sort Parser shall parse Field Criteria. * * @return void */ public function test_parse_field_criteria(): void { $parameters = [ SortParser::param() => $this->faker->word(), ]; $criteria = SortParser::parse($parameters)[0]; static::assertInstanceOf(FieldCriteria::class, $criteria); } /** * The Sort Parser shall parse the sort field. * * @return void */ public function test_parse_criteria_field(): void { $field = $this->faker->word(); $parameters = [ SortParser::param() => $field, ]; $criteria = SortParser::parse($parameters)[0]; static::assertEquals($field, $criteria->getField()); } /** * By default, the Sort Parser shall parse an ascending sort direction. * * @return void */ public function test_parse_default_direction(): void { $parameters = [ SortParser::param() => $this->faker->word(), ]; $criteria = SortParser::parse($parameters)[0]; static::assertTrue( $criteria instanceof FieldCriteria && $criteria->getDirection() === Direction::ASCENDING ); } /** * The Sort Parser shall parse a descending direction on fields that prepend a '-'. * * @return void */ public function test_parse_descending_direction(): void { $field = Str::of('-')->append($this->faker->word())->__toString(); $parameters = [ SortParser::param() => $field, ]; $criteria = SortParser::parse($parameters)[0]; static::assertTrue( $criteria instanceof FieldCriteria && $criteria->getDirection() === Direction::DESCENDING ); } /** * The Sort Parser shall parse a global scope if scope is not provided. * * @return void */ public function test_parse_global_scope(): void { $parameters = [ SortParser::param() => $this->faker->word(), ]; $criteria = SortParser::parse($parameters)[0]; static::assertInstanceOf(GlobalScope::class, $criteria->getScope()); } /** * The Sort Parser shall parse a scope if provided. * * @return void */ public function test_parse_type_scope(): void { $type = Str::singular($this->faker->word()); $parameters = [ SortParser::param() => [ $type => $this->faker->word(), ], ]; $criteria = SortParser::parse($parameters)[0]; $scope = $criteria->getScope(); static::assertTrue($scope instanceof TypeScope && $scope->getType() === $type); } }