22
33namespace OpenStack \Test \Common \Resource ;
44
5- use function GuzzleHttp \Psr7 \stream_for ;
65use GuzzleHttp \Psr7 \Response ;
6+ use function GuzzleHttp \Psr7 \stream_for ;
77use OpenStack \Common \Resource \AbstractResource ;
88use OpenStack \Common \Resource \Alias ;
99use OpenStack \Common \Resource \ResourceInterface ;
1010use OpenStack \Test \TestCase ;
11- use Prophecy \Argument ;
1211
1312class AbstractResourceTest extends TestCase
1413{
@@ -37,11 +36,14 @@ public function test_it_populates_from_response()
3736
3837 public function test_it_populates_datetimes_from_arrays ()
3938 {
40- $ dt = new \DateTimeImmutable ('2015 ' );
39+ $ ca = new \DateTimeImmutable ('2015 ' );
40+ $ ua = new \DateTimeImmutable ('2016 ' );
4141
42- $ this ->resource ->populateFromArray (['created ' => '2015 ' ]);
42+ $ this ->resource ->populateFromArray (['created_at ' => '2015 ' ]);
43+ $ this ->resource ->populateFromArray (['updated_at ' => '2016 ' ]);
4344
44- $ this ->assertEquals ($ this ->resource ->created , $ dt );
45+ $ this ->assertEquals ($ this ->resource ->createdAt , $ ca );
46+ $ this ->assertEquals ($ this ->resource ->updatedAt , $ ua );
4547 }
4648
4749 public function test_it_populates_model_objects_from_arrays ()
@@ -78,8 +80,36 @@ public function test_it_populates_models_from_response()
7880
7981 public function test_it_populates_models_from_arrays ()
8082 {
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+
83113 }
84114}
85115
@@ -90,24 +120,35 @@ class TestResource extends AbstractResource
90120 /** @var string */
91121 public $ bar ;
92122
123+ /** @var string */
124+ public $ camelAttr ;
125+
93126 public $ id ;
94127
95128 /** @var \DateTimeImmutable */
96- public $ created ;
129+ public $ createdAt ;
130+
131+ /** @var \DateTimeImmutable */
132+ public $ updatedAt ;
97133
98134 /** @var []TestResource */
99135 public $ children ;
100136
101137 /** @var TestResource */
102138 public $ child ;
103139
140+ protected $ aliases = [
141+ 'camel_attr ' => 'camelAttr ' ,
142+ ];
143+
104144 protected function getAliases (): array
105145 {
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+ ];
111152 }
112153
113154 public function getAttrs (array $ keys )
0 commit comments