| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace Tests\Unit;
- use App\Http\Requests\ClassPackageUnitRequest;
- use App\Models\ClassPackageUnit;
- use App\Models\City;
- use App\Models\Country;
- use App\Models\State;
- use App\Models\Unit;
- use App\Services\ClassPackageUnitService;
- use Illuminate\Foundation\Testing\RefreshDatabase;
- use Illuminate\Support\Facades\Validator;
- use Tests\TestCase;
- /**
- * Regressão do bug: criar um Pacote de Aulas sem "Qtd. Aulas" quebrava com
- * SQLSTATE[23502] not null violation em quantity_classes, porque o campo
- * nunca estava nas rules() do FormRequest — FormRequest::validated() descarta
- * silenciosamente qualquer chave que não apareça em rules().
- */
- class ClassPackageUnitQuantityClassesTest extends TestCase
- {
- use RefreshDatabase;
- public function test_store_request_requires_quantity_classes(): void
- {
- $request = ClassPackageUnitRequest::create('/class-package', 'POST', [
- 'name' => 'Pacote Teste 1',
- 'class_duration_minutes' => 120,
- ]);
- $validator = Validator::make($request->all(), $request->rules());
- $this->assertTrue($validator->fails());
- $this->assertArrayHasKey('quantity_classes', $validator->errors()->toArray());
- }
- public function test_store_request_passes_when_quantity_classes_is_present(): void
- {
- $request = ClassPackageUnitRequest::create('/class-package', 'POST', [
- 'name' => 'Pacote Teste 1',
- 'quantity_classes' => 24,
- 'class_duration_minutes' => 120,
- ]);
- $validator = Validator::make($request->all(), $request->rules());
- $this->assertFalse($validator->fails());
- }
- public function test_service_persists_quantity_classes(): void
- {
- $unit = $this->makeUnit();
- $service = new ClassPackageUnitService(new \App\Services\ProposalPricingService());
- $packageUnit = $service->create([
- 'unit_id' => $unit->id,
- 'name' => 'Pacote Teste 1',
- 'quantity_classes' => 24,
- 'class_duration_minutes' => 120,
- ]);
- $this->assertInstanceOf(ClassPackageUnit::class, $packageUnit);
- $this->assertSame(24, $packageUnit->fresh()->quantity_classes);
- }
- private function makeUnit(): Unit
- {
- $country = Country::create(['name' => 'Brasil', 'code' => 'BR']);
- $state = State::create(['name' => 'Paraná', 'code' => 'PR', 'country_id' => $country->id]);
- $city = City::create(['name' => 'Maringá', 'country_id' => $country->id, 'state_id' => $state->id]);
- return Unit::create([
- 'fantasy_name' => 'Unidade Teste',
- 'social_reason' => 'Unidade Teste LTDA',
- 'cnpj' => '00000000000191',
- 'street' => 'Rua Teste',
- 'neighborhood' => 'Centro',
- 'postal_code' => '87000000',
- 'city_id' => $city->id,
- 'state_id' => $state->id,
- 'email' => 'unidade@teste.com',
- 'name_responsible' => 'Responsável Teste',
- ]);
- }
- }
|