diff --git a/.github/.kodiak.toml b/.github/.kodiak.toml deleted file mode 100644 index 60c34b6..0000000 --- a/.github/.kodiak.toml +++ /dev/null @@ -1,10 +0,0 @@ -version = 1 - -[merge] -automerge_label = "automerge" -blacklist_title_regex = "^WIP.*" -blacklist_labels = ["WIP"] -method = "rebase" -delete_branch_on_merge = true -notify_on_conflict = true -optimistic_updates = false diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a574bd1..7d85dd5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,33 +5,39 @@ on: workflow_dispatch: push: - branches: [ "*" ] + branches: ["*"] schedule: - cron: "0 8 * * 1" jobs: - test83: + test85: name: "Nette Tester" uses: contributte/.github/.github/workflows/nette-tester.yml@master with: - php: "8.3" + php: "8.5" - test82: + test84: name: "Nette Tester" uses: contributte/.github/.github/workflows/nette-tester.yml@master with: - php: "8.2" + php: "8.4" - test81: + test83: name: "Nette Tester" uses: contributte/.github/.github/workflows/nette-tester.yml@master with: - php: "8.1" + php: "8.3" + + test82: + name: "Nette Tester" + uses: contributte/.github/.github/workflows/nette-tester.yml@master + with: + php: "8.2" testlower: name: "Nette Tester" uses: contributte/.github/.github/workflows/nette-tester.yml@master with: - php: "8.1" + php: "8.2" composer: "composer update --no-interaction --no-progress --prefer-dist --prefer-stable --prefer-lowest" diff --git a/codeception.yml b/codeception.yml deleted file mode 100644 index 6582112..0000000 --- a/codeception.yml +++ /dev/null @@ -1,22 +0,0 @@ -actor: Tester -paths: - tests: tests - output: tests/_output - data: tests/_data - support: tests/Support - envs: tests/_envs -bootstrap: _bootstrap.php -settings: - colors: false - memory_limit: 1024M - reset: true -extensions: - enabled: - - Codeception\Extension\RunFailed -modules: - config: - Db: - dsn: '' - user: '' - password: '' - dump: tests/_data/dump.sql diff --git a/composer.json b/composer.json index afedebb..08c6d2a 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ } ], "require": { - "php": ">=8.1", + "php": ">=8.2", "nette/forms": "^3.1.14", "nette/http": "^3.2.3" }, @@ -25,9 +25,9 @@ "latte/latte": "^3.0.12", "nette/application": "^3.2.0", "nette/di": "^3.1.8", - "contributte/qa": "^0.4", - "contributte/tester": "^0.3", - "contributte/phpstan": "^0.1", + "contributte/qa": "~0.4.0", + "contributte/tester": "~0.3.0", + "contributte/phpstan": "~0.1.0", "mockery/mockery": "^1.6.7" }, "conflict": { diff --git a/phpstan.neon b/phpstan.neon index 361f176..a8d2236 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,7 +3,7 @@ includes: parameters: level: 8 - phpVersion: 80100 + phpVersion: 80200 scanDirectories: - src @@ -14,8 +14,3 @@ parameters: paths: - src - .docs - - ignoreErrors: - - excludePaths: - - src/Latte/WizardMacros.php diff --git a/ruleset.xml b/ruleset.xml index 378cdda..19072cd 100644 --- a/ruleset.xml +++ b/ruleset.xml @@ -1,7 +1,7 @@ - + diff --git a/tests/Cases/WizardTest.DefaultValues.phpt b/tests/Cases/WizardTest.DefaultValues.phpt new file mode 100644 index 0000000..50653ee --- /dev/null +++ b/tests/Cases/WizardTest.DefaultValues.phpt @@ -0,0 +1,61 @@ + 'wizard-step1-submit', + 'name' => 'This is default name', + 'skip' => '0', + DummyWizard::NEXT_SUBMIT_NAME => 'submit', + ] + ) + ); + + $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + $defaultValues = $wizard->create()->getValues('array'); + Assert::same([ + 'name' => 'This is default name', + 'skip' => false, + ], $defaultValues); + }; + + $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + Assert::false($wizard->isSuccess()); + + Assert::same(0, DummyWizard::$called); + Assert::same([ + 'name' => 'This is default name', + 'skip' => false, + ], $wizard->getValues(true)); + Assert::same(2, $wizard->getCurrentStep()); + Assert::same(2, $wizard->getLastStep()); + }; + + $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); +}); diff --git a/tests/Cases/WizardTest.Finish.phpt b/tests/Cases/WizardTest.Finish.phpt new file mode 100644 index 0000000..fba5a18 --- /dev/null +++ b/tests/Cases/WizardTest.Finish.phpt @@ -0,0 +1,81 @@ + 'wizard-step3-submit', + 'skip' => 'false', + 'email' => 'email', + DummyWizard::FINISH_SUBMIT_NAME => 'submit', + ] + ) + ); + + $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + /** @var Form $step1 */ + $step1 = $wizard->getComponent('step1'); + $step1->setValues(['name' => 'Name']); + $step1->setSubmittedBy($step1['next']); + $step1->fireEvents(); + + /** @var Form $step2 */ + $step2 = $wizard->getComponent('step2'); + $step2->setValues(['optional' => 'Optional']); + $step2->setSubmittedBy($step2['next']); + $step2->fireEvents(); + }; + + $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + Assert::true($wizard->isSuccess()); + Assert::same(1, DummyWizard::$called); + Assert::same([ + 'name' => 'Name', + 'skip' => false, + 'optional' => 'Optional', + 'email' => 'email', + ], $wizard->getValues(true)); + Assert::same([ + 'name' => 'Name', + 'skip' => false, + 'optional' => 'Optional', + 'email' => 'email', + ], DummyWizard::$values); + Assert::same(1, $wizard->getCurrentStep()); + Assert::same(1, $wizard->getLastStep()); + }; + + /** @var TextResponse $response */ + $response = $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true($dom->has('#success')); +}); diff --git a/tests/Cases/WizardTest.InvalidSubmit.phpt b/tests/Cases/WizardTest.InvalidSubmit.phpt new file mode 100644 index 0000000..7e4ccfb --- /dev/null +++ b/tests/Cases/WizardTest.InvalidSubmit.phpt @@ -0,0 +1,46 @@ + 'wizard-step1-submit', + DummyWizard::NEXT_SUBMIT_NAME => 'true', + ] + ) + ); + + /** @var TextResponse $response */ + $response = $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); + + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true($dom->has('#frm-wizard-step1')); + + Assert::same(1, $wizard->getCurrentStep()); + Assert::same(0, DummyWizard::$called); + Assert::same($wizard->create('1'), $wizard->create()); + Assert::same(1, $wizard->getLastStep()); +}); diff --git a/tests/Cases/WizardTest.OptionalStep.phpt b/tests/Cases/WizardTest.OptionalStep.phpt new file mode 100644 index 0000000..42f1570 --- /dev/null +++ b/tests/Cases/WizardTest.OptionalStep.phpt @@ -0,0 +1,76 @@ + 'wizard-step3-submit', + 'skip' => 'false', + 'email' => 'email', + DummyWizard::FINISH_SUBMIT_NAME => 'submit', + ] + ) + ); + + $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + /** @var Form $step1 */ + $step1 = $wizard->getComponent('step1'); + $step1->setValues([ + 'name' => 'Name', + 'skip' => '1', + ]); + $step1->setSubmittedBy($step1['next']); + $step1->fireEvents(); + }; + + $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + Assert::true($wizard->isSuccess()); + Assert::same(1, DummyWizard::$called); + Assert::same([ + 'name' => 'Name', + 'skip' => true, + 'email' => 'email', + ], $wizard->getValues(true)); + Assert::same([ + 'name' => 'Name', + 'skip' => true, + 'email' => 'email', + ], DummyWizard::$values); + Assert::same(1, $wizard->getCurrentStep()); + Assert::same(1, $wizard->getLastStep()); + }; + + /** @var TextResponse $response */ + $response = $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true($dom->has('#success')); +}); diff --git a/tests/Cases/WizardTest.Reset.phpt b/tests/Cases/WizardTest.Reset.phpt new file mode 100644 index 0000000..af2326d --- /dev/null +++ b/tests/Cases/WizardTest.Reset.phpt @@ -0,0 +1,59 @@ + 'wizard-step1-submit', + 'name' => 'Name', + 'skip' => '0', + DummyWizard::NEXT_SUBMIT_NAME => 'submit', + ] + ) + ); + + $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + Assert::false($wizard->isSuccess()); + Assert::same(0, DummyWizard::$called); + Assert::same([ + 'name' => 'Name', + 'skip' => false, + ], $wizard->getValues(true)); + Assert::same(2, $wizard->getCurrentStep()); + Assert::same(2, $wizard->getLastStep()); + + // Reset wizard + $wizard->reset(); + + Assert::false($wizard->isSuccess()); + Assert::same(0, DummyWizard::$called); + Assert::same([], $wizard->getValues(true)); + Assert::same([], DummyWizard::$values); + Assert::same(1, $wizard->getCurrentStep()); + Assert::same(1, $wizard->getLastStep()); + }; + + $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); +}); diff --git a/tests/Cases/WizardTest.SkipAll.phpt b/tests/Cases/WizardTest.SkipAll.phpt new file mode 100644 index 0000000..6a88089 --- /dev/null +++ b/tests/Cases/WizardTest.SkipAll.phpt @@ -0,0 +1,48 @@ + 'wizard-step3-submit', + 'void' => 'void', + 'email' => 'email', + DummyWizard::FINISH_SUBMIT_NAME => 'submit', + ] + ) + ); + + $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + Assert::false($wizard->isSuccess()); + }; + + /** @var TextResponse $response */ + $response = $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true(!$dom->has('#success')); +}); diff --git a/tests/Cases/WizardTest.Steps.phpt b/tests/Cases/WizardTest.Steps.phpt new file mode 100644 index 0000000..6d13e3e --- /dev/null +++ b/tests/Cases/WizardTest.Steps.phpt @@ -0,0 +1,37 @@ +start(); + + $wizard = new DummyWizard($session); + $form = $wizard->create(); + + Assert::type(NetteForms::class, $form); + Assert::same('step1', $form->getName()); + + Assert::same(1, $wizard->getCurrentStep()); + Assert::same(1, $wizard->getLastStep()); + + $wizard->setStep(2); + Assert::same(1, $wizard->getCurrentStep()); + + $wizard->setStep(-1); + Assert::same(1, $wizard->getCurrentStep()); +}); diff --git a/tests/Cases/WizardTest.Submit.phpt b/tests/Cases/WizardTest.Submit.phpt new file mode 100644 index 0000000..5c5101d --- /dev/null +++ b/tests/Cases/WizardTest.Submit.phpt @@ -0,0 +1,52 @@ + 'wizard-step1-submit', + DummyWizard::NEXT_SUBMIT_NAME => 'true', + 'name' => 'foo', + ] + ) + ); + + /** @var DummyWizard $wizard */ + $wizard = $presenter->getComponent('wizard'); + + /** @var TextResponse $response */ + $response = $presenter->run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: $presenter->getHttpRequest()->getPost(), + )); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true($dom->has('#frm-wizard-step2')); + + Assert::false($wizard->isSuccess()); + Assert::same(2, $wizard->getCurrentStep()); + Assert::same($wizard->create('2'), $wizard->create()); + Assert::same(2, $wizard->getLastStep()); + Assert::same(0, DummyWizard::$called); + Assert::same([ + 'name' => 'foo', + 'skip' => false, + ], $wizard->getValues(true)); +}); diff --git a/tests/Cases/WizardTest.SubmitBack.phpt b/tests/Cases/WizardTest.SubmitBack.phpt new file mode 100644 index 0000000..ffd58aa --- /dev/null +++ b/tests/Cases/WizardTest.SubmitBack.phpt @@ -0,0 +1,37 @@ +run(new AppRequest( + name: 'test', + method: $presenter->getHttpRequest()->getMethod(), + post: [ + '_do' => 'wizard-step2-submit', + DummyWizard::PREV_SUBMIT_NAME => 'true', + ] + )); + + $dom = DomQuery::fromHtml((string) $response->getSource()); + Assert::true($dom->has('#frm-wizard-step1')); +}); diff --git a/tests/Cases/WizardTest.php b/tests/Cases/WizardTest.php deleted file mode 100644 index 367c86f..0000000 --- a/tests/Cases/WizardTest.php +++ /dev/null @@ -1,428 +0,0 @@ -start(); - - $wizard = new DummyWizard($session); - $form = $wizard->create(); - - Assert::type(NetteForms::class, $form); - Assert::same('step1', $form->getName()); - - Assert::same(1, $wizard->getCurrentStep()); - Assert::same(1, $wizard->getLastStep()); - - $wizard->setStep(2); - Assert::same(1, $wizard->getCurrentStep()); - - $wizard->setStep(-1); - Assert::same(1, $wizard->getCurrentStep()); - } - - public function testInvalidSubmit(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step1-submit', - DummyWizard::NEXT_SUBMIT_NAME => 'true', - ] - ) - ); - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true($dom->has('#frm-wizard-step1')); - - Assert::same(1, $wizard->getCurrentStep()); - Assert::same(0, DummyWizard::$called); - Assert::same($wizard->create('1'), $wizard->create()); - Assert::same(1, $wizard->getLastStep()); - } - - public function testSubmit(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step1-submit', - DummyWizard::NEXT_SUBMIT_NAME => 'true', - 'name' => 'foo', - ] - ) - ); - - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true($dom->has('#frm-wizard-step2')); - - Assert::false($wizard->isSuccess()); - Assert::same(2, $wizard->getCurrentStep()); - Assert::same($wizard->create('2'), $wizard->create()); - Assert::same(2, $wizard->getLastStep()); - Assert::same(0, DummyWizard::$called); - Assert::same([ - 'name' => 'foo', - 'skip' => false, - ], $wizard->getValues(true)); - } - - public function testSubmitBack(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - ) - ); - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: [ - '_do' => 'wizard-step2-submit', - DummyWizard::PREV_SUBMIT_NAME => 'true', - ] - )); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true($dom->has('#frm-wizard-step1')); - } - - public function testReset(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step1-submit', - 'name' => 'Name', - 'skip' => '0', - DummyWizard::NEXT_SUBMIT_NAME => 'submit', - ] - ) - ); - - $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - Assert::false($wizard->isSuccess()); - Assert::same(0, DummyWizard::$called); - Assert::same([ - 'name' => 'Name', - 'skip' => false, - ], $wizard->getValues(true)); - Assert::same(2, $wizard->getCurrentStep()); - Assert::same(2, $wizard->getLastStep()); - - // Reset wizard - $wizard->reset(); - - Assert::false($wizard->isSuccess()); - Assert::same(0, DummyWizard::$called); - Assert::same([], $wizard->getValues(true)); - Assert::same([], DummyWizard::$values); - Assert::same(1, $wizard->getCurrentStep()); - Assert::same(1, $wizard->getLastStep()); - }; - - $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - } - - public function testFinish(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step3-submit', - 'skip' => 'false', - 'email' => 'email', - DummyWizard::FINISH_SUBMIT_NAME => 'submit', - ] - ) - ); - - $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - /** @var Form $step1 */ - $step1 = $wizard->getComponent('step1'); - $step1->setValues(['name' => 'Name']); - $step1->setSubmittedBy($step1['next']); - $step1->fireEvents(); - - /** @var Form $step2 */ - $step2 = $wizard->getComponent('step2'); - $step2->setValues(['optional' => 'Optional']); - $step2->setSubmittedBy($step2['next']); - $step2->fireEvents(); - }; - - $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - Assert::true($wizard->isSuccess()); - Assert::same(1, DummyWizard::$called); - Assert::same([ - 'name' => 'Name', - 'skip' => false, - 'optional' => 'Optional', - 'email' => 'email', - ], $wizard->getValues(true)); - Assert::same([ - 'name' => 'Name', - 'skip' => false, - 'optional' => 'Optional', - 'email' => 'email', - ], DummyWizard::$values); - Assert::same(1, $wizard->getCurrentStep()); - Assert::same(1, $wizard->getLastStep()); - }; - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true($dom->has('#success')); - } - - public function testOptionalStep(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step3-submit', - 'skip' => 'false', - 'email' => 'email', - DummyWizard::FINISH_SUBMIT_NAME => 'submit', - ] - ) - ); - - $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - /** @var Form $step1 */ - $step1 = $wizard->getComponent('step1'); - $step1->setValues([ - 'name' => 'Name', - 'skip' => '1', - ]); - $step1->setSubmittedBy($step1['next']); - $step1->fireEvents(); - }; - - $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - Assert::true($wizard->isSuccess()); - Assert::same(1, DummyWizard::$called); - Assert::same([ - 'name' => 'Name', - 'skip' => true, - 'email' => 'email', - ], $wizard->getValues(true)); - Assert::same([ - 'name' => 'Name', - 'skip' => true, - 'email' => 'email', - ], DummyWizard::$values); - Assert::same(1, $wizard->getCurrentStep()); - Assert::same(1, $wizard->getLastStep()); - }; - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true($dom->has('#success')); - } - - public function testSkipAll(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step3-submit', - 'void' => 'void', - 'email' => 'email', - DummyWizard::FINISH_SUBMIT_NAME => 'submit', - ] - ) - ); - - $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - Assert::false($wizard->isSuccess()); - }; - - /** @var TextResponse $response */ - $response = $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - - $dom = DomQuery::fromHtml((string) $response->getSource()); - Assert::true(!$dom->has('#success')); - } - - public function testDefaultValues(): void - { - $presenter = $this->createPresenter( - httpRequest: new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST', - post: [ - '_do' => 'wizard-step1-submit', - 'name' => 'This is default name', - 'skip' => '0', - DummyWizard::NEXT_SUBMIT_NAME => 'submit', - ] - ) - ); - - $presenter->onStartup[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - $defaultValues = $wizard->create()->getValues('array'); - Assert::same([ - 'name' => 'This is default name', - 'skip' => false, - ], $defaultValues); - }; - - $presenter->onShutdown[] = function (DummyWizardPresenter $presenter): void { - /** @var DummyWizard $wizard */ - $wizard = $presenter->getComponent('wizard'); - - Assert::false($wizard->isSuccess()); - - Assert::same(0, DummyWizard::$called); - Assert::same([ - 'name' => 'This is default name', - 'skip' => false, - ], $wizard->getValues(true)); - Assert::same(2, $wizard->getCurrentStep()); - Assert::same(2, $wizard->getLastStep()); - }; - - $presenter->run(new AppRequest( - name: 'test', - method: $presenter->getHttpRequest()->getMethod(), - post: $presenter->getHttpRequest()->getPost(), - )); - } - - private function createPresenter( - ?HttpRequest $httpRequest = null, - ): DummyWizardPresenter - { - $httpRequest ??= new HttpRequest( - url: new UrlScript('http://localhost'), - method: 'POST' - ); - $httpResponse = new HttpResponse(); - - $templateFactory = new TemplateFactory( - new DummyLatteFactory() - ); - - $presenter = new DummyWizardPresenter(); - $presenter->injectPrimary( - $httpRequest, - $httpResponse, - Mockery::mock(IPresenterFactory::class), - Mockery::mock(Router::class), - null, - null, - $templateFactory - ); - - return $presenter; - } - -} - -(new WizardTest())->run(); diff --git a/tests/Fixtures/WizardPresenterFactory.php b/tests/Fixtures/WizardPresenterFactory.php new file mode 100644 index 0000000..2e39de5 --- /dev/null +++ b/tests/Fixtures/WizardPresenterFactory.php @@ -0,0 +1,44 @@ +injectPrimary( + $httpRequest, + $httpResponse, + Mockery::mock(IPresenterFactory::class), + Mockery::mock(Router::class), + null, + null, + $templateFactory + ); + + return $presenter; + } + +}