Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .github/.kodiak.toml

This file was deleted.

22 changes: 14 additions & 8 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
22 changes: 0 additions & 22 deletions codeception.yml

This file was deleted.

8 changes: 4 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@
}
],
"require": {
"php": ">=8.1",
"php": ">=8.2",
"nette/forms": "^3.1.14",
"nette/http": "^3.2.3"
},
"require-dev": {
"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": {
Expand Down
7 changes: 1 addition & 6 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ includes:

parameters:
level: 8
phpVersion: 80100
phpVersion: 80200

scanDirectories:
- src
Expand All @@ -14,8 +14,3 @@ parameters:
paths:
- src
- .docs

ignoreErrors:

excludePaths:
- src/Latte/WizardMacros.php
2 changes: 1 addition & 1 deletion ruleset.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Contributte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
<!-- Rulesets -->
<rule ref="./vendor/contributte/qa/ruleset-8.0.xml">
<rule ref="./vendor/contributte/qa/ruleset-8.2.xml">
<exclude name="SlevomatCodingStandard.PHP.DisallowReference.DisallowedReturningReference"/>
</rule>

Expand Down
61 changes: 61 additions & 0 deletions tests/Cases/WizardTest.DefaultValues.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php declare(strict_types = 1);

namespace Tests\Cases;

use Contributte\Tester\Toolkit;
use Nette\Application\Request as AppRequest;
use Nette\Http\Request as HttpRequest;
use Nette\Http\UrlScript;
use Tester\Assert;
use Tests\Fixtures\DummyWizard;
use Tests\Fixtures\DummyWizardPresenter;
use Tests\Fixtures\WizardPresenterFactory;

require_once __DIR__ . '/../bootstrap.php';

Toolkit::test(function (): void {
$presenter = WizardPresenterFactory::create(
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(),
));
});
81 changes: 81 additions & 0 deletions tests/Cases/WizardTest.Finish.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php declare(strict_types = 1);

namespace Tests\Cases;

use Contributte\Tester\Toolkit;
use Nette\Application\Request as AppRequest;
use Nette\Application\Responses\TextResponse;
use Nette\Application\UI\Form;
use Nette\Http\Request as HttpRequest;
use Nette\Http\UrlScript;
use Tester\Assert;
use Tester\DomQuery;
use Tests\Fixtures\DummyWizard;
use Tests\Fixtures\DummyWizardPresenter;
use Tests\Fixtures\WizardPresenterFactory;

require_once __DIR__ . '/../bootstrap.php';

Toolkit::test(function (): void {
$presenter = WizardPresenterFactory::create(
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'));
});
46 changes: 46 additions & 0 deletions tests/Cases/WizardTest.InvalidSubmit.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php declare(strict_types = 1);

namespace Tests\Cases;

use Contributte\Tester\Toolkit;
use Nette\Application\Request as AppRequest;
use Nette\Application\Responses\TextResponse;
use Nette\Http\Request as HttpRequest;
use Nette\Http\UrlScript;
use Tester\Assert;
use Tester\DomQuery;
use Tests\Fixtures\DummyWizard;
use Tests\Fixtures\WizardPresenterFactory;

require_once __DIR__ . '/../bootstrap.php';

Toolkit::test(function (): void {
$presenter = WizardPresenterFactory::create(
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());
});
76 changes: 76 additions & 0 deletions tests/Cases/WizardTest.OptionalStep.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php declare(strict_types = 1);

namespace Tests\Cases;

use Contributte\Tester\Toolkit;
use Nette\Application\Request as AppRequest;
use Nette\Application\Responses\TextResponse;
use Nette\Application\UI\Form;
use Nette\Http\Request as HttpRequest;
use Nette\Http\UrlScript;
use Tester\Assert;
use Tester\DomQuery;
use Tests\Fixtures\DummyWizard;
use Tests\Fixtures\DummyWizardPresenter;
use Tests\Fixtures\WizardPresenterFactory;

require_once __DIR__ . '/../bootstrap.php';

Toolkit::test(function (): void {
$presenter = WizardPresenterFactory::create(
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'));
});
Loading