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