143 lines
6.3 KiB
PHP
143 lines
6.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Mapper;
|
|
|
|
require_once __DIR__ . '/PaginationMetaForTests.php';
|
|
|
|
use Microsoft\Kiota\Abstractions\Types\Date;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\Employee;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PageOf;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiDto\Dto\PaginationDto;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\ArcadiaEmployeeId;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\EstablishmentCode;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\ServiceId;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\ApiValueObject\SiteId;
|
|
use Uwil\ArcadiaApiPhpClient\Mapper\EmployeeMapper;
|
|
use Uwil\ArcadiaKiotaOpenApiClient\Models\Employee as KiotaEmployee;
|
|
use Uwil\ArcadiaKiotaOpenApiClient\Models\EmployeeListResponse;
|
|
|
|
describe('EmployeeMapper test', function () {
|
|
it('can instanciate EmployeeMapper', function () {
|
|
// GIVEN / WHEN
|
|
$employeeMapper = new EmployeeMapper();
|
|
|
|
// THEN
|
|
expect($employeeMapper)->toBeInstanceOf(EmployeeMapper::class);
|
|
});
|
|
|
|
it('can map kiota model to an employee dto', function () {
|
|
// GIVEN
|
|
$kiotaModel = new KiotaEmployee();
|
|
$kiotaModel->setMatricule('1234567');
|
|
$kiotaModel->setLastName('Dupont');
|
|
$kiotaModel->setFirstName('Jean');
|
|
$kiotaModel->setStartDate(new Date('2024-01-15'));
|
|
$kiotaModel->setEndDate(new Date('2024-12-31'));
|
|
$kiotaModel->setPlannedEndDate(new Date('2025-06-30'));
|
|
$kiotaModel->setEstablishment('EST01');
|
|
$kiotaModel->setSite('LDCSER');
|
|
$kiotaModel->setService('097');
|
|
$kiotaModel->setCreatedAt(new \DateTime('2024-01-01 10:00:00'));
|
|
$kiotaModel->setUpdatedAt(new \DateTime('2024-06-01 12:00:00'));
|
|
|
|
// WHEN
|
|
$employeeDto = (new EmployeeMapper())->toDto($kiotaModel);
|
|
|
|
// THEN
|
|
expect($employeeDto)->toBeInstanceOf(Employee::class);
|
|
expect($employeeDto->matriculePublique)->toBeInstanceOf(ArcadiaEmployeeId::class);
|
|
expect($employeeDto->matriculePublique->value)->toBe('1234567');
|
|
expect($employeeDto->lastname)->toBe('Dupont');
|
|
expect($employeeDto->firstname)->toBe('Jean');
|
|
expect($employeeDto->start_date)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->start_date->format('Y-m-d'))->toBe('2024-01-15');
|
|
expect($employeeDto->end_date)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->end_date?->format('Y-m-d'))->toBe('2024-12-31');
|
|
expect($employeeDto->planned_end_date)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->planned_end_date?->format('Y-m-d'))->toBe('2025-06-30');
|
|
expect($employeeDto->establishment)->toBeInstanceOf(EstablishmentCode::class);
|
|
expect($employeeDto->establishment->value)->toBe('EST01');
|
|
expect($employeeDto->site)->toBeInstanceOf(SiteId::class);
|
|
expect($employeeDto->site->value)->toBe('LDCSER');
|
|
expect($employeeDto->service)->toBeInstanceOf(ServiceId::class);
|
|
expect($employeeDto->service->value)->toBe('097');
|
|
expect($employeeDto->created_at)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->created_at->format('Y-m-d H:i:s'))->toBe('2024-01-01 10:00:00');
|
|
expect($employeeDto->updated_at)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->updated_at?->format('Y-m-d H:i:s'))->toBe('2024-06-01 12:00:00');
|
|
});
|
|
|
|
it('can map kiota model with null optional properties to an employee dto', function () {
|
|
// GIVEN
|
|
$kiotaModel = new KiotaEmployee();
|
|
$kiotaModel->setMatricule('12345678');
|
|
$kiotaModel->setEstablishment('EST01');
|
|
$kiotaModel->setSite('LDCSER');
|
|
$kiotaModel->setService('097');
|
|
|
|
// WHEN
|
|
$employeeDto = (new EmployeeMapper())->toDto($kiotaModel);
|
|
|
|
// THEN
|
|
expect($employeeDto)->toBeInstanceOf(Employee::class);
|
|
expect($employeeDto->matriculePublique->value)->toBe('12345678');
|
|
expect($employeeDto->lastname)->toBe('');
|
|
expect($employeeDto->firstname)->toBe('');
|
|
expect($employeeDto->start_date)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->start_date->format('Y-m-d'))->toBe((new \DateTimeImmutable('today'))->format('Y-m-d'));
|
|
expect($employeeDto->end_date)->toBeNull();
|
|
expect($employeeDto->planned_end_date)->toBeNull();
|
|
expect($employeeDto->establishment->value)->toBe('EST01');
|
|
expect($employeeDto->site->value)->toBe('LDCSER');
|
|
expect($employeeDto->service->value)->toBe('097');
|
|
expect($employeeDto->created_at)->toBeInstanceOf(\DateTimeInterface::class);
|
|
expect($employeeDto->updated_at)->toBeNull();
|
|
});
|
|
|
|
it('can map all properties from kiota model to employee dto', function () {
|
|
// GIVEN
|
|
[
|
|
$pagination,
|
|
$paginationMeta,
|
|
] = generaterFirstPagePaginationMeta();
|
|
$response = new EmployeeListResponse();
|
|
$response->setEmployees([]);
|
|
$response->setPagination($paginationMeta);
|
|
|
|
// WHEN
|
|
$employeePageDto = (new EmployeeMapper())->toPage($response, $pagination);
|
|
|
|
// THEN
|
|
expect($employeePageDto)->toBeInstanceOf(PageOf::class);
|
|
expect($employeePageDto->items())->toBeArray();
|
|
expect($employeePageDto->pagination())->toBeInstanceOf(PaginationDto::class);
|
|
});
|
|
|
|
it('can map list response with items to page of employee dto', function () {
|
|
// GIVEN
|
|
[
|
|
$pagination,
|
|
$paginationMeta,
|
|
] = generaterFirstPagePaginationMeta();
|
|
$kiotaEmployee = new KiotaEmployee();
|
|
$kiotaEmployee->setMatricule('1234567');
|
|
$kiotaEmployee->setEstablishment('EST01');
|
|
$kiotaEmployee->setSite('LDCSER');
|
|
$kiotaEmployee->setService('097');
|
|
|
|
$response = new EmployeeListResponse();
|
|
$response->setEmployees([$kiotaEmployee]);
|
|
$response->setPagination($paginationMeta);
|
|
|
|
// WHEN
|
|
$employeePageDto = (new EmployeeMapper())->toPage($response, $pagination);
|
|
|
|
// THEN
|
|
expect($employeePageDto)->toBeInstanceOf(PageOf::class);
|
|
expect($employeePageDto->items())->toHaveCount(1);
|
|
expect($employeePageDto->items()[0])->toBeInstanceOf(Employee::class);
|
|
expect($employeePageDto->items()[0]->matriculePublique->value)->toBe('1234567');
|
|
});
|
|
});
|