pas de cloisonnement). * * @internal */ final class ProviderListTest extends AbstractProviderApiTestCase { public function testListReturnsHydraEnvelopeSortedByName(): void { $this->seedProvider('Zeta Services', [self::SITE_86]); $this->seedProvider('Alpha Nettoyage', [self::SITE_86]); $this->seedProvider('Mu Maintenance', [self::SITE_86]); $client = $this->createAdminClient(); $response = $client->request('GET', '/api/providers', [ 'headers' => ['Accept' => self::LD], ]); self::assertSame(200, $response->getStatusCode()); $body = $response->toArray(); // Envelope Hydra : totalItems present + member. self::assertSame(3, $body['totalItems']); $names = array_column($body['member'], 'companyName'); // Tri companyName ASC (RG-3.16) — noms normalises en MAJUSCULES. self::assertSame(['ALPHA NETTOYAGE', 'MU MAINTENANCE', 'ZETA SERVICES'], $names); } public function testListExcludesArchivedByDefault(): void { $this->seedProvider('Actif Sas', [self::SITE_86]); $this->seedProvider('Archive Sarl', [self::SITE_86], isArchived: true); $client = $this->createAdminClient(); $response = $client->request('GET', '/api/providers', [ 'headers' => ['Accept' => self::LD], ]); self::assertSame(200, $response->getStatusCode()); $body = $response->toArray(); self::assertSame(1, $body['totalItems']); self::assertSame('ACTIF SAS', $body['member'][0]['companyName']); } public function testListIncludeArchivedReintegratesArchived(): void { $this->seedProvider('Actif Sas', [self::SITE_86]); $this->seedProvider('Archive Sarl', [self::SITE_86], isArchived: true); $client = $this->createAdminClient(); $response = $client->request('GET', '/api/providers?includeArchived=true', [ 'headers' => ['Accept' => self::LD], ]); self::assertSame(200, $response->getStatusCode()); self::assertSame(2, $response->toArray()['totalItems']); } public function testListFiltersBySiteIdViaDirectRelation(): void { $this->seedProvider('Site 86 Only', [self::SITE_86]); $this->seedProvider('Site 17 Only', [self::SITE_17]); $client = $this->createAdminClient(); $site17 = $this->site(self::SITE_17); $response = $client->request('GET', '/api/providers?siteId='.$site17->getId(), [ 'headers' => ['Accept' => self::LD], ]); self::assertSame(200, $response->getStatusCode()); $body = $response->toArray(); self::assertSame(1, $body['totalItems']); self::assertSame('SITE 17 ONLY', $body['member'][0]['companyName']); } }