ldc-arcadia-genesis-php-client/tests/Unit/Mapper/EmployeeMapperTest.php

144 lines
6.3 KiB
PHP
Raw Permalink Normal View History

<?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');
});
});