UserStoreRequestTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace Tests\Feature\Http\Requests;
  3. use App\Http\Requests\UserStoreRequest;
  4. use App\Models\User;
  5. use Illuminate\Foundation\Testing\WithoutMiddleware;
  6. use Illuminate\Support\Facades\Validator;
  7. use Tests\FeatureTestCase;
  8. /**
  9. * @covers \App\Http\Requests\UserStoreRequest
  10. */
  11. class UserStoreRequestTest extends FeatureTestCase
  12. {
  13. use WithoutMiddleware;
  14. /**
  15. * @test
  16. */
  17. public function test_user_is_authorized()
  18. {
  19. $request = new UserStoreRequest();
  20. $this->assertTrue($request->authorize());
  21. }
  22. /**
  23. * @dataProvider provideValidData
  24. */
  25. public function test_valid_data(array $data) : void
  26. {
  27. User::factory()->create([
  28. 'name' => 'Jane',
  29. 'email' => 'jane@example.com',
  30. ]);
  31. $request = new UserStoreRequest();
  32. $validator = Validator::make($data, $request->rules());
  33. $this->assertFalse($validator->fails());
  34. }
  35. /**
  36. * Provide Valid data for validation test
  37. */
  38. public function provideValidData() : array
  39. {
  40. return [
  41. [[
  42. 'name' => 'John',
  43. 'email' => 'john@example.com',
  44. 'password' => 'MyPassword',
  45. 'password_confirmation' => 'MyPassword',
  46. ]],
  47. [[
  48. 'name' => 'John',
  49. 'email' => 'JOHN@example.com',
  50. 'password' => 'MyPassword',
  51. 'password_confirmation' => 'MyPassword',
  52. ]],
  53. ];
  54. }
  55. /**
  56. * @dataProvider provideInvalidData
  57. */
  58. public function test_invalid_data(array $data) : void
  59. {
  60. User::factory()->create([
  61. 'name' => 'John',
  62. 'email' => 'john@example.com',
  63. ]);
  64. $request = new UserStoreRequest();
  65. $validator = Validator::make($data, $request->rules());
  66. $this->assertTrue($validator->fails());
  67. }
  68. /**
  69. * Provide invalid data for validation test
  70. */
  71. public function provideInvalidData() : array
  72. {
  73. return [
  74. [[
  75. 'name' => 'John',
  76. 'email' => 'john@example.com', // unique
  77. 'password' => 'MyPassword',
  78. 'password_confirmation' => 'MyPassword',
  79. ]],
  80. [[
  81. 'name' => '', // required
  82. 'email' => 'john@example.com',
  83. 'password' => 'MyPassword',
  84. 'password_confirmation' => 'MyPassword',
  85. ]],
  86. [[
  87. 'name' => 'John',
  88. 'email' => '', // required
  89. 'password' => 'MyPassword',
  90. 'password_confirmation' => 'MyPassword',
  91. ]],
  92. [[
  93. 'name' => 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', // max:255
  94. 'email' => 'john@example.com',
  95. 'password' => 'MyPassword',
  96. 'password_confirmation' => 'MyPassword',
  97. ]],
  98. [[
  99. 'name' => 'John',
  100. 'email' => 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz@example.com', // max:255
  101. 'password' => 'MyPassword',
  102. 'password_confirmation' => 'MyPassword',
  103. ]],
  104. [[
  105. 'name' => 'John',
  106. 'email' => 'johnexample.com', // email
  107. 'password' => 'MyPassword',
  108. 'password_confirmation' => 'MyPassword',
  109. ]],
  110. [[
  111. 'name' => 'John',
  112. 'email' => 'john@example.com',
  113. 'password' => '', // required
  114. 'password_confirmation' => '', // required
  115. ]],
  116. [[
  117. 'name' => 'John',
  118. 'email' => 'john@example.com',
  119. 'password' => 'MyPassword',
  120. 'password_confirmation' => 'anotherPassword', // confirmed
  121. ]],
  122. [[
  123. 'name' => 'John',
  124. 'email' => 'john@example.com',
  125. 'password' => 'pwd', // min:8
  126. 'password_confirmation' => 'pwd',
  127. ]],
  128. ];
  129. }
  130. }