|
|
@@ -1,163 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-namespace Tests\Unit\Http\Requests\Concerns;
|
|
|
-
|
|
|
-use App\Http\Requests\Concerns\ValidatesProposalPricing;
|
|
|
-use Illuminate\Contracts\Validation\Validator as ValidatorContract;
|
|
|
-use Illuminate\Foundation\Http\FormRequest;
|
|
|
-use Illuminate\Support\Facades\Validator as ValidatorFacade;
|
|
|
-use Illuminate\Validation\Validator;
|
|
|
-use Tests\TestCase;
|
|
|
-
|
|
|
-class ValidatesProposalPricingTest extends TestCase
|
|
|
-{
|
|
|
- public function test_it_rejects_the_registration_section_when_neither_option_is_selected(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_included_in_course' => false,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertSame(
|
|
|
- ['Selecione exatamente uma opção: incluso no valor do curso ou permite parcelar.'],
|
|
|
- $validator->errors()->get('pavao.registration_included_in_course'),
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_rejects_the_registration_section_when_both_options_are_selected(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_included_in_course' => true,
|
|
|
- 'registration_installments_allowed' => true,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_accepts_the_registration_section_when_exactly_one_option_is_selected(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_included_in_course' => true,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertFalse($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_validates_the_classes_and_materials_sections_independently(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_included_in_course' => true,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- 'classes_included_in_course' => false,
|
|
|
- 'classes_installments_allowed' => false,
|
|
|
- 'materials_included_in_course' => true,
|
|
|
- 'materials_installments_allowed' => true,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertFalse($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.classes_included_in_course'));
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.materials_included_in_course'));
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_skips_a_block_that_was_not_sent(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'irrecusavel' => [
|
|
|
- 'registration_included_in_course' => true,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- 'classes_included_in_course' => true,
|
|
|
- 'classes_installments_allowed' => false,
|
|
|
- 'materials_included_in_course' => true,
|
|
|
- 'materials_installments_allowed' => false,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertFalse($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- $this->assertFalse($validator->errors()->any());
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_validates_pavao_and_irrecusavel_blocks_independently(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_included_in_course' => true,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- 'classes_included_in_course' => true,
|
|
|
- 'classes_installments_allowed' => false,
|
|
|
- 'materials_included_in_course' => true,
|
|
|
- 'materials_installments_allowed' => false,
|
|
|
- ],
|
|
|
- 'irrecusavel' => [
|
|
|
- 'registration_included_in_course' => false,
|
|
|
- 'registration_installments_allowed' => false,
|
|
|
- 'classes_included_in_course' => true,
|
|
|
- 'classes_installments_allowed' => false,
|
|
|
- 'materials_included_in_course' => true,
|
|
|
- 'materials_installments_allowed' => false,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertFalse($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- $this->assertTrue($validator->errors()->has('irrecusavel.registration_included_in_course'));
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_accepts_an_explicitly_null_block_as_not_having_that_modality(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => null,
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertTrue($validator->passes());
|
|
|
- }
|
|
|
-
|
|
|
- public function test_it_requires_the_section_fields_once_the_block_is_sent(): void
|
|
|
- {
|
|
|
- $validator = $this->validatorFor([
|
|
|
- 'pavao' => [
|
|
|
- 'registration_value' => 100,
|
|
|
- ],
|
|
|
- ]);
|
|
|
-
|
|
|
- $this->assertFalse($validator->passes());
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.registration_included_in_course'));
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.classes_included_in_course'));
|
|
|
- $this->assertTrue($validator->errors()->has('pavao.materials_included_in_course'));
|
|
|
- }
|
|
|
-
|
|
|
- private function validatorFor(array $data): Validator
|
|
|
- {
|
|
|
- $request = TestableProposalPricingRequest::create('/', 'POST', $data);
|
|
|
- $validator = ValidatorFacade::make($request->all(), $request->rules());
|
|
|
-
|
|
|
- $request->withValidator($validator);
|
|
|
-
|
|
|
- return $validator;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class TestableProposalPricingRequest extends FormRequest
|
|
|
-{
|
|
|
- use ValidatesProposalPricing;
|
|
|
-
|
|
|
- public function rules(): array
|
|
|
- {
|
|
|
- return [
|
|
|
- ...$this->proposalPricingRules('pavao'),
|
|
|
- ...$this->proposalPricingRules('irrecusavel', withCondition: true),
|
|
|
- ];
|
|
|
- }
|
|
|
-
|
|
|
- public function withValidator(ValidatorContract $validator): void
|
|
|
- {
|
|
|
- $this->validateProposalPricingSections($validator, ['pavao', 'irrecusavel']);
|
|
|
- }
|
|
|
-}
|