GroupControllerTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. namespace Tests\Unit\Api\v1\Controllers;
  3. use App\Api\v1\Controllers\GroupController;
  4. use App\Api\v1\Requests\GroupAssignRequest;
  5. use App\Api\v1\Requests\GroupStoreRequest;
  6. use App\Api\v1\Resources\GroupResource;
  7. use App\Api\v1\Resources\TwoFAccountReadResource;
  8. use App\Facades\Groups;
  9. use App\Models\Group;
  10. use App\Models\User;
  11. use Illuminate\Foundation\Testing\WithoutMiddleware;
  12. use Illuminate\Http\Request;
  13. use Mockery;
  14. use Tests\TestCase;
  15. /**
  16. * @covers \App\Api\v1\Controllers\GroupController
  17. */
  18. class GroupControllerTest extends TestCase
  19. {
  20. use WithoutMiddleware;
  21. /**
  22. * @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
  23. */
  24. protected $user;
  25. public function setUp() : void
  26. {
  27. parent::setUp();
  28. $this->user = new User();
  29. // We do not use $this->actingAs($this->user) to prevent intelephense
  30. // static analysis error. Dumb, but I don't like errors...
  31. $this->app['auth']->guard(null)->setUser($this->user);
  32. $this->app['auth']->shouldUse(null);
  33. }
  34. /**
  35. * @test
  36. */
  37. public function test_index_returns_api_resources()
  38. {
  39. $user = Mockery::mock(User::class);
  40. $request = Mockery::mock(Request::class);
  41. $groups = Group::factory()->count(3)->make();
  42. $controller = new GroupController();
  43. $user->shouldReceive('groups->withCount->get')
  44. ->once()
  45. ->andReturn($groups);
  46. $request->shouldReceive('user')
  47. ->andReturn($user);
  48. Groups::shouldReceive('prependTheAllGroup')
  49. ->once()
  50. ->andReturn($groups);
  51. $response = $controller->index($request);
  52. $this->assertContainsOnlyInstancesOf(GroupResource::class, $response->collection);
  53. }
  54. /**
  55. * @test
  56. */
  57. public function test_store_uses_validated_data_and_returns_api_resource()
  58. {
  59. $request = Mockery::mock(GroupStoreRequest::class);
  60. $controller = new GroupController();
  61. $group = Group::factory()->for($this->user)->make();
  62. $validated = ['name' => $group->name];
  63. $request->shouldReceive([
  64. 'validated' => $validated,
  65. 'user->groups->create' => $group,
  66. ]);
  67. $response = $controller->store($request);
  68. $this->assertInstanceOf(Group::class, $response->original);
  69. // $this->assertInstanceOf(GroupResource::class, $response);
  70. }
  71. /**
  72. * @test
  73. */
  74. public function test_show_returns_api_resource()
  75. {
  76. $controller = Mockery::mock(GroupController::class)->makePartial();
  77. $group = Group::factory()->make();
  78. $response = $controller->show($group);
  79. $this->assertInstanceOf(GroupResource::class, $response);
  80. }
  81. /**
  82. * @test
  83. */
  84. public function test_update_validates_data_and_returns_api_resource()
  85. {
  86. $request = Mockery::mock(GroupStoreRequest::class);
  87. $controller = Mockery::mock(GroupController::class)->makePartial();
  88. $group = Group::factory()->make();
  89. $validated = ['name' => $group->name];
  90. $request->shouldReceive([
  91. 'validated' => $validated,
  92. ]);
  93. $response = $controller->update($request, $group);
  94. $this->assertInstanceOf(GroupResource::class, $response);
  95. }
  96. /**
  97. * @test
  98. */
  99. public function test_assignAccounts_returns_api_resource_assigned_using_groupService()
  100. {
  101. $request = Mockery::mock(GroupAssignRequest::class);
  102. $controller = Mockery::mock(GroupController::class)->makePartial();
  103. $group = Group::factory()->make();
  104. $validated = ['ids' => $group->id];
  105. $request->shouldReceive([
  106. 'validated' => $validated,
  107. 'user' => $this->user,
  108. ]);
  109. Groups::shouldReceive('assign')
  110. ->with($group->id, $this->user, $group)
  111. ->once();
  112. $response = $controller->assignAccounts($request, $group);
  113. $this->assertInstanceOf(GroupResource::class, $response);
  114. }
  115. /**
  116. * @test
  117. */
  118. public function test_accounts_returns_api_resources()
  119. {
  120. $controller = Mockery::mock(GroupController::class)->makePartial();
  121. $group = Group::factory()->make();
  122. $response = $controller->accounts($group);
  123. $this->assertContainsOnlyInstancesOf(TwoFAccountReadResource::class, $response->collection);
  124. }
  125. /**
  126. * @test
  127. */
  128. public function test_destroy_uses_group_service()
  129. {
  130. $controller = Mockery::mock(GroupController::class)->makePartial();
  131. $group = Group::factory()->make();
  132. $group->id = 0;
  133. $response = $controller->destroy($group);
  134. $this->assertInstanceOf('Illuminate\Http\JsonResponse', $response);
  135. $this->assertEquals(204, $response->status());
  136. }
  137. }