Merge pull request #465 from pestphp/v2_json_fix

Makes `json` expectation usable in Higher Order Tests
This commit is contained in:
Nuno Maduro
2022-01-23 23:29:35 +00:00
committed by GitHub
3 changed files with 27 additions and 2 deletions

View File

@ -62,7 +62,7 @@ final class Expectation
/**
* Creates a new expectation with the decoded JSON value.
*
* @return self<mixed>
* @return self<array<int|string, mixed>|bool>
*/
public function json(): Expectation
{
@ -70,7 +70,10 @@ final class Expectation
InvalidExpectationValue::expected('string');
}
return $this->toBeJson()->and(json_decode($this->value, true));
/** @var array<int|string, mixed>|bool $value */
$value = json_decode($this->value, true);
return $this->toBeJson()->and($value);
}
/**

View File

@ -79,6 +79,16 @@ final class HigherOrderExpectation
return $this->expect($value);
}
/**
* Creates a new expectation with the decoded JSON value.
*
* @return self<TOriginalValue, array<string|int, mixed>|bool>
*/
public function json(): self
{
return new self($this->original, $this->expectation->json()->value);
}
/**
* Dynamically calls methods on the class with the given arguments.
*

View File

@ -74,8 +74,20 @@ it('works with higher order tests')
->name()->toEqual('Has Methods')
->books()->each->toBeArray;
it('works consistently with the json expectation method', function () {
expect(new HasMethods())
->jsonString()->json()->id->toBe(1)
->jsonString()->json()->name->toBe('Has Methods')->toBeString()
->jsonString()->json()->quantity->toBe(20)->toBeInt();
});
class HasMethods
{
public function jsonString(): string
{
return '{ "id": 1, "name": "Has Methods", "quantity": 20 }';
}
public function name()
{
return 'Has Methods';