mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Add DependencyTest.php for unit testing
This commit is contained in:
parent
8ebc425fd5
commit
b4b1ecd6d3
125
tests/Unit/BillingPortal/DependencyTest.php
Normal file
125
tests/Unit/BillingPortal/DependencyTest.php
Normal file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace Tests\Unit\BillingPortal;
|
||||
|
||||
use App\Livewire\BillingPortal\Authentication\RegisterOrLogin;
|
||||
use App\Livewire\BillingPortal\Cart\Cart;
|
||||
use App\Livewire\BillingPortal\Purchase;
|
||||
use App\Livewire\BillingPortal\RFF;
|
||||
use App\Livewire\BillingPortal\Setup;
|
||||
use App\Livewire\BillingPortal\Submit;
|
||||
use Tests\TestCase;
|
||||
|
||||
class DependencyTest extends TestCase
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
public function testDependencyOrder()
|
||||
{
|
||||
$results = $this->checkDependencies([
|
||||
RFF::class,
|
||||
RegisterOrLogin::class,
|
||||
Cart::class,
|
||||
]);
|
||||
|
||||
$this->assertCount(1, $results);
|
||||
|
||||
$results = $this->checkDependencies([
|
||||
RegisterOrLogin::class,
|
||||
Cart::class,
|
||||
RFF::class,
|
||||
]);
|
||||
|
||||
$this->assertCount(0, $results);
|
||||
|
||||
$results = $this->checkDependencies([
|
||||
RegisterOrLogin::class,
|
||||
RFF::class,
|
||||
Cart::class,
|
||||
]);
|
||||
|
||||
$this->assertCount(0, $results);
|
||||
}
|
||||
|
||||
public function testSorting()
|
||||
{
|
||||
$results = $this->sort([
|
||||
RFF::class,
|
||||
RegisterOrLogin::class,
|
||||
Cart::class,
|
||||
]);
|
||||
|
||||
$this->assertEquals(Purchase::$steps, $results);
|
||||
|
||||
$results = $this->sort([
|
||||
RegisterOrLogin::class,
|
||||
Cart::class,
|
||||
RFF::class,
|
||||
]);
|
||||
|
||||
$this->assertEquals([
|
||||
Setup::class,
|
||||
RegisterOrLogin::class,
|
||||
Cart::class,
|
||||
RFF::class,
|
||||
Submit::class,
|
||||
], $results);
|
||||
|
||||
$results = $this->sort([
|
||||
RegisterOrLogin::class,
|
||||
RFF::class,
|
||||
Cart::class,
|
||||
]);
|
||||
|
||||
$this->assertEquals([
|
||||
Setup::class,
|
||||
RegisterOrLogin::class,
|
||||
RFF::class,
|
||||
Cart::class,
|
||||
Submit::class,
|
||||
], $results);
|
||||
}
|
||||
|
||||
private function checkDependencies(array $steps): array
|
||||
{
|
||||
$dependencies = Purchase::$dependencies;
|
||||
$stepOrder = array_flip($steps);
|
||||
$errors = [];
|
||||
|
||||
foreach ($steps as $step) {
|
||||
$dependentClasses = $dependencies[$step] ?? [];
|
||||
|
||||
foreach ($dependentClasses as $dependency) {
|
||||
if (in_array($dependency, $steps) && $stepOrder[$dependency] > $stepOrder[$step]) {
|
||||
$errors[] = "Dependency error: $step depends on $dependency";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
private function sort(array $dependencies): array
|
||||
{
|
||||
$errors = $this->checkDependencies($dependencies);
|
||||
|
||||
if (count($errors)) {
|
||||
return Purchase::$steps;
|
||||
}
|
||||
|
||||
return [Setup::class, ...$dependencies, Submit::class];
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user