1+ <?php
2+
3+ namespace BeyondCode \Vouchers \Tests ;
4+
5+ use Vouchers ;
6+ use Validator ;
7+ use BeyondCode \Vouchers \Rules \Voucher ;
8+ use BeyondCode \Vouchers \Tests \Models \User ;
9+ use BeyondCode \Vouchers \Tests \Models \Item ;
10+
11+ class VoucherRuleTest extends TestCase
12+ {
13+
14+ /**
15+ * @return \Illuminate\Validation\Validator
16+ */
17+ protected function validator ($ code )
18+ {
19+ return Validator::make (['code ' => $ code ], ['code ' => new Voucher ()]);
20+ }
21+
22+ /** @test */
23+ public function it_validated_voucher_codes ()
24+ {
25+ $ item = Item::create (['name ' => 'Foo ' ]);
26+
27+ $ vouchers = Vouchers::create ($ item );
28+
29+ $ this ->assertTrue ($ this ->validator ($ vouchers [0 ]->code )->passes ());
30+ $ this ->assertTrue ($ this ->validator ('invalid ' )->fails ());
31+ }
32+
33+ /** @test */
34+ public function it_returns_correct_error_messages_for_invalid_vouchers ()
35+ {
36+ $ validator = $ this ->validator ('invalid ' );
37+ $ validator ->passes ();
38+
39+ $ message = $ validator ->messages ()->first ('code ' );
40+
41+ $ this ->assertSame ('The voucher code is invalid. ' , $ message );
42+ }
43+
44+ /** @test */
45+ public function it_returns_correct_error_messages_for_redeemed_vouchers ()
46+ {
47+ $ item = Item::create (['name ' => 'Foo ' ]);
48+ $ vouchers = Vouchers::create ($ item );
49+
50+ $ user = User::first ();
51+ $ user ->redeemCode ($ vouchers [0 ]->code );
52+
53+ auth ()->login ($ user );
54+
55+ $ validator = $ this ->validator ($ vouchers [0 ]->code );
56+
57+ $ this ->assertTrue ($ validator ->fails ());
58+
59+ $ message = $ validator ->messages ()->first ('code ' );
60+
61+ $ this ->assertSame ('The voucher code was already redeemed. ' , $ message );
62+ }
63+
64+ /** @test */
65+ public function it_returns_correct_error_messages_for_expired_vouchers ()
66+ {
67+ $ item = Item::create (['name ' => 'Foo ' ]);
68+ $ vouchers = Vouchers::create ($ item , 1 , [], now ()->subDay (1 ));
69+
70+ $ validator = $ this ->validator ($ vouchers [0 ]->code );
71+
72+ $ this ->assertTrue ($ validator ->fails ());
73+
74+ $ message = $ validator ->messages ()->first ('code ' );
75+
76+ $ this ->assertSame ('The voucher code is already expired. ' , $ message );
77+ }
78+
79+ }
0 commit comments