createAdminClient(); // Pas de SALE dans les etats mais champs conditionnels a true cote client. $created = $client->request('POST', '/api/products', [ 'headers' => ['Content-Type' => self::LD], 'json' => $this->validProductPayload([ 'states' => ['PURCHASE', 'OTHER'], 'manufactured' => true, 'containsMolasses' => true, ]), ])->toArray(); self::assertResponseStatusCodeSame(201); // Le serveur a force les deux a false (RG-6.03). self::assertFalse($created['manufactured']); self::assertFalse($created['containsMolasses']); } public function testConditionalFieldsKeptWithSale(): void { $client = $this->createAdminClient(); $created = $client->request('POST', '/api/products', [ 'headers' => ['Content-Type' => self::LD], 'json' => $this->validProductPayload([ 'states' => ['SALE'], 'manufactured' => true, 'containsMolasses' => true, ]), ])->toArray(); self::assertResponseStatusCodeSame(201); // SALE present -> les valeurs saisies sont conservees. self::assertTrue($created['manufactured']); self::assertTrue($created['containsMolasses']); } public function testConditionalFieldsResetOnPatchRemovingSale(): void { $client = $this->createAdminClient(); $created = $client->request('POST', '/api/products', [ 'headers' => ['Content-Type' => self::LD], 'json' => $this->validProductPayload([ 'states' => ['SALE'], 'manufactured' => true, 'containsMolasses' => true, ]), ])->toArray(); self::assertResponseStatusCodeSame(201); // On retire SALE en PATCH -> les conditionnels doivent retomber a false. $patched = $client->request('PATCH', '/api/products/'.$created['id'], [ 'headers' => ['Content-Type' => self::MERGE], 'json' => ['states' => ['PURCHASE']], ])->toArray(); self::assertResponseStatusCodeSame(200); self::assertFalse($patched['manufactured']); self::assertFalse($patched['containsMolasses']); } }