UsersTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?php
  2. use Illuminate\Http\UploadedFile;
  3. use Illuminate\Support\Arr;
  4. use Illuminate\Support\Facades\Hash;
  5. use Webkul\User\Models\Admin;
  6. use function Pest\Laravel\deleteJson;
  7. use function Pest\Laravel\get;
  8. use function Pest\Laravel\postJson;
  9. use function Pest\Laravel\putJson;
  10. it('should returns the user index page', function () {
  11. // Act and Assert.
  12. $this->loginAsAdmin();
  13. get(route('admin.settings.users.index'))
  14. ->assertOk()
  15. ->assertSeeText(trans('admin::app.settings.users.index.title'))
  16. ->assertSeeText(trans('admin::app.settings.users.index.create.title'));
  17. });
  18. it('should fail the validation with errors when certain field not provided when store the users', function () {
  19. // Act and Assert.
  20. $this->loginAsAdmin();
  21. postJson(route('admin.settings.users.store'))
  22. ->assertJsonValidationErrorFor('name')
  23. ->assertJsonValidationErrorFor('email')
  24. ->assertJsonValidationErrorFor('role_id')
  25. ->assertUnprocessable();
  26. });
  27. it('should fail the validation with errors when confirm password not provided when store the users', function () {
  28. // Act and Assert.
  29. $this->loginAsAdmin();
  30. postJson(route('admin.settings.users.store'), [
  31. 'password' => 'admin123',
  32. ])
  33. ->assertJsonValidationErrorFor('name')
  34. ->assertJsonValidationErrorFor('email')
  35. ->assertJsonValidationErrorFor('role_id')
  36. ->assertJsonValidationErrorFor('password_confirmation')
  37. ->assertUnprocessable();
  38. });
  39. it('should store the newly created admin', function () {
  40. // Act and Assert.
  41. $this->loginAsAdmin();
  42. postJson(route('admin.settings.users.store'), $data = [
  43. 'name' => fake()->name(),
  44. 'role_id' => 1,
  45. 'email' => fake()->email,
  46. 'password' => $password = fake()->password(),
  47. 'password_confirmation' => $password,
  48. 'image' => [
  49. UploadedFile::fake()->image('avatar.jpg'),
  50. ],
  51. ])
  52. ->assertOk()
  53. ->assertSeeText(trans('admin::app.settings.users.create-success'));
  54. $this->assertModelWise([
  55. Admin::class => [
  56. [
  57. 'name' => $data['name'],
  58. 'email' => $data['email'],
  59. 'role_id' => 1,
  60. ],
  61. ],
  62. ]);
  63. });
  64. it('should fails the validation error with tempered avatar provided when store the admin', function () {
  65. // Act and Assert.
  66. $this->loginAsAdmin();
  67. postJson(route('admin.settings.users.store'), [
  68. 'name' => fake()->name(),
  69. 'role_id' => 1,
  70. 'email' => fake()->email(),
  71. 'password' => $password = fake()->password(),
  72. 'password_confirmation' => $password,
  73. 'image' => [
  74. UploadedFile::fake()->image('avatar.php'),
  75. ],
  76. ])
  77. ->assertJsonValidationErrorFor('image.0')
  78. ->assertUnprocessable();
  79. });
  80. it('should returns the user and its roles', function () {
  81. // Arrange.
  82. $admin = Admin::factory()->create();
  83. // Act and Assert.
  84. $this->loginAsAdmin();
  85. get(route('admin.settings.users.edit', $admin->id))
  86. ->assertOk()
  87. ->assertJsonPath('roles.0.id', 1)
  88. ->assertJsonPath('roles.0.name', 'Administrator')
  89. ->assertJsonPath('user.id', $admin->id)
  90. ->assertJsonPath('user.email', $admin->email);
  91. });
  92. it('should fail the validation with errors when certain field not provided when update the users', function () {
  93. // Arrange.
  94. $admin = Admin::factory()->create();
  95. // Act and Assert.
  96. $this->loginAsAdmin();
  97. putJson(route('admin.settings.users.update'), [
  98. 'id' => $admin->id,
  99. 'password' => 'admin123',
  100. ])
  101. ->assertJsonValidationErrorFor('name')
  102. ->assertJsonValidationErrorFor('email')
  103. ->assertJsonValidationErrorFor('role_id')
  104. ->assertJsonValidationErrorFor('password_confirmation')
  105. ->assertUnprocessable();
  106. });
  107. it('should update the existing admin', function () {
  108. // Arrange.
  109. $admin = Admin::factory()->create();
  110. // Act and Assert.
  111. $this->loginAsAdmin();
  112. putJson(route('admin.settings.users.update'), $data = [
  113. 'id' => $admin->id,
  114. 'name' => $admin->name,
  115. 'image' => [
  116. UploadedFile::fake()->image('avatar.jpg'),
  117. ],
  118. 'role_id' => 1,
  119. 'email' => fake()->email(),
  120. 'password' => $password = fake()->password(),
  121. 'password_confirmation' => $password,
  122. ])
  123. ->assertOk()
  124. ->assertSeeText(trans('admin::app.settings.users.update-success'));
  125. $this->assertModelWise([
  126. Admin::class => [
  127. Arr::except($data, ['image', 'password_confirmation', 'password']),
  128. ],
  129. ]);
  130. });
  131. it('should fails the validation error with tempered avatar provided when update the admin', function () {
  132. // Arrange.
  133. $admin = Admin::factory()->create();
  134. // Act and Assert.
  135. $this->loginAsAdmin();
  136. putJson(route('admin.settings.users.update'), [
  137. 'id' => $admin->id,
  138. 'name' => $admin->name,
  139. 'image' => [
  140. UploadedFile::fake()->image('avatar.php'),
  141. ],
  142. 'role_id' => 1,
  143. 'email' => fake()->email(),
  144. 'password' => $password = fake()->password(),
  145. 'password_confirmation' => $password,
  146. ])
  147. ->assertJsonValidationErrorFor('image.0')
  148. ->assertUnprocessable();
  149. });
  150. it('can update the users without new image', function () {
  151. // Arrange.
  152. $admin = Admin::factory()->create();
  153. $admin->update([
  154. 'image' => 'avatar.jpg',
  155. ]);
  156. $admin->refresh();
  157. // Act and Assert.
  158. $this->loginAsAdmin($admin);
  159. putJson(route('admin.settings.users.update'), [
  160. 'id' => $admin->id,
  161. 'name' => $admin->name,
  162. 'image' => [
  163. 'image' => '',
  164. ],
  165. 'role_id' => 1,
  166. 'email' => fake()->email(),
  167. 'password' => $password = fake()->password(),
  168. 'password_confirmation' => $password,
  169. ])
  170. ->assertOk();
  171. $this->assertDatabaseHas('admins', [
  172. 'id' => $admin->id,
  173. 'image' => $admin->image,
  174. ]);
  175. });
  176. it('should delete the existing admin', function () {
  177. // Arrange.
  178. $admin = Admin::factory()->create();
  179. // Act and Assert.
  180. $this->loginAsAdmin();
  181. deleteJson(route('admin.settings.users.delete', $admin->id))
  182. ->assertOk()
  183. ->assertSeeText(trans('admin::app.settings.users.delete-success'));
  184. $this->assertDatabaseMissing('admins', [
  185. 'id' => $admin->id,
  186. ]);
  187. });
  188. it('should delete self admin', function () {
  189. // Arrange.
  190. $admin = Admin::factory()->create([
  191. 'password' => Hash::make($password = fake()->password()),
  192. ]);
  193. // Act and Assert.
  194. $this->loginAsAdmin($admin);
  195. putJson(route('admin.settings.users.destroy'), [
  196. 'password' => $password,
  197. ])
  198. ->assertOk()
  199. ->assertJsonPath('redirectUrl', route('admin.session.create'))
  200. ->assertJsonPath('message', trans('admin::app.settings.users.delete-success'));
  201. });