UserManagerStoreRequestTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace Tests\Api\v1\Requests;
  3. use App\Api\v1\Requests\UserManagerStoreRequest;
  4. use App\Models\User;
  5. use Illuminate\Foundation\Testing\WithoutMiddleware;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Validator;
  8. use PHPUnit\Framework\Attributes\CoversClass;
  9. use PHPUnit\Framework\Attributes\DataProvider;
  10. use PHPUnit\Framework\Attributes\Test;
  11. use Tests\FeatureTestCase;
  12. /**
  13. * UserManagerStoreRequestTest test class
  14. */
  15. #[CoversClass(UserManagerStoreRequest::class)]
  16. class UserManagerStoreRequestTest extends FeatureTestCase
  17. {
  18. use WithoutMiddleware;
  19. #[Test]
  20. public function test_admin_is_authorized()
  21. {
  22. Auth::shouldReceive('user->isAdministrator')
  23. ->once()
  24. ->andReturn(true);
  25. $request = new UserManagerStoreRequest;
  26. $this->assertTrue($request->authorize());
  27. }
  28. #[Test]
  29. #[DataProvider('provideValidData')]
  30. public function test_valid_data(array $data) : void
  31. {
  32. User::factory()->create([
  33. 'name' => 'Jane',
  34. 'email' => 'jane@example.com',
  35. ]);
  36. $request = new UserManagerStoreRequest;
  37. $validator = Validator::make($data, $request->rules());
  38. $this->assertFalse($validator->fails());
  39. }
  40. /**
  41. * Provide Valid data for validation test
  42. */
  43. public static function provideValidData() : array
  44. {
  45. return [
  46. [[
  47. 'name' => 'John',
  48. 'email' => 'john@example.com',
  49. 'password' => 'MyPassword',
  50. 'password_confirmation' => 'MyPassword',
  51. 'is_admin' => true,
  52. ]],
  53. [[
  54. 'name' => 'John',
  55. 'email' => 'JOHN@example.com',
  56. 'password' => 'MyPassword',
  57. 'password_confirmation' => 'MyPassword',
  58. 'is_admin' => 0,
  59. ]],
  60. ];
  61. }
  62. #[Test]
  63. #[DataProvider('provideInvalidData')]
  64. public function test_invalid_data(array $data) : void
  65. {
  66. User::factory()->create([
  67. 'name' => 'John',
  68. 'email' => 'john@example.com',
  69. ]);
  70. $request = new UserManagerStoreRequest;
  71. $validator = Validator::make($data, $request->rules());
  72. $this->assertTrue($validator->fails());
  73. }
  74. /**
  75. * Provide invalid data for validation test
  76. */
  77. public static function provideInvalidData() : array
  78. {
  79. return [
  80. [[
  81. 'name' => 'John',
  82. 'email' => 'john@example.com', // unique
  83. 'password' => 'MyPassword',
  84. 'password_confirmation' => 'MyPassword',
  85. 'is_admin' => true,
  86. ]],
  87. [[
  88. 'name' => '', // required
  89. 'email' => 'john@example.com',
  90. 'password' => 'MyPassword',
  91. 'password_confirmation' => 'MyPassword',
  92. 'is_admin' => true,
  93. ]],
  94. [[
  95. 'name' => 'John',
  96. 'email' => '', // required
  97. 'password' => 'MyPassword',
  98. 'password_confirmation' => 'MyPassword',
  99. 'is_admin' => true,
  100. ]],
  101. [[
  102. 'name' => 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', // max:255
  103. 'email' => 'john@example.com',
  104. 'password' => 'MyPassword',
  105. 'password_confirmation' => 'MyPassword',
  106. 'is_admin' => true,
  107. ]],
  108. [[
  109. 'name' => 'John',
  110. 'email' => 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz@example.com', // max:255
  111. 'password' => 'MyPassword',
  112. 'password_confirmation' => 'MyPassword',
  113. 'is_admin' => true,
  114. ]],
  115. [[
  116. 'name' => 'John',
  117. 'email' => 'johnexample.com', // email
  118. 'password' => 'MyPassword',
  119. 'password_confirmation' => 'MyPassword',
  120. 'is_admin' => true,
  121. ]],
  122. [[
  123. 'name' => 'John',
  124. 'email' => 'john@example.com',
  125. 'password' => '', // required
  126. 'password_confirmation' => '', // required
  127. 'is_admin' => true,
  128. ]],
  129. [[
  130. 'name' => 'John',
  131. 'email' => 'john@example.com',
  132. 'password' => 'MyPassword',
  133. 'password_confirmation' => 'anotherPassword', // confirmed
  134. 'is_admin' => true,
  135. ]],
  136. [[
  137. 'name' => 'John',
  138. 'email' => 'john@example.com',
  139. 'password' => 'pwd', // min:8
  140. 'password_confirmation' => 'pwd',
  141. 'is_admin' => true,
  142. ]],
  143. [[
  144. 'name' => 'John',
  145. 'email' => 'john@example.com',
  146. 'password' => 'MyPassword',
  147. 'password_confirmation' => 'MyPassword',
  148. 'is_admin' => null, // required
  149. ]],
  150. [[
  151. 'name' => 'John',
  152. 'email' => 'john@example.com',
  153. 'password' => 'MyPassword',
  154. 'password_confirmation' => 'MyPassword',
  155. 'is_admin' => '', // required
  156. ]],
  157. [[
  158. 'name' => 'John',
  159. 'email' => 'john@example.com',
  160. 'password' => 'MyPassword',
  161. 'password_confirmation' => 'MyPassword',
  162. 'is_admin' => 'string', // boolean
  163. ]],
  164. ];
  165. }
  166. }