1313
1414namespace CodeIgniter \Commands \Utilities ;
1515
16+ use Closure ;
1617use CodeIgniter \Test \CIUnitTestCase ;
1718use CodeIgniter \Test \StreamFilterTrait ;
1819use Config \App ;
20+ use Kint \Kint ;
21+ use Kint \Renderer \CliRenderer ;
1922use PHPUnit \Framework \Attributes \Group ;
2023
2124/**
@@ -26,6 +29,26 @@ final class ConfigCheckTest extends CIUnitTestCase
2629{
2730 use StreamFilterTrait;
2831
32+ public static function setUpBeforeClass (): void
33+ {
34+ App::$ override = false ;
35+
36+ putenv ('NO_COLOR=1 ' );
37+ CliRenderer::$ cli_colors = false ;
38+
39+ parent ::setUpBeforeClass ();
40+ }
41+
42+ public static function tearDownAfterClass (): void
43+ {
44+ App::$ override = true ;
45+
46+ putenv ('NO_COLOR ' );
47+ CliRenderer::$ cli_colors = true ;
48+
49+ parent ::tearDownAfterClass ();
50+ }
51+
2952 protected function setUp (): void
3053 {
3154 $ this ->resetServices ();
@@ -38,188 +61,71 @@ protected function tearDown(): void
3861 parent ::tearDown ();
3962 }
4063
41- protected function getBuffer ()
42- {
43- return $ this ->getStreamFilterBuffer ();
44- }
45-
46- public function testCommandConfigCheckNoArg (): void
64+ public function testCommandConfigCheckWithNoArgumentPassed (): void
4765 {
4866 command ('config:check ' );
4967
50- $ this ->assertStringContainsString (
51- 'You must specify a Config classname. ' ,
52- $ this ->getBuffer ()
53- );
54- }
55-
56- public function testCommandConfigCheckApp (): void
57- {
58- command ('config:check App ' );
68+ $ this ->assertSame (
69+ <<<'EOF'
70+ You must specify a Config classname.
71+ Usage: config:check <classname>
72+ Example: config:check App
73+ config:check 'CodeIgniter\Shield\Config\Auth'
5974
60- $ this ->assertStringContainsString (App::class, $ this ->getBuffer ());
61- $ this ->assertStringContainsString ("public 'baseURL " , $ this ->getBuffer ());
75+ EOF,
76+ str_replace ("\n\n" , "\n" , $ this ->getStreamFilterBuffer ())
77+ );
6278 }
6379
6480 public function testCommandConfigCheckNonexistentClass (): void
6581 {
6682 command ('config:check Nonexistent ' );
6783
68- $ this ->assertStringContainsString (
69- ' No such Config class: Nonexistent ' ,
70- $ this ->getBuffer ()
84+ $ this ->assertSame (
85+ " No such Config class: Nonexistent \n" ,
86+ $ this ->getStreamFilterBuffer ()
7187 );
7288 }
7389
74- public function testGetKintD (): void
90+ public function testConfigCheckWithKintEnabledUsesKintD (): void
7591 {
76- $ command = new ConfigCheck (service ('logger ' ), service ('commands ' ));
77- $ getKintD = $ this ->getPrivateMethodInvoker ($ command , 'getKintD ' );
78-
79- $ output = $ getKintD (new App ());
80-
81- $ output = preg_replace (
82- '/(\033\[[0-9;]+m)|(\035\[[0-9;]+m)/u ' ,
83- '' ,
84- $ output
92+ /** @var Closure(object): string $command */
93+ $ command = $ this ->getPrivateMethodInvoker (
94+ new ConfigCheck (service ('logger ' ), service ('commands ' )),
95+ 'getKintD '
8596 );
8697
87- $ this ->assertStringContainsString (
88- 'Config\App# ' ,
89- $ output
90- );
91- $ this ->assertStringContainsString (
92- <<<'EOL'
93- (
94- public 'baseURL' -> string (19) "http://example.com/"
95- public 'allowedHostnames' -> array (0) []
96- public 'indexPage' -> string (9) "index.php"
97- public 'uriProtocol' -> string (11) "REQUEST_URI"
98- public 'permittedURIChars' -> string (14) "a-z 0-9~%.:_\-"
99- public 'defaultLocale' -> string (2) "en"
100- public 'negotiateLocale' -> boolean false
101- public 'supportedLocales' -> array (1) [
102- 0 => string (2) "en"
103- ]
104- public 'appTimezone' -> string (3) "UTC"
105- public 'charset' -> string (5) "UTF-8"
106- public 'forceGlobalSecureRequests' -> boolean false
107- public 'proxyIPs' -> array (0) []
108- public 'CSPEnabled' -> boolean false
109- EOL,
110- $ output
98+ command ('config:check App ' );
99+
100+ $ this ->assertSame (
101+ $ command (config ('App ' )) . "\n" ,
102+ preg_replace ('/\s+Config Caching: \S+/ ' , '' , $ this ->getStreamFilterBuffer ())
111103 );
112104 }
113105
114- public function testGetVarDump (): void
106+ public function testConfigCheckWithKintDisabledUsesVarDump (): void
115107 {
116- $ command = new ConfigCheck (service ('logger ' ), service ('commands ' ));
117- $ getVarDump = $ this ->getPrivateMethodInvoker ($ command , 'getVarDump ' );
118-
119- $ output = $ getVarDump (new App ());
120-
121- if (
122- ini_get ('xdebug.mode ' )
123- && in_array (
124- 'develop ' ,
125- explode (', ' , ini_get ('xdebug.mode ' )),
126- true
127- )
128- ) {
129- // Xdebug force adds colors on xdebug.cli_color=2
130- $ output = preg_replace (
131- '/(\033\[[0-9;]+m)|(\035\[[0-9;]+m)/u ' ,
132- '' ,
133- $ output
134- );
108+ /** @var Closure(object): string $command */
109+ $ command = $ this ->getPrivateMethodInvoker (
110+ new ConfigCheck (service ('logger ' ), service ('commands ' )),
111+ 'getVarDump '
112+ );
113+ $ clean = static fn (string $ input ): string => trim (preg_replace (
114+ '/(\033\[[0-9;]+m)|(\035\[[0-9;]+m)/u ' ,
115+ '' ,
116+ $ input
117+ ));
135118
136- // Xdebug overloads var_dump().
137- $ this ->assertStringContainsString (
138- 'class Config\App# ' ,
139- $ output
140- );
141- $ this ->assertStringContainsString (
142- <<<'EOL'
143- {
144- public string $baseURL =>
145- string(19) "http://example.com/"
146- public array $allowedHostnames =>
147- array(0) {
148- }
149- public string $indexPage =>
150- string(9) "index.php"
151- public string $uriProtocol =>
152- string(11) "REQUEST_URI"
153- public string $permittedURIChars =>
154- string(14) "a-z 0-9~%.:_\-"
155- public string $defaultLocale =>
156- string(2) "en"
157- public bool $negotiateLocale =>
158- bool(false)
159- public array $supportedLocales =>
160- array(1) {
161- [0] =>
162- string(2) "en"
163- }
164- public string $appTimezone =>
165- string(3) "UTC"
166- public string $charset =>
167- string(5) "UTF-8"
168- public bool $forceGlobalSecureRequests =>
169- bool(false)
170- public array $proxyIPs =>
171- array(0) {
172- }
173- public bool $CSPEnabled =>
174- bool(false)
175- }
176- EOL,
177- $ output
178- );
179- } else {
180- // PHP's var_dump().
181- $ this ->assertStringContainsString (
182- 'object(Config\App)# ' ,
183- $ output
184- );
185- $ this ->assertStringContainsString (
186- <<<'EOL'
187- {
188- ["baseURL"]=>
189- string(19) "http://example.com/"
190- ["allowedHostnames"]=>
191- array(0) {
192- }
193- ["indexPage"]=>
194- string(9) "index.php"
195- ["uriProtocol"]=>
196- string(11) "REQUEST_URI"
197- ["permittedURIChars"]=>
198- string(14) "a-z 0-9~%.:_\-"
199- ["defaultLocale"]=>
200- string(2) "en"
201- ["negotiateLocale"]=>
202- bool(false)
203- ["supportedLocales"]=>
204- array(1) {
205- [0]=>
206- string(2) "en"
207- }
208- ["appTimezone"]=>
209- string(3) "UTC"
210- ["charset"]=>
211- string(5) "UTF-8"
212- ["forceGlobalSecureRequests"]=>
213- bool(false)
214- ["proxyIPs"]=>
215- array(0) {
216- }
217- ["CSPEnabled"]=>
218- bool(false)
219- }
220- EOL,
221- $ output
119+ try {
120+ Kint::$ enabled_mode = false ;
121+ command ('config:check App ' );
122+
123+ $ this ->assertSame (
124+ $ clean ($ command (config ('App ' ))),
125+ $ clean (preg_replace ('/\s+Config Caching: \S+/ ' , '' , $ this ->getStreamFilterBuffer ()))
222126 );
127+ } finally {
128+ Kint::$ enabled_mode = true ;
223129 }
224130 }
225131}
0 commit comments