GroupControllerTest.php 4.8 KB

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