1
0
mirror of https://github.com/halaxa/json-machine.git synced 2025-07-16 12:06:23 +02:00
Files
json-machine/test/JsonMachineTest/ValidJsonPointersTest.php
2023-11-26 22:07:06 +01:00

92 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace JsonMachineTest;
use JsonMachine\Exception\InvalidArgumentException;
use JsonMachine\ValidJsonPointers;
/**
* @covers \JsonMachine\ValidJsonPointers
*/
class ValidJsonPointersTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider data_testThrowsOnIntersectingPaths
*
* @param $jsonPointers
*/
public function testThrowsOnIntersectingPaths($jsonPointers)
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage("'$jsonPointers[0]', '$jsonPointers[1]'");
(new ValidJsonPointers($jsonPointers))->toArray();
}
public function data_testThrowsOnIntersectingPaths()
{
return [
[['/companies/-/id', '/companies/0/id']],
[['/companies/-/id', '', '/companies/0/id']],
[['/companies/-/id', '']],
[['/companies/0/id', '']],
[['//in-empty-string-key', '/']],
[['/~0~1/in-escaped-key', '/~0~1']],
];
}
/**
* @dataProvider data_testThrowsOnMalformedJsonPointer
*/
public function testThrowsOnMalformedJsonPointer(array $jsonPointer)
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('not valid');
(new ValidJsonPointers($jsonPointer))->toArray();
}
public function data_testThrowsOnMalformedJsonPointer()
{
return [
[['apple']],
[['/apple/~']],
[['apple/pie']],
[['apple/pie/']],
[[' /apple/pie/']],
[[
'/valid',
'/valid/-',
'inv/alid',
]],
];
}
public function testThrowsOnDuplicatePaths()
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage("'/one', '/one'");
(new ValidJsonPointers(['/one', '/one']))->toArray();
}
/**
* @dataProvider data_testToArrayReturnsJsonPointers
*/
public function testToArrayReturnsJsonPointers(string $pointerA, string $pointerB)
{
$this->assertSame(
[$pointerA, $pointerB],
(new ValidJsonPointers([$pointerA, $pointerB]))->toArray()
);
}
public function data_testToArrayReturnsJsonPointers()
{
return [
['/one', '/two'],
['/companies/-/id', '/companies/0/idempotency_key'],
['/companies/1/id', '/companies/1/idempotency_key'],
];
}
}