Skip to content

Commit 62b356c

Browse files
committed
added validators to check array params
1 parent d0918ba commit 62b356c

12 files changed

+284
-32
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Dcblogdev\MsGraph\Validators;
6+
7+
use InvalidArgumentException;
8+
9+
class EmailFolderCopyValidator extends Validator
10+
{
11+
protected static array $allowedParams = [
12+
'destinationId',
13+
];
14+
15+
public static function validate(array $params): array
16+
{
17+
$validParams = parent::validate($params);
18+
19+
if (isset($validParams['destinationId']) && ! is_string($validParams['destinationId'])) {
20+
throw new InvalidArgumentException('The destinationId must be a string.');
21+
}
22+
23+
return $validParams;
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Dcblogdev\MsGraph\Validators;
6+
7+
use InvalidArgumentException;
8+
9+
class EmailFolderMoveValidator extends Validator
10+
{
11+
protected static array $allowedParams = [
12+
'destinationId',
13+
];
14+
15+
public static function validate(array $params): array
16+
{
17+
$validParams = parent::validate($params);
18+
19+
if (isset($validParams['destinationId']) && ! is_string($validParams['destinationId'])) {
20+
throw new InvalidArgumentException('The destinationId must be a string.');
21+
}
22+
23+
return $validParams;
24+
}
25+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Dcblogdev\MsGraph\Validators;
6+
7+
use InvalidArgumentException;
8+
9+
class EmailFolderStoreValidator extends Validator
10+
{
11+
protected static array $allowedParams = [
12+
'displayName', 'isHidden',
13+
];
14+
15+
public static function validate(array $params): array
16+
{
17+
$validParams = parent::validate($params);
18+
19+
if (isset($validParams['displayName']) && ! is_string($validParams['displayName'])) {
20+
throw new InvalidArgumentException('The displayName must be a string.');
21+
}
22+
23+
if (isset($validParams['isHidden']) && ! is_bool($validParams['isHidden'])) {
24+
throw new InvalidArgumentException('The isHidden must be a boolean.');
25+
}
26+
27+
return $validParams;
28+
}
29+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Dcblogdev\MsGraph\Validators;
6+
7+
use InvalidArgumentException;
8+
9+
class EmailFolderUpdateValidator extends Validator
10+
{
11+
protected static array $allowedParams = [
12+
'displayName',
13+
];
14+
15+
public static function validate(array $params): array
16+
{
17+
$validParams = parent::validate($params);
18+
19+
if (isset($validParams['displayName']) && ! is_string($validParams['displayName'])) {
20+
throw new InvalidArgumentException('The displayName must be a string.');
21+
}
22+
23+
return $validParams;
24+
}
25+
}

src/Validators/GraphQueryValidator.php

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,9 @@
66

77
use InvalidArgumentException;
88

9-
class GraphQueryValidator
9+
class GraphQueryValidator extends Validator
1010
{
11-
/**
12-
* Allowed query parameters for Microsoft Graph API requests.
13-
*/
1411
protected static array $allowedParams = [
1512
'$top', '$skip', '$filter', '$orderby', '$select', '$expand', '$count', '$search', '$format',
1613
];
17-
18-
/**
19-
* Validate and filter query parameters.
20-
*
21-
* @param array $params Query parameters to validate.
22-
* @return array Valid query parameters.
23-
*
24-
* @throws InvalidArgumentException If invalid parameters are present.
25-
*/
26-
public static function validate(array $params): array
27-
{
28-
// Filter out invalid parameters
29-
$validParams = array_intersect_key($params, array_flip(self::$allowedParams));
30-
31-
// Identify invalid parameters
32-
$invalidParams = array_diff_key($params, $validParams);
33-
if (! empty($invalidParams)) {
34-
throw new InvalidArgumentException(sprintf(
35-
"Invalid query parameters: %s. Allowed parameters: %s.",
36-
implode(', ', array_keys($invalidParams)),
37-
implode(', ', self::$allowedParams)
38-
));
39-
}
40-
41-
return $validParams;
42-
}
4314
}

src/Validators/Validator.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Dcblogdev\MsGraph\Validators;
6+
7+
use InvalidArgumentException;
8+
9+
class Validator
10+
{
11+
protected static array $allowedParams = [];
12+
13+
/**
14+
* Validate and filter parameters.
15+
*
16+
* @param array $params parameters to validate.
17+
* @return array Valid parameters.
18+
*
19+
* @throws InvalidArgumentException If invalid parameters are present.
20+
*/
21+
public static function validate(array $params): array
22+
{
23+
$allowedParams = static::$allowedParams;
24+
25+
// Filter out invalid parameters
26+
$validParams = array_intersect_key($params, array_flip($allowedParams));
27+
28+
// Identify invalid parameters
29+
$invalidParams = array_diff_key($params, $validParams);
30+
if (! empty($invalidParams)) {
31+
throw new InvalidArgumentException(sprintf(
32+
'Invalid parameters: %s. Allowed parameters: %s.',
33+
implode(', ', array_keys($invalidParams)),
34+
implode(', ', $allowedParams)
35+
));
36+
}
37+
38+
return $validParams;
39+
}
40+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Dcblogdev\MsGraph\Validators\EmailFolderCopyValidator;
4+
5+
test('valid parameters are accepted', function () {
6+
$response = EmailFolderCopyValidator::validate([
7+
'destinationId' => 'demo'
8+
]);
9+
10+
expect($response)->toEqual([
11+
'destinationId' => 'demo'
12+
]);
13+
});
14+
15+
test('throws exception for unrecognized parameters', function () {
16+
EmailFolderCopyValidator::validate([
17+
'$top' => 10,
18+
]);
19+
})->throws(InvalidArgumentException::class, 'Invalid parameters: $top. Allowed parameters: destinationId.');
20+
21+
test('throws exception if destinationId is not a string', function () {
22+
EmailFolderCopyValidator::validate(['destinationId' => 1]);
23+
})->throws(InvalidArgumentException::class, 'The destinationId must be a string.');
24+
25+
test('allows empty input without throwing an exception', function () {
26+
$response = EmailFolderCopyValidator::validate([]);
27+
expect($response)->toBe([]);
28+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Dcblogdev\MsGraph\Validators\EmailFolderMoveValidator;
4+
5+
test('valid parameters are accepted', function () {
6+
$response = EmailFolderMoveValidator::validate([
7+
'destinationId' => 'demo',
8+
]);
9+
10+
expect($response)->toEqual([
11+
'destinationId' => 'demo',
12+
]);
13+
});
14+
15+
test('throws exception for unrecognized parameters', function () {
16+
EmailFolderMoveValidator::validate([
17+
'$top' => 10,
18+
]);
19+
})->throws(InvalidArgumentException::class, 'Invalid parameters: $top. Allowed parameters: destinationId.');
20+
21+
test('throws exception if destinationId is not a string', function () {
22+
EmailFolderMoveValidator::validate(['destinationId' => 1]);
23+
})->throws(InvalidArgumentException::class, 'The destinationId must be a string.');
24+
25+
test('allows empty input without throwing an exception', function () {
26+
$response = EmailFolderMoveValidator::validate([]);
27+
expect($response)->toBe([]);
28+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
use Dcblogdev\MsGraph\Validators\EmailFolderStoreValidator;
4+
5+
test('valid parameters are accepted', function () {
6+
$response = EmailFolderStoreValidator::validate([
7+
'displayName' => 'demo',
8+
'isHidden' => false,
9+
]);
10+
11+
expect($response)->toEqual([
12+
'displayName' => 'demo',
13+
'isHidden' => false,
14+
]);
15+
});
16+
17+
test('throws exception for unrecognized parameters', function () {
18+
EmailFolderStoreValidator::validate([
19+
'$top' => 10,
20+
]);
21+
})->throws(InvalidArgumentException::class, 'Invalid parameters: $top. Allowed parameters: displayName, isHidden.');
22+
23+
test('throws exception if displayName is not a string', function () {
24+
EmailFolderStoreValidator::validate(['displayName' => 1]);
25+
})->throws(InvalidArgumentException::class, 'The displayName must be a string.');
26+
27+
test('throws exception if isHidden is not a boolean', function () {
28+
EmailFolderStoreValidator::validate(['isHidden' => 'true']);
29+
})->throws(InvalidArgumentException::class, 'The isHidden must be a boolean.');
30+
31+
test('throws exception if isHidden is an integer', function () {
32+
EmailFolderStoreValidator::validate(['isHidden' => 1]);
33+
})->throws(InvalidArgumentException::class, 'The isHidden must be a boolean.');
34+
35+
test('allows empty input without throwing an exception', function () {
36+
$response = EmailFolderStoreValidator::validate([]);
37+
expect($response)->toBe([]);
38+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Dcblogdev\MsGraph\Validators\EmailFolderUpdateValidator;
4+
5+
test('valid parameters are accepted', function () {
6+
$response = EmailFolderUpdateValidator::validate([
7+
'displayName' => 'demo'
8+
]);
9+
10+
expect($response)->toEqual([
11+
'displayName' => 'demo'
12+
]);
13+
});
14+
15+
test('throws exception for unrecognized parameters', function () {
16+
EmailFolderUpdateValidator::validate([
17+
'$top' => 10,
18+
]);
19+
})->throws(InvalidArgumentException::class, 'Invalid parameters: $top. Allowed parameters: displayName.');
20+
21+
test('throws exception if displayName is not a string', function () {
22+
EmailFolderUpdateValidator::validate(['displayName' => 1]);
23+
})->throws(InvalidArgumentException::class, 'The displayName must be a string.');
24+
25+
test('allows empty input without throwing an exception', function () {
26+
$response = EmailFolderUpdateValidator::validate([]);
27+
expect($response)->toBe([]);
28+
});

0 commit comments

Comments
 (0)