GroupControllerTest.php 4.6 KB

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