test level based scheduling
This commit is contained in:
parent
99e1ba051c
commit
a64df64b76
7 changed files with 415 additions and 94 deletions
|
|
@ -5,6 +5,7 @@ namespace Tests\Unit\Set\UseCases;
|
|||
use App\Element\CreateElementDto;
|
||||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\CreateSetDto;
|
||||
use App\Set\CreateSetLevelDto;
|
||||
use App\Set\UseCases\GetSetLayout\ElementLayoutNode;
|
||||
use App\Set\UseCases\GetSetLayout\GetSetLayout;
|
||||
use App\Set\UseCases\GetSetLayout\GetSetLayoutRequest;
|
||||
|
|
@ -13,6 +14,7 @@ use App\User\User;
|
|||
use PHPUnit\Framework\TestCase;
|
||||
use Tests\Fakes\FakeElementRepository;
|
||||
use Tests\Fakes\FakeSetRepository;
|
||||
use Tests\Fakes\FakeSetLevelRepository;
|
||||
|
||||
class GetSetLayoutTest extends TestCase
|
||||
{
|
||||
|
|
@ -24,6 +26,7 @@ class GetSetLayoutTest extends TestCase
|
|||
passwordHash: 'hashed-password',
|
||||
);
|
||||
$setRepository = new FakeSetRepository;
|
||||
$setLevelRepository = new FakeSetLevelRepository;
|
||||
$elementRepository = new FakeElementRepository;
|
||||
$bible = $setRepository->create(new CreateSetDto(
|
||||
name: 'Bible',
|
||||
|
|
@ -33,51 +36,69 @@ class GetSetLayoutTest extends TestCase
|
|||
name: 'Course',
|
||||
creator: $creator,
|
||||
));
|
||||
$genesis = $elementRepository->create(new CreateElementDto(
|
||||
$bookLevel = $setLevelRepository->create(new CreateSetLevelDto(
|
||||
set: $bible,
|
||||
name: 'Genesis',
|
||||
kind: 'book',
|
||||
));
|
||||
$portionLevel = $setLevelRepository->create(new CreateSetLevelDto(
|
||||
set: $bible,
|
||||
kind: 'portion',
|
||||
));
|
||||
$chapterLevel = $setLevelRepository->create(new CreateSetLevelDto(
|
||||
set: $bible,
|
||||
kind: 'chapter',
|
||||
));
|
||||
$moduleLevel = $setLevelRepository->create(new CreateSetLevelDto(
|
||||
set: $course,
|
||||
kind: 'module',
|
||||
));
|
||||
$genesis = $elementRepository->create(new CreateElementDto(
|
||||
name: 'Genesis',
|
||||
level: $bookLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
set: $bible,
|
||||
name: 'Exodus',
|
||||
kind: 'book',
|
||||
level: $bookLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
$creation = $elementRepository->create(new CreateElementDto(
|
||||
set: $bible,
|
||||
name: 'Creation',
|
||||
kind: 'portion',
|
||||
level: $portionLevel,
|
||||
parentElement: $genesis,
|
||||
));
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
set: $bible,
|
||||
name: 'Noah',
|
||||
kind: 'portion',
|
||||
level: $portionLevel,
|
||||
parentElement: $genesis,
|
||||
));
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
set: $bible,
|
||||
name: 'Chapter 1',
|
||||
kind: 'chapter',
|
||||
level: $chapterLevel,
|
||||
parentElement: $creation,
|
||||
));
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
set: $course,
|
||||
name: 'Foundations',
|
||||
kind: 'module',
|
||||
level: $moduleLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
|
||||
$layout = (new GetSetLayout(
|
||||
$setRepository,
|
||||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
))->execute(new GetSetLayoutRequest(
|
||||
setId: $bible->getId(),
|
||||
));
|
||||
|
||||
$this->assertSame('Bible', $layout->getSet()->getName());
|
||||
$this->assertSame(
|
||||
['book:2', 'portion:2', 'chapter:1'],
|
||||
array_map(function ($level): string {
|
||||
return $level->getLevel()->getKind()
|
||||
. ":{$level->getElementCount()}";
|
||||
}, $layout->getLevels()),
|
||||
);
|
||||
$this->assertSame(
|
||||
['Genesis', 'Exodus'],
|
||||
$this->nodeNames($layout->getElements()),
|
||||
|
|
@ -103,19 +124,26 @@ class GetSetLayoutTest extends TestCase
|
|||
passwordHash: 'hashed-password',
|
||||
);
|
||||
$setRepository = new FakeSetRepository;
|
||||
$setLevelRepository = new FakeSetLevelRepository;
|
||||
$set = $setRepository->create(new CreateSetDto(
|
||||
name: 'Empty set',
|
||||
creator: $creator,
|
||||
));
|
||||
$setLevelRepository->create(new CreateSetLevelDto(
|
||||
set: $set,
|
||||
kind: 'task',
|
||||
));
|
||||
|
||||
$layout = (new GetSetLayout(
|
||||
$setRepository,
|
||||
$setLevelRepository,
|
||||
new FakeElementRepository,
|
||||
))->execute(new GetSetLayoutRequest(
|
||||
setId: $set->getId(),
|
||||
));
|
||||
|
||||
$this->assertSame([], $layout->getElements());
|
||||
$this->assertSame(0, $layout->getLevels()[0]->getElementCount());
|
||||
}
|
||||
|
||||
public function test_it_rejects_an_unknown_set(): void
|
||||
|
|
@ -125,6 +153,7 @@ class GetSetLayoutTest extends TestCase
|
|||
|
||||
(new GetSetLayout(
|
||||
new FakeSetRepository,
|
||||
new FakeSetLevelRepository,
|
||||
new FakeElementRepository,
|
||||
))->execute(new GetSetLayoutRequest(
|
||||
setId: 999,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue