GroupControllerTest.php 4.4 KB

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