employee_sites = ['PA', 'LY']; $setting->saveOrFail(); $logger = app(LoggerInterface::class); $cache = app(CacheRepository::class); $codeService = app(CodeGenerationService::class); $storageService = \Mockery::mock(EmployeeImportStorageService::class); $employee = new ArcadiaEmployee( matricule: new Matricule('1234567'), lastname: 'Dupont', firstname: 'Jean', startDate: CarbonImmutable::parse('2026-01-01'), endDate: null, etablissement: new ShopperEstablishmentCode('ETAB'), site: new ShopperSiteCode('PA'), service: new ShopperServiceCode('101') ); $storageService->shouldReceive('upsertEmployees') ->once() ->with(\Mockery::on(static function (array $data): bool { return count($data) === 1 && $data[0]->matricule->value === '1234567'; })); $storageService->shouldReceive('getImportedAfter') ->once() ->andReturn((object) [ 'insertedCount' => 1, 'updatedCount' => 0, 'matriculesInserted' => [new Matricule('1234567')], ]); $arcadiaService = \Mockery::mock(ArcadiaEmployeeService::class); $arcadiaService->shouldReceive('getEmployeesOfSiteSince') ->once() ->with(\Mockery::on(static fn (ShopperSiteCode $code): bool => $code->value === 'PA'), \Mockery::any()) ->andReturn([$employee]); $arcadiaService->shouldReceive('getEmployeesOfSiteSince') ->once() ->with(\Mockery::on(static fn (ShopperSiteCode $code): bool => $code->value === 'LY'), \Mockery::any()) ->andReturn([]); $service = new EmployeeSyncService( $logger, $cache, $arcadiaService, $codeService, $storageService, app(GetSettingsQuery::class) ); // WHEN $service->synchronize(); // THEN expect($service->getLastSync())->not->toBeNull(); }); it('can use explicitly provided sites instead of settings', function (): void { // GIVEN $logger = app(LoggerInterface::class); $cache = app(CacheRepository::class); $codeService = app(CodeGenerationService::class); $storageService = \Mockery::mock(EmployeeImportStorageService::class); $arcadiaService = \Mockery::mock(ArcadiaEmployeeService::class); $arcadiaService->shouldReceive('getEmployeesOfSiteSince') ->once() ->with(\Mockery::on(static fn (ShopperSiteCode $code): bool => $code->value === 'BO'), \Mockery::any()) ->andReturn([]); $service = new EmployeeSyncService( $logger, $cache, $arcadiaService, $codeService, $storageService, app(GetSettingsQuery::class) ); // WHEN $service->synchronize(sites: [new ShopperSiteCode('BO')]); // THEN expect($service->getLastSync())->not->toBeNull(); }); });