Skip to content

Commit

Permalink
Introduce exercise scenario objects
Browse files Browse the repository at this point in the history
  • Loading branch information
AydinHassan committed May 5, 2024
1 parent c0a9650 commit ea084ca
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/Exercise/Scenario/CgiScenario.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace PhpSchool\PhpWorkshop\Exercise\Scenario;

use Psr\Http\Message\RequestInterface;

class CgiScenario extends ExerciseScenario
{
/**
* @var array<RequestInterface>
*/
private array $executions = [];

public function withExecution(RequestInterface $request): self
{
$this->executions[] = $request;

return $this;
}

/**
* @return array<RequestInterface>
*/
public function getExecutions(): array
{
return $this->executions;
}
}
31 changes: 31 additions & 0 deletions src/Exercise/Scenario/CliScenario.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace PhpSchool\PhpWorkshop\Exercise\Scenario;

use PhpSchool\PhpWorkshop\Utils\Collection;

class CliScenario extends ExerciseScenario
{
/**
* @var array<Collection<int, string>>
*/
private array $executions = [];

/**
* @param array<string> $args
*/
public function withExecution(array $args = []): static
{
$this->executions[] = new Collection($args);

return $this;
}

/**
* @return array<Collection<int, string>>
*/
public function getExecutions(): array
{
return $this->executions;
}
}
26 changes: 26 additions & 0 deletions src/Exercise/Scenario/ExerciseScenario.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace PhpSchool\PhpWorkshop\Exercise\Scenario;

abstract class ExerciseScenario
{
/**
* @var array<string, string>
*/
private array $files = [];

public function withFile(string $relativeFileName, string $content): static
{
$this->files[$relativeFileName] = $content;

return $this;
}

/**
* @return array<string, string>
*/
public function getFiles(): array
{
return $this->files;
}
}
39 changes: 39 additions & 0 deletions test/Exercise/Scenario/CgiScenarioTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace PhpSchool\PhpWorkshopTest\Exercise\Scenario;

use PhpSchool\PhpWorkshop\Exercise\Scenario\CgiScenario;
use PhpSchool\PhpWorkshop\Utils\Collection;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\RequestInterface;

class CgiScenarioTest extends TestCase
{
public function testScenario(): void
{
$requestOne = $this->createMock(RequestInterface::class);
$requestTwo = $this->createMock(RequestInterface::class);

$scenario = (new CgiScenario())
->withFile('file1.txt', 'content1')
->withFile('file2.txt', 'content2')
->withExecution($requestOne)
->withExecution($requestTwo);

static::assertEquals(
[
'file1.txt' => 'content1',
'file2.txt' => 'content2',
],
$scenario->getFiles()
);

static::assertEquals(
[
$requestOne,
$requestTwo
],
$scenario->getExecutions()
);
}
}
38 changes: 38 additions & 0 deletions test/Exercise/Scenario/CliScenarioTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace PhpSchool\PhpWorkshopTest\Exercise\Scenario;

use PhpSchool\PhpWorkshop\Exercise\Scenario\CliScenario;
use PhpSchool\PhpWorkshop\Utils\Collection;
use PHPUnit\Framework\TestCase;

class CliScenarioTest extends TestCase
{
public function testScenario(): void
{
$scenario = (new CliScenario())
->withFile('file1.txt', 'content1')
->withFile('file2.txt', 'content2')
->withExecution(['arg1', 'arg2'])
->withExecution(['arg3', 'arg4']);

static::assertEquals(
[
'file1.txt' => 'content1',
'file2.txt' => 'content2',
],
$scenario->getFiles()
);

static::assertEquals(
[
['arg1', 'arg2'],
['arg3', 'arg4'],
],
array_map(
fn (Collection $collection) => $collection->getArrayCopy(),
$scenario->getExecutions()
)
);
}
}

0 comments on commit ea084ca

Please sign in to comment.