UserStoreRequestTest.php 5.2 KB

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