| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?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'));
- }
- 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', 'sometimes'),
- ...$this->proposalPricingRules('irrecusavel', 'sometimes', withCondition: true),
- ];
- }
- public function withValidator(ValidatorContract $validator): void
- {
- $this->validateProposalPricingSections($validator, ['pavao', 'irrecusavel']);
- }
- }
|