• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

orchestral / dusk-updater / 13355377128

16 Feb 2025 01:14PM UTC coverage: 56.977% (-2.8%) from 59.794%
13355377128

push

github

crynobone
wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

40 of 76 new or added lines in 2 files covered. (52.63%)

18 existing lines in 2 files now uncovered.

98 of 172 relevant lines covered (56.98%)

1.65 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

51.35
/src/Concerns/ConfiguresPrompts.php
1
<?php
2

3
namespace Orchestra\DuskUpdater\Concerns;
4

5
use Laravel\Prompts\ConfirmPrompt;
6
use Laravel\Prompts\MultiSelectPrompt;
7
use Laravel\Prompts\PasswordPrompt;
8
use Laravel\Prompts\Prompt;
9
use Laravel\Prompts\SelectPrompt;
10
use Laravel\Prompts\SuggestPrompt;
11
use Laravel\Prompts\TextPrompt;
12
use Symfony\Component\Console\Input\InputInterface;
13
use Symfony\Component\Console\Output\OutputInterface;
14
use Symfony\Component\Console\Question\Question;
15
use Symfony\Component\Console\Style\SymfonyStyle;
16

17
trait ConfiguresPrompts
18
{
19
    /**
20
     * Configure the prompt fallbacks.
21
     *
22
     * @return void
23
     */
24
    protected function configurePrompts(InputInterface $input, OutputInterface $output)
25
    {
26
        Prompt::setOutput($output);
3✔
27

28
        $enabled = true;
3✔
29

30
        if (isset($_ENV['PROMPTS_ENABLED'])) {
3✔
31
            $enabled = in_array($_ENV['PROMPTS_ENABLED'], [true, 'true']);
3✔
32
        }
33

34
        Prompt::fallbackWhen(! $input->isInteractive() || PHP_OS_FAMILY === 'Windows' || $enabled == false);
3✔
35

36
        TextPrompt::fallbackUsing(fn (TextPrompt $prompt) => $this->promptUntilValid(
3✔
37
            fn () => (new SymfonyStyle($input, $output))->ask($prompt->label, $prompt->default ?: null) ?? '',
3✔
38
            $prompt->required,
3✔
39
            $prompt->validate,
3✔
40
            $output
3✔
41
        ));
3✔
42

43
        PasswordPrompt::fallbackUsing(fn (PasswordPrompt $prompt) => $this->promptUntilValid(
3✔
44
            fn () => (new SymfonyStyle($input, $output))->askHidden($prompt->label) ?? '',
3✔
45
            $prompt->required,
3✔
46
            $prompt->validate,
3✔
47
            $output
3✔
48
        ));
3✔
49

50
        ConfirmPrompt::fallbackUsing(fn (ConfirmPrompt $prompt) => $this->promptUntilValid(
3✔
51
            fn () => (new SymfonyStyle($input, $output))->confirm($prompt->label, $prompt->default),
3✔
52
            $prompt->required,
3✔
53
            $prompt->validate,
3✔
54
            $output
3✔
55
        ));
3✔
56

57
        SelectPrompt::fallbackUsing(fn (SelectPrompt $prompt) => $this->promptUntilValid(
3✔
58
            fn () => (new SymfonyStyle($input, $output))->choice($prompt->label, $prompt->options, $prompt->default),
3✔
59
            false,
3✔
60
            $prompt->validate,
3✔
61
            $output
3✔
62
        ));
3✔
63

64
        MultiSelectPrompt::fallbackUsing(function (MultiSelectPrompt $prompt) use ($input, $output) {
3✔
NEW
65
            if ($prompt->default !== []) {
×
NEW
66
                return $this->promptUntilValid(
×
NEW
67
                    fn () => (new SymfonyStyle($input, $output))->choice($prompt->label, $prompt->options, implode(',', $prompt->default), true),
×
NEW
68
                    $prompt->required,
×
NEW
69
                    $prompt->validate,
×
NEW
70
                    $output
×
NEW
71
                );
×
72
            }
73

NEW
74
            return $this->promptUntilValid(
×
NEW
75
                fn () => collect((new SymfonyStyle($input, $output))->choice(
×
NEW
76
                    $prompt->label,
×
NEW
77
                    array_is_list($prompt->options)
×
NEW
78
                        ? ['None', ...$prompt->options]
×
NEW
79
                        : ['none' => 'None', ...$prompt->options],
×
NEW
80
                    'None',
×
NEW
81
                    true)
×
NEW
82
                )->reject(array_is_list($prompt->options) ? 'None' : 'none')->all(),
×
NEW
83
                $prompt->required,
×
NEW
84
                $prompt->validate,
×
NEW
85
                $output
×
NEW
86
            );
×
87
        });
3✔
88

89
        SuggestPrompt::fallbackUsing(fn (SuggestPrompt $prompt) => $this->promptUntilValid(
3✔
90
            function () use ($prompt, $input, $output) {
3✔
NEW
91
                $question = new Question($prompt->label, $prompt->default);
×
92

NEW
93
                \is_callable($prompt->options)
×
NEW
94
                    ? $question->setAutocompleterCallback($prompt->options)
×
NEW
95
                    : $question->setAutocompleterValues($prompt->options);
×
96

NEW
97
                return (new SymfonyStyle($input, $output))->askQuestion($question);
×
98
            },
3✔
99
            $prompt->required,
3✔
100
            $prompt->validate,
3✔
101
            $output
3✔
102
        ));
3✔
103
    }
104

105
    /**
106
     * Prompt the user until the given validation callback passes.
107
     *
108
     * @param  \Closure  $prompt
109
     * @param  bool|string  $required
110
     * @param  \Closure|null  $validate
111
     * @param  \Symfony\Component\Console\Output\OutputInterface  $output
112
     */
113
    protected function promptUntilValid($prompt, $required, $validate, $output)
114
    {
NEW
115
        while (true) {
×
NEW
116
            $result = $prompt();
×
117

NEW
118
            if ($required && ($result === '' || $result === [] || $result === false)) {
×
NEW
119
                $output->writeln('<error>'.(\is_string($required) ? $required : 'Required.').'</error>');
×
120

NEW
121
                continue;
×
122
            }
123

NEW
124
            if ($validate) {
×
NEW
125
                $error = $validate($result);
×
126

NEW
127
                if (\is_string($error) && \strlen($error) > 0) {
×
NEW
128
                    $output->writeln("<error>{$error}</error>");
×
129

NEW
130
                    continue;
×
131
                }
132
            }
133

NEW
134
            return $result;
×
135
        }
136
    }
137
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc