22
33declare (strict_types=1 );
44
5- namespace Tests \Feature \Console ;
6-
75use Laravel \Prompts \Key ;
86use Laravel \Prompts \Prompt ;
9- use Tests \TestCase ;
107
11- class InstallCommandMultiselectTest extends TestCase
12- {
13- /**
14- * Test that multiselect returns keys when given an associative array.
15- */
16- public function test_multiselect_returns_keys_for_associative_array (): void
17- {
18- // Mock the prompt to simulate user selecting options
19- // Note: mcp_server is already selected by default, so we don't toggle it
20- Prompt::fake ([
21- Key::DOWN , // Move to second option (ai_guidelines)
22- Key::SPACE , // Select second option
23- Key::ENTER , // Submit
24- ]);
8+ test ('multiselect returns keys for associative array ' , function () {
9+ // Mock the prompt to simulate user selecting options
10+ // Note: mcp_server is already selected by default, so we don't toggle it
11+ Prompt::fake ([
12+ Key::DOWN , // Move to second option (ai_guidelines)
13+ Key::SPACE , // Select second option
14+ Key::ENTER , // Submit
15+ ]);
2516
26- $ result = \Laravel \Prompts \multiselect (
27- label: 'What shall we install? ' ,
28- options: [
29- 'mcp_server ' => 'Boost MCP Server ' ,
30- 'ai_guidelines ' => 'Package AI Guidelines ' ,
31- 'style_guidelines ' => 'Laravel Style AI Guidelines ' ,
32- ],
33- default: ['mcp_server ' ]
34- );
17+ $ result = \Laravel \Prompts \multiselect (
18+ label: 'What shall we install? ' ,
19+ options: [
20+ 'mcp_server ' => 'Boost MCP Server ' ,
21+ 'ai_guidelines ' => 'Package AI Guidelines ' ,
22+ 'style_guidelines ' => 'Laravel Style AI Guidelines ' ,
23+ ],
24+ default: ['mcp_server ' ]
25+ );
3526
36- // Assert that we get the keys, not the values
37- $ this -> assertIsArray ( $ result );
38- $ this -> assertCount ( 2 , $ result , 'Should have 2 items selected ' );
39- $ this -> assertContains ('mcp_server ' , $ result );
40- $ this -> assertContains ('ai_guidelines ' , $ result );
41- $ this -> assertNotContains ('Boost MCP Server ' , $ result );
42- $ this -> assertNotContains ('Package AI Guidelines ' , $ result );
43- }
27+ // Assert that we get the keys, not the values
28+ expect ( $ result )-> toBeArray ( );
29+ expect ( $ result )-> toHaveCount ( 2 , 'Should have 2 items selected ' );
30+ expect ( $ result )-> toContain ('mcp_server ' );
31+ expect ( $ result )-> toContain ('ai_guidelines ' );
32+ expect ( $ result )-> not -> toContain ('Boost MCP Server ' );
33+ expect ( $ result )-> not -> toContain ('Package AI Guidelines ' );
34+ })-> skipOnWindows ();
4435
45- /**
46- * Test multiselect with numeric indexed array returns values.
47- */
48- public function test_multiselect_returns_values_for_indexed_array (): void
49- {
50- Prompt::fake ([
51- Key::SPACE , // Select first option
52- Key::DOWN , // Move to second option
53- Key::SPACE , // Select second option
54- Key::ENTER , // Submit
55- ]);
36+ test ('multiselect returns values for indexed array ' , function () {
37+ Prompt::fake ([
38+ Key::SPACE , // Select first option
39+ Key::DOWN , // Move to second option
40+ Key::SPACE , // Select second option
41+ Key::ENTER , // Submit
42+ ]);
5643
57- $ result = \Laravel \Prompts \multiselect (
58- label: 'Select options ' ,
59- options: ['Option 1 ' , 'Option 2 ' , 'Option 3 ' ],
60- default: []
61- );
44+ $ result = \Laravel \Prompts \multiselect (
45+ label: 'Select options ' ,
46+ options: ['Option 1 ' , 'Option 2 ' , 'Option 3 ' ],
47+ default: []
48+ );
6249
63- // For indexed arrays, it returns the actual values
64- $ this -> assertIsArray ( $ result );
65- $ this -> assertContains ('Option 1 ' , $ result );
66- $ this -> assertContains ('Option 2 ' , $ result );
67- }
50+ // For indexed arrays, it returns the actual values
51+ expect ( $ result )-> toBeArray ( );
52+ expect ( $ result )-> toContain ('Option 1 ' );
53+ expect ( $ result )-> toContain ('Option 2 ' );
54+ })-> skipOnWindows ();
6855
69- /**
70- * Test that demonstrates multiselect behavior is consistent with InstallCommand expectations.
71- * This ensures Laravel 10/11 compatibility.
72- */
73- public function test_multiselect_behavior_matches_install_command_expectations (): void
74- {
75- // Test the exact same structure used in InstallCommand::selectBoostFeatures()
76- // Note: mcp_server and ai_guidelines are already selected by default
77- Prompt::fake ([
78- Key::DOWN , // Move to ai_guidelines (already selected)
79- Key::DOWN , // Move to style_guidelines
80- Key::SPACE , // Select style_guidelines
81- Key::ENTER , // Submit
82- ]);
56+ test ('multiselect behavior matches install command expectations ' , function () {
57+ // Test the exact same structure used in InstallCommand::selectBoostFeatures()
58+ // Note: mcp_server and ai_guidelines are already selected by default
59+ Prompt::fake ([
60+ Key::DOWN , // Move to ai_guidelines (already selected)
61+ Key::DOWN , // Move to style_guidelines
62+ Key::SPACE , // Select style_guidelines
63+ Key::ENTER , // Submit
64+ ]);
8365
84- $ toInstallOptions = [
85- 'mcp_server ' => 'Boost MCP Server ' ,
86- 'ai_guidelines ' => 'Package AI Guidelines (i.e. Framework, Inertia, Pest) ' ,
87- 'style_guidelines ' => 'Laravel Style AI Guidelines ' ,
88- ];
66+ $ toInstallOptions = [
67+ 'mcp_server ' => 'Boost MCP Server ' ,
68+ 'ai_guidelines ' => 'Package AI Guidelines (i.e. Framework, Inertia, Pest) ' ,
69+ 'style_guidelines ' => 'Laravel Style AI Guidelines ' ,
70+ ];
8971
90- $ result = \Laravel \Prompts \multiselect (
91- label: 'What shall we install? ' ,
92- options: $ toInstallOptions ,
93- default: ['mcp_server ' , 'ai_guidelines ' ],
94- required: true ,
95- hint: 'Style guidelines are best for new projects ' ,
96- );
72+ $ result = \Laravel \Prompts \multiselect (
73+ label: 'What shall we install? ' ,
74+ options: $ toInstallOptions ,
75+ default: ['mcp_server ' , 'ai_guidelines ' ],
76+ required: true ,
77+ hint: 'Style guidelines are best for new projects ' ,
78+ );
9779
98- // Verify we get keys that can be used with in_array checks
99- $ this -> assertIsArray ( $ result );
100- $ this -> assertCount ( 3 , $ result ); // All 3 selected (2 default + 1 added)
80+ // Verify we get keys that can be used with in_array checks
81+ expect ( $ result )-> toBeArray ( );
82+ expect ( $ result )-> toHaveCount ( 3 ); // All 3 selected (2 default + 1 added)
10183
102- // These are the exact checks used in InstallCommand
103- $ this -> assertTrue (in_array ('mcp_server ' , $ result , true ));
104- $ this -> assertTrue (in_array ('ai_guidelines ' , $ result , true ));
105- $ this -> assertTrue (in_array ('style_guidelines ' , $ result , true ));
84+ // These are the exact checks used in InstallCommand
85+ expect (in_array ('mcp_server ' , $ result , true ))-> toBeTrue ( );
86+ expect (in_array ('ai_guidelines ' , $ result , true ))-> toBeTrue ( );
87+ expect (in_array ('style_guidelines ' , $ result , true ))-> toBeTrue ( );
10688
107- // Verify it doesn't contain the display values
108- $ this ->assertFalse (in_array ('Boost MCP Server ' , $ result , true ));
109- $ this ->assertFalse (in_array ('Package AI Guidelines (i.e. Framework, Inertia, Pest) ' , $ result , true ));
110- }
111- }
89+ // Verify it doesn't contain the display values
90+ expect (in_array ('Boost MCP Server ' , $ result , true ))->toBeFalse ();
91+ expect (in_array ('Package AI Guidelines (i.e. Framework, Inertia, Pest) ' , $ result , true ))->toBeFalse ();
92+ })->skipOnWindows ();
0 commit comments