33namespace spec \GrumPHP \Configuration \Resolver ;
44
55use GrumPHP \Task \Config \ConfigOptionsResolver ;
6- use const GrumPHP \Exception \TaskConfigResolverException ;
76use GrumPHP \Exception \TaskConfigResolverException ;
87use GrumPHP \Runner \TaskResult ;
98use GrumPHP \Runner \TaskResultInterface ;
109use GrumPHP \Task \Config \EmptyTaskConfig ;
10+ use GrumPHP \Task \Config \Metadata ;
11+ use GrumPHP \Task \Config \TaskConfig ;
1112use GrumPHP \Task \Config \TaskConfigInterface ;
1213use GrumPHP \Task \Context \ContextInterface ;
1314use GrumPHP \Task \TaskInterface ;
@@ -30,40 +31,67 @@ public function it_is_initializable(): void
3031 public function it_can_list_task_names (): void
3132 {
3233 $ this ->beConstructedWith ([
33- 'task1 ' => get_class ($ this ->mockTask ()),
34- 'task2 ' => get_class ($ this ->mockTask ()),
34+ 'task1 ' => [
35+ 'class ' => get_class ($ this ->mockTask ()),
36+ 'config ' => [],
37+ ],
38+ 'task2 ' => [
39+ 'class ' => get_class ($ this ->mockTask ()),
40+ 'config ' => [],
41+ ],
3542 ]);
3643 $ this ->listAvailableTaskNames ()->shouldBe (['task1 ' , 'task2 ' ]);
3744 }
3845
39- public function it_can_resolve_config_for_task_without_metadata (): void
46+ public function it_can_resolve_config_for_task (): void
4047 {
4148 $ task1 = $ this ->mockTask ();
42- $ this ->beConstructedWith ([$ taskName = 'task1 ' => get_class ($ task1 )]);
43- $ this ->resolve ('task1 ' , ['metadata ' => ['label ' => 'hello ' ]])->shouldBe ([
44- 'class ' => get_class ($ task1 ),
49+ $ taskName = 'task1 ' ;
50+ $ this ->beConstructedWith ([
51+ $ taskName => [
52+ 'class ' => get_class ($ task1 ),
53+ 'config ' => [
54+ 'foo ' => 'hello ' ,
55+ 'metadata ' => ['priority ' => 1000 ],
56+ ]
57+ ]
4558 ]);
59+
60+ $ actual = $ this ->resolve ($ taskName );
61+ $ actual ->getName ()->shouldBe ($ taskName );
62+ $ actual ->getOptions ()->shouldBe (['foo ' => 'hello ' ]);
63+ $ actual ->getMetadata ()->priority ()->shouldBe (1000 );
4664 }
4765
48- public function it_fetches_resolver_for_task (): void
66+ public function it_can_fetch_config_resolver_for_task (): void
4967 {
5068 $ task1 = $ this ->mockTask ();
51- $ this ->beConstructedWith ([$ taskName = 'task1 ' => get_class ($ task1 )]);
52- $ result = $ this ->fetchByName ($ taskName )->resolve ([]);
53- $ result ->shouldBeLike ($ task1 ::getConfigurableOptions ()->resolve ([]));
69+ $ taskName = 'task1 ' ;
70+ $ this ->beConstructedWith ([
71+ $ taskName => [
72+ 'class ' => get_class ($ task1 ),
73+ 'config ' => [
74+ 'foo ' => 'hello ' ,
75+ 'metadata ' => ['priority ' => 1000 ],
76+ ]
77+ ]
78+ ]);
79+
80+ $ actual = $ this ->fetchByName ($ taskName );
81+ $ actual ->resolve (['foo ' => 'hello ' ])->shouldBe (['foo ' => 'hello ' ]);
5482 }
5583
5684 public function it_fails_when_task_is_unknown (): void
5785 {
58- $ this ->beConstructedWith (['task1 ' => get_class ($ this ->mockTask ())]);
86+ $ this ->beConstructedWith (['task1 ' => [ ' class ' => get_class ($ this ->mockTask ())] ]);
5987 $ this ->shouldThrow (TaskConfigResolverException::class)->duringFetchByName ('task2 ' );
6088 }
6189
6290 public function it_fails_when_task_is_not_a_grumphp_task (): void
6391 {
6492 $ this ->beConstructedWith ([
65- 'task1 ' => get_class (new class () {}),
66- 'task2 ' => ' Some \\Mega \\Unknown \\Class \\PLease \\Dont \\Create \\Me ' ,
93+ 'task1 ' => [ ' class ' => get_class (new class () {}), ' config ' => []] ,
94+ 'task2 ' => [ ' class ' => ' Some \\Mega \\Unknown \\Class \\PLease \\Dont \\Create \\Me ', ' config ' => []] ,
6795 ]);
6896 $ this ->shouldThrow (TaskConfigResolverException::class)->duringFetchByName ('task1 ' );
6997 $ this ->shouldThrow (TaskConfigResolverException::class)->duringFetchByName ('task2 ' );
@@ -76,7 +104,7 @@ private function mockTask(): TaskInterface
76104 public static function getConfigurableOptions (): ConfigOptionsResolver
77105 {
78106 $ options = new OptionsResolver ();
79- $ options ->setDefault ('class ' , static ::class );
107+ $ options ->setDefault ('foo ' , ' bar ' );
80108 return ConfigOptionsResolver::fromOptionsResolver ($ options );
81109 }
82110
0 commit comments