toBeInstanceOf(ArcadiaApiClient::class); }); it('provides ApiService instance', function () { // GIVEN $config = createTestApiConfig(); $client = new ArcadiaApiClient($config); // WHEN $service = $client->apiService(); // THEN expect($service)->toBeInstanceOf(ApiService::class); }); it('provides EmployeeService instance', function () { // GIVEN $config = createTestApiConfig(); $client = new ArcadiaApiClient($config); // WHEN $service = $client->employees(); // THEN expect($service)->toBeInstanceOf(EmployeeService::class); }); it('provides IncoService instance', function () { // GIVEN $config = createTestApiConfig(); $client = new ArcadiaApiClient($config); // WHEN $service = $client->incoSheets(); // THEN expect($service)->toBeInstanceOf(IncoService::class); }); it('provides BrandService instance', function () { // GIVEN $config = createTestApiConfig(); $client = new ArcadiaApiClient($config); // WHEN $service = $client->brands(); // THEN expect($service)->toBeInstanceOf(BrandService::class); }); it('memoizes service instances across multiple calls', function () { // GIVEN $config = createTestApiConfig(); $client = new ArcadiaApiClient($config); // WHEN $brand1 = $client->brands(); $brand2 = $client->brands(); $employee1 = $client->employees(); $employee2 = $client->employees(); $inco1 = $client->incoSheets(); $inco2 = $client->incoSheets(); $api1 = $client->apiService(); $api2 = $client->apiService(); // THEN expect($brand1)->toBe($brand2); expect($employee1)->toBe($employee2); expect($inco1)->toBe($inco2); expect($api1)->toBe($api2); }); });