2
2
3
3
namespace OpenStack \Test \Common \Resource ;
4
4
5
- use function GuzzleHttp \Psr7 \stream_for ;
6
5
use GuzzleHttp \Psr7 \Response ;
6
+ use function GuzzleHttp \Psr7 \stream_for ;
7
7
use OpenStack \Common \Resource \AbstractResource ;
8
8
use OpenStack \Common \Resource \Alias ;
9
9
use OpenStack \Common \Resource \ResourceInterface ;
10
10
use OpenStack \Test \TestCase ;
11
- use Prophecy \Argument ;
12
11
13
12
class AbstractResourceTest extends TestCase
14
13
{
@@ -37,11 +36,14 @@ public function test_it_populates_from_response()
37
36
38
37
public function test_it_populates_datetimes_from_arrays ()
39
38
{
40
- $ dt = new \DateTimeImmutable ('2015 ' );
39
+ $ ca = new \DateTimeImmutable ('2015 ' );
40
+ $ ua = new \DateTimeImmutable ('2016 ' );
41
41
42
- $ this ->resource ->populateFromArray (['created ' => '2015 ' ]);
42
+ $ this ->resource ->populateFromArray (['created_at ' => '2015 ' ]);
43
+ $ this ->resource ->populateFromArray (['updated_at ' => '2016 ' ]);
43
44
44
- $ this ->assertEquals ($ this ->resource ->created , $ dt );
45
+ $ this ->assertEquals ($ this ->resource ->createdAt , $ ca );
46
+ $ this ->assertEquals ($ this ->resource ->updatedAt , $ ua );
45
47
}
46
48
47
49
public function test_it_populates_model_objects_from_arrays ()
@@ -78,8 +80,36 @@ public function test_it_populates_models_from_response()
78
80
79
81
public function test_it_populates_models_from_arrays ()
80
82
{
81
- $ data = ['flavor ' => [], 'image ' => []];
82
- $ this ->assertInstanceOf (ResourceInterface::class, $ this ->resource ->model (TestResource::class, $ data ));
83
+ $ data = [
84
+ 'bar ' => 'this-is-bar ' ,
85
+ 'camel_attr ' => 'this-is-camel-attr ' ,
86
+ 'child ' => ['bar ' => 'child-bar ' , 'camel_attr ' => 'child-camel ' ],
87
+ 'children ' => [
88
+ ['bar ' => 'child1-bar ' , 'camel_attr ' => 'child1-camel ' ],
89
+ ['bar ' => 'child2-bar ' , 'camel_attr ' => 'child2-camel ' ],
90
+ ],
91
+ ];
92
+
93
+ /** @var TestResource $model */
94
+ $ model = $ this ->resource ->model (TestResource::class, $ data );
95
+
96
+ $ this ->assertInstanceOf (ResourceInterface::class, $ model );
97
+
98
+ $ this ->assertEquals ('this-is-bar ' , $ model ->bar );
99
+ $ this ->assertEquals ('this-is-camel-attr ' , $ model ->camelAttr );
100
+
101
+ $ child = $ model ->child ;
102
+ $ this ->assertInstanceOf (TestResource::class, $ child );
103
+ $ this ->assertEquals ('child-bar ' , $ child ->bar );
104
+ $ this ->assertEquals ('child-camel ' , $ child ->camelAttr );
105
+
106
+ $ this ->assertContainsOnlyInstancesOf (TestResource::class, $ model ->children );
107
+ $ this ->assertCount (2 , $ model ->children );
108
+ $ this ->assertEquals ('child1-bar ' , $ model ->children [0 ]->bar );
109
+ $ this ->assertEquals ('child1-camel ' , $ model ->children [0 ]->camelAttr );
110
+ $ this ->assertEquals ('child2-bar ' , $ model ->children [1 ]->bar );
111
+ $ this ->assertEquals ('child2-camel ' , $ model ->children [1 ]->camelAttr );
112
+
83
113
}
84
114
}
85
115
@@ -90,24 +120,35 @@ class TestResource extends AbstractResource
90
120
/** @var string */
91
121
public $ bar ;
92
122
123
+ /** @var string */
124
+ public $ camelAttr ;
125
+
93
126
public $ id ;
94
127
95
128
/** @var \DateTimeImmutable */
96
- public $ created ;
129
+ public $ createdAt ;
130
+
131
+ /** @var \DateTimeImmutable */
132
+ public $ updatedAt ;
97
133
98
134
/** @var []TestResource */
99
135
public $ children ;
100
136
101
137
/** @var TestResource */
102
138
public $ child ;
103
139
140
+ protected $ aliases = [
141
+ 'camel_attr ' => 'camelAttr ' ,
142
+ ];
143
+
104
144
protected function getAliases (): array
105
145
{
106
- $ aliases = parent ::getAliases ();
107
- $ aliases ['created ' ] = new Alias ('created ' , \DateTimeImmutable::class);
108
- $ aliases ['child ' ] = new Alias ('child ' , TestResource::class);
109
- $ aliases ['children ' ] = new Alias ('children ' , TestResource::class, true );
110
- return $ aliases ;
146
+ return parent ::getAliases () + [
147
+ 'created_at ' => new Alias ('createdAt ' , \DateTimeImmutable::class),
148
+ 'updated_at ' => new Alias ('updatedAt ' , \DateTimeImmutable::class),
149
+ 'child ' => new Alias ('child ' , TestResource::class),
150
+ 'children ' => new Alias ('children ' , TestResource::class, true ),
151
+ ];
111
152
}
112
153
113
154
public function getAttrs (array $ keys )
0 commit comments