UserStoreRequestTest.php 4.4 KB

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