GroupControllerTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace Tests\Unit\Api\v1\Controllers;
  3. use App\Models\User;
  4. use App\Models\Group;
  5. use Tests\TestCase;
  6. use App\Models\TwoFAccount;
  7. use App\Services\GroupService;
  8. use Illuminate\Foundation\Testing\WithoutMiddleware;
  9. use App\Api\v1\Controllers\GroupController;
  10. use Mockery;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
  13. use App\Api\v1\Requests\GroupStoreRequest;
  14. /**
  15. * @covers \App\Api\v1\Controllers\GroupController
  16. */
  17. class GroupControllerTest extends TestCase
  18. {
  19. use WithoutMiddleware;
  20. /**
  21. * @var \Mockery\Mock|\App\Services\GroupService
  22. */
  23. protected $groupServiceMock;
  24. /**
  25. * @var \App\Api\v1\Controllers\GroupController mocked controller
  26. */
  27. protected $controller;
  28. /**
  29. * @var \App\Api\v1\Requests\GroupStoreRequest mocked request
  30. */
  31. protected $groupStoreRequest;
  32. public function setUp() : void
  33. {
  34. parent::setUp();
  35. $this->groupServiceMock = Mockery::mock($this->app->make(GroupService::class));
  36. $this->groupStoreRequest = Mockery::mock('App\Api\v1\Requests\GroupStoreRequest');
  37. $this->controller = new GroupController($this->groupServiceMock);
  38. }
  39. /**
  40. * @test
  41. */
  42. public function test_index_returns_api_resources_using_groupService()
  43. {
  44. $groups = Group::factory()->count(3)->make();
  45. $this->groupServiceMock->shouldReceive('getAll')
  46. ->once()
  47. ->andReturn($groups);
  48. $response = $this->controller->index();
  49. $this->assertContainsOnlyInstancesOf('App\Api\v1\Resources\GroupResource', $response->collection);
  50. }
  51. /**
  52. * @test
  53. */
  54. public function test_store_returns_api_resource_stored_using_groupService()
  55. {
  56. $group = Group::factory()->make();
  57. $this->groupStoreRequest->shouldReceive('validated')
  58. ->once()
  59. ->andReturn(['name' => $group->name]);
  60. $this->groupServiceMock->shouldReceive('create')
  61. ->once()
  62. ->andReturn($group);
  63. $response = $this->controller->store($this->groupStoreRequest);
  64. $this->assertInstanceOf('App\Models\Group', $response->original);
  65. }
  66. /**
  67. * @test
  68. */
  69. public function test_show_returns_api_resource()
  70. {
  71. $group = Group::factory()->make();
  72. $response = $this->controller->show($group);
  73. $this->assertInstanceOf('App\Api\v1\Resources\GroupResource', $response);
  74. }
  75. /**
  76. * @test
  77. */
  78. public function test_update_returns_api_resource_updated_using_groupService()
  79. {
  80. $group = Group::factory()->make();
  81. $this->groupStoreRequest->shouldReceive('validated')
  82. ->once()
  83. ->andReturn(['name' => $group->name]);
  84. $this->groupServiceMock->shouldReceive('update')
  85. ->once()
  86. ->andReturn($group);
  87. $response = $this->controller->update($this->groupStoreRequest, $group);
  88. $this->assertInstanceOf('App\Api\v1\Resources\GroupResource', $response);
  89. }
  90. /**
  91. * @test
  92. */
  93. public function test_assignAccounts_returns_api_resource_assigned_using_groupService()
  94. {
  95. $group = Group::factory()->make();
  96. $groupAssignRequest = Mockery::mock('App\Api\v1\Requests\GroupAssignRequest');
  97. $groupAssignRequest->shouldReceive('validated')
  98. ->once()
  99. ->andReturn(['ids' => $group->id]);
  100. $this->groupServiceMock->shouldReceive('assign')
  101. ->with($group->id, $group)
  102. ->once();
  103. $response = $this->controller->assignAccounts($groupAssignRequest, $group);
  104. $this->assertInstanceOf('App\Api\v1\Resources\GroupResource', $response);
  105. }
  106. /**
  107. * @test
  108. */
  109. public function test_accounts_returns_api_resources_fetched_using_groupService()
  110. {
  111. $group = Group::factory()->make();
  112. \Facades\App\Services\SettingService::shouldReceive('get')
  113. ->with('useEncryption')
  114. ->andReturn(false);
  115. $twofaccounts = TwoFAccount::factory()->count(3)->make();
  116. $this->groupServiceMock->shouldReceive('getAccounts')
  117. ->with($group)
  118. ->once()
  119. ->andReturn($twofaccounts);
  120. $response = $this->controller->accounts($group);
  121. // TwoFAccountCollection
  122. $this->assertContainsOnlyInstancesOf('App\Api\v1\Resources\TwoFAccountReadResource', $response->collection);
  123. }
  124. /**
  125. * @test
  126. */
  127. public function test_destroy_uses_group_service()
  128. {
  129. $group = Group::factory()->make();
  130. $this->groupServiceMock->shouldReceive('delete')
  131. ->once()
  132. ->with($group->id);
  133. $response = $this->controller->destroy($group);
  134. $this->assertInstanceOf('Illuminate\Http\JsonResponse', $response);
  135. }
  136. }