@@ -22,7 +22,13 @@ static function ( array $properties ) {
22
22
'type ' => 'object ' ,
23
23
'properties ' => array (
24
24
'hex ' => array (
25
- 'type ' => 'string ' ,
25
+ 'type ' => 'object ' ,
26
+ 'properties ' => array (
27
+ 'red ' => array (
28
+ 'type ' => 'string ' ,
29
+ ),
30
+ ),
31
+ 'additionalProperties ' => true ,
26
32
),
27
33
),
28
34
'additionalProperties ' => true ,
@@ -35,9 +41,15 @@ static function ( array $properties ) {
35
41
static function ( array $ properties ) {
36
42
$ properties ['region ' ] = array (
37
43
'type ' => 'object ' ,
38
- 'properties ' => array (
39
- 'continent ' => array (
40
- 'type ' => 'string ' ,
44
+ 'patternProperties ' => array (
45
+ '\w+ ' => array (
46
+ 'type ' => 'object ' ,
47
+ 'properties ' => array (
48
+ 'name ' => array (
49
+ 'type ' => 'string ' ,
50
+ ),
51
+ ),
52
+ 'additionalProperties ' => true ,
41
53
),
42
54
),
43
55
'additionalProperties ' => true ,
@@ -49,14 +61,41 @@ static function ( array $properties ) {
49
61
$ this ->assertTrue ( $ loose_schema ['additionalProperties ' ] );
50
62
$ this ->assertFalse ( $ loose_schema ['properties ' ]['viewport ' ]['additionalProperties ' ] ); // The viewport is never extensible. Only the root and the elements are.
51
63
$ this ->assertTrue ( $ loose_schema ['properties ' ]['elements ' ]['items ' ]['additionalProperties ' ] );
64
+ $ this ->assertTrue ( $ loose_schema ['properties ' ]['colors ' ]['properties ' ]['hex ' ]['additionalProperties ' ] );
52
65
$ this ->assertTrue ( $ loose_schema ['properties ' ]['elements ' ]['items ' ]['properties ' ]['region ' ]['additionalProperties ' ] );
66
+ $ this ->assertTrue ( $ loose_schema ['properties ' ]['elements ' ]['items ' ]['properties ' ]['region ' ]['patternProperties ' ]['\w+ ' ]['additionalProperties ' ] );
53
67
$ this ->assertTrue ( $ loose_schema ['properties ' ]['colors ' ]['additionalProperties ' ] );
54
68
55
69
$ strict_schema = OD_Strict_URL_Metric::get_json_schema ();
56
70
$ this ->assertFalse ( $ strict_schema ['additionalProperties ' ] );
57
71
$ this ->assertFalse ( $ strict_schema ['properties ' ]['viewport ' ]['additionalProperties ' ] );
58
72
$ this ->assertFalse ( $ strict_schema ['properties ' ]['elements ' ]['items ' ]['additionalProperties ' ] );
73
+ $ this ->assertFalse ( $ strict_schema ['properties ' ]['colors ' ]['properties ' ]['hex ' ]['additionalProperties ' ] );
59
74
$ this ->assertFalse ( $ strict_schema ['properties ' ]['elements ' ]['items ' ]['properties ' ]['region ' ]['additionalProperties ' ] );
75
+ $ this ->assertFalse ( $ strict_schema ['properties ' ]['elements ' ]['items ' ]['properties ' ]['region ' ]['patternProperties ' ]['\w+ ' ]['additionalProperties ' ] );
60
76
$ this ->assertFalse ( $ strict_schema ['properties ' ]['colors ' ]['additionalProperties ' ] );
61
77
}
78
+
79
+ /**
80
+ * Tests get_json_schema() with missing type.
81
+ *
82
+ * @covers ::get_json_schema
83
+ */
84
+ public function test_get_json_schema_with_missing_type (): void {
85
+ $ this ->setExpectedIncorrectUsage ( 'Filter: 'od_url_metric_schema_root_additional_properties' ' );
86
+ add_filter (
87
+ 'od_url_metric_schema_root_additional_properties ' ,
88
+ static function ( array $ properties ) {
89
+ $ properties ['foo ' ] = array (
90
+ 'readonly ' => true ,
91
+ );
92
+ return $ properties ;
93
+ }
94
+ );
95
+ $ loose_schema = OD_URL_Metric::get_json_schema ();
96
+ $ this ->assertArrayNotHasKey ( 'colors ' , $ loose_schema ['properties ' ] );
97
+
98
+ $ strict_schema = OD_Strict_URL_Metric::get_json_schema ();
99
+ $ this ->assertArrayNotHasKey ( 'colors ' , $ strict_schema ['properties ' ] );
100
+ }
62
101
}
0 commit comments