|
@@ -0,0 +1,88 @@
|
|
|
|
|
+<?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',
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|