Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/GraphQL.php
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ public static function formatError(Error $e): array
}

if ($previous instanceof ValidationError) {
$error['extensions']['validation'] = $previous->getValidatorMessages();
$error['extensions']['validation'] = $previous->getValidatorMessages()->getMessages();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
declare(strict_types = 1);
namespace Rebing\GraphQL\Tests\Database\MutationValidationUniqueWithCustomRulesTests;

use Illuminate\Contracts\Support\MessageBag;
use Rebing\GraphQL\Tests\Support\Models\User;
use Rebing\GraphQL\Tests\Support\Traits\SqlAssertionTrait;
use Rebing\GraphQL\Tests\TestCaseDatabase;
Expand Down Expand Up @@ -89,14 +88,31 @@ public function testUniqueFailRulePass(): void
SQL
);

self::assertCount(1, $result['errors']);
self::assertSame('validation', $result['errors'][0]['message']);
/** @var MessageBag $messageBag */
$messageBag = $result['errors'][0]['extensions']['validation'];
$expectedMessages = [
'The arg unique rule pass has already been taken.',
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'arg_unique_rule_pass' => [
'The arg unique rule pass has already been taken.',
],
],
],
'locations' => [
[
'line' => 2,
'column' => 3,
],
],
'path' => [
'mutationWithCustomRuleWithRuleObject',
],
],
],
];
self::assertSame($expectedMessages, $messageBag->all());
self::assertEquals($expected, $result);
}

public function testUniquePassRuleFail(): void
Expand All @@ -122,14 +138,31 @@ public function testUniquePassRuleFail(): void
],
]);

self::assertCount(1, $result['errors']);
self::assertSame('validation', $result['errors'][0]['message']);
/** @var MessageBag $messageBag */
$messageBag = $result['errors'][0]['extensions']['validation'];
$expectedMessages = [
'rule object validation fails',
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'arg_unique_rule_fail' => [
'rule object validation fails',
],
],
],
'locations' => [
[
'line' => 2,
'column' => 3,
],
],
'path' => [
'mutationWithCustomRuleWithRuleObject',
],
],
],
];
self::assertSame($expectedMessages, $messageBag->all());
self::assertEquals($expected, $result);
}

public function testUniqueFailRuleFail(): void
Expand Down Expand Up @@ -161,15 +194,32 @@ public function testUniqueFailRuleFail(): void
SQL
);

self::assertCount(1, $result['errors']);
self::assertSame('validation', $result['errors'][0]['message']);
/** @var MessageBag $messageBag */
$messageBag = $result['errors'][0]['extensions']['validation'];
$expectedMessages = [
'The arg unique rule fail has already been taken.',
'rule object validation fails',
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'arg_unique_rule_fail' => [
'The arg unique rule fail has already been taken.',
'rule object validation fails',
],
],
],
'locations' => [
[
'line' => 2,
'column' => 3,
],
],
'path' => [
'mutationWithCustomRuleWithRuleObject',
],
],
],
];
self::assertSame($expectedMessages, $messageBag->all());
self::assertEquals($expected, $result);
}

public function testErrorExtension(): void
Expand Down
33 changes: 28 additions & 5 deletions tests/Unit/GraphQLQueryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,34 @@ public function testQueryWithValidationError(): void
'expectErrors' => true,
]);

self::assertArrayHasKey('data', $result);
self::assertArrayHasKey('errors', $result);
self::assertArrayHasKey('extensions', $result['errors'][0]);
self::assertArrayHasKey('validation', $result['errors'][0]['extensions']);
self::assertTrue($result['errors'][0]['extensions']['validation']->has('test_validation.args.index'));
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'test_validation.args.index' => [
'The test validation.args.index field is required.',
],
],
],
'locations' => [
[
'line' => 3,
'column' => 13,
],
],
'path' => [
'examples',
],
],
],
'data' => [
'examples' => null,
],
];
self::assertEquals($expected, $result);
}

public function testQueryWithValidation(): void
Expand Down
19 changes: 15 additions & 4 deletions tests/Unit/GraphQLTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -349,10 +349,21 @@ public function testFormatValidationError(): void
$error = new Error('error', null, null, [], null, $validationError);
$error = GraphQL::formatError($error);

self::assertIsArray($error);
self::assertArrayHasKey('extensions', $error);
self::assertArrayHasKey('validation', $error['extensions']);
self::assertTrue($error['extensions']['validation']->has('test'));
self::assertArrayHasKey('trace', $error);
unset($error['trace']);

$expected = [
'message' => 'error',
'extensions' => [
'category' => 'validation',
'validation' => [
'test' => [
'The test field is required.',
],
],
],
];
self::assertEquals($expected, $error);
}

public function testAddType(): void
Expand Down
61 changes: 50 additions & 11 deletions tests/Unit/MutationCustomRulesTests/MutationCustomRulesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
declare(strict_types = 1);
namespace Rebing\GraphQL\Tests\Unit\MutationCustomRulesTests;

use Illuminate\Contracts\Support\MessageBag;
use Rebing\GraphQL\Tests\TestCase;

class MutationCustomRulesTest extends TestCase
Expand Down Expand Up @@ -35,11 +34,31 @@ public function testMutationWithCustomRuleWithClosure(): void
],
]);

self::assertCount(1, $result['errors']);
self::assertSame('validation', $result['errors'][0]['message']);
/** @var MessageBag $messageBag */
$messageBag = $result['errors'][0]['extensions']['validation'];
self::assertSame(['arg1 is invalid'], $messageBag->all());
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'arg1' => [
'arg1 is invalid',
],
],
],
'locations' => [
[
'line' => 2,
'column' => 3,
],
],
'path' => [
'mutationWithCustomRuleWithClosure',
],
],
],
];
self::assertEquals($expected, $result);
}

public function testMutationWithCustomRuleWithRuleObject(): void
Expand All @@ -57,10 +76,30 @@ public function testMutationWithCustomRuleWithRuleObject(): void
],
]);

self::assertCount(1, $result['errors']);
self::assertSame('validation', $result['errors'][0]['message']);
/** @var MessageBag $messageBag */
$messageBag = $result['errors'][0]['extensions']['validation'];
self::assertSame(['arg1 is invalid'], $messageBag->all());
$expected = [
'errors' => [
[
'message' => 'validation',
'extensions' => [
'category' => 'validation',
'validation' => [
'arg1' => [
'arg1 is invalid',
],
],
],
'locations' => [
[
'line' => 2,
'column' => 3,
],
],
'path' => [
'mutationWithCustomRuleWithRuleObject',
],
],
],
];
self::assertEquals($expected, $result);
}
}
Loading