Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
64.29% covered (warning)
64.29%
9 / 14
40.00% covered (danger)
40.00%
2 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
ThinnedScopeList
64.29% covered (warning)
64.29%
9 / 14
40.00% covered (danger)
40.00%
2 / 5
12.69
0.00% covered (danger)
0.00%
0 / 1
 __construct
57.14% covered (warning)
57.14%
4 / 7
0.00% covered (danger)
0.00%
0 / 1
5.26
 ensureValid
50.00% covered (danger)
50.00%
1 / 2
0.00% covered (danger)
0.00%
0 / 1
2.50
 toArray
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 jsonSerialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getScopes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Zmscitizenapi\Models\Collections;
6
7use BO\Zmscitizenapi\Models\ThinnedScope;
8use BO\Zmsentities\Schema\Entity;
9use InvalidArgumentException;
10use JsonSerializable;
11
12class ThinnedScopeList extends Entity implements JsonSerializable
13{
14    public static $schema = "citizenapi/collections/thinnedScopeList.json";
15/** @var ThinnedScope[] */
16    public array $scopes = [];
17    public function __construct(array $scopes = [])
18    {
19        foreach ($scopes as $scope) {
20            try {
21                if (!$scope instanceof ThinnedScope) {
22                    throw new InvalidArgumentException("Element is not an instance of ThinnedScope.");
23                }
24                $this->scopes[] = $scope;
25            } catch (\Exception $e) {
26                error_log("Invalid ThinnedScope encountered: " . $e->getMessage());
27            //Gracefully handle
28            }
29        }
30
31        $this->ensureValid();
32    }
33
34    private function ensureValid()
35    {
36        if (!$this->testValid()) {
37            throw new InvalidArgumentException("The provided data is invalid according to the schema.");
38        }
39    }
40
41    public function toArray(): array
42    {
43        return [
44            'scopes' => array_map(fn(ThinnedScope $scope) => $scope->toArray(), $this->scopes),
45        ];
46    }
47
48    public function jsonSerialize(): mixed
49    {
50        return $this->toArray();
51    }
52
53    public function getScopes(): array
54    {
55        return $this->scopes;
56    }
57}