SettingControllerTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. namespace Tests\Api\v1\Controllers;
  3. use App\User;
  4. use App\Group;
  5. use Tests\FeatureTestCase;
  6. use App\TwoFAccount;
  7. /**
  8. * @covers \App\Api\v1\Controllers\SettingController
  9. */
  10. class SettingControllerTest extends FeatureTestCase
  11. {
  12. /**
  13. * @var \App\User
  14. */
  15. protected $user;
  16. private const SETTING_JSON_STRUCTURE = [
  17. 'key',
  18. 'value'
  19. ];
  20. private const TWOFAUTH_NATIVE_SETTING = 'showTokenAsDot';
  21. private const TWOFAUTH_NATIVE_SETTING_DEFAULT_VALUE = false;
  22. private const TWOFAUTH_NATIVE_SETTING_CHANGED_VALUE = true;
  23. private const USER_DEFINED_SETTING = 'mySetting';
  24. private const USER_DEFINED_SETTING_VALUE = 'mySetting';
  25. private const USER_DEFINED_SETTING_CHANGED_VALUE = 'mySetting';
  26. /**
  27. * @test
  28. */
  29. public function setUp(): void
  30. {
  31. parent::setUp();
  32. $this->user = factory(User::class)->create();
  33. }
  34. /**
  35. * @test
  36. */
  37. public function test_index_returns_setting_collection()
  38. {
  39. $response = $this->actingAs($this->user, 'api')
  40. ->json('GET', '/api/v1/settings')
  41. ->assertOk()
  42. ->assertJsonStructure([
  43. '*' => self::SETTING_JSON_STRUCTURE
  44. ]);
  45. }
  46. /**
  47. * @test
  48. */
  49. public function test_show_native_unchanged_setting_returns_consistent_value()
  50. {
  51. $response = $this->actingAs($this->user, 'api')
  52. ->json('GET', '/api/v1/settings/' . self::TWOFAUTH_NATIVE_SETTING)
  53. ->assertOk()
  54. ->assertExactJson([
  55. 'key' => self::TWOFAUTH_NATIVE_SETTING,
  56. 'value' => self::TWOFAUTH_NATIVE_SETTING_DEFAULT_VALUE,
  57. ]);
  58. }
  59. /**
  60. * @test
  61. */
  62. public function test_show_native_changed_setting_returns_consistent_value()
  63. {
  64. $settingService = resolve('App\Services\SettingService');
  65. $settingService->set(self::TWOFAUTH_NATIVE_SETTING, self::TWOFAUTH_NATIVE_SETTING_CHANGED_VALUE);
  66. $response = $this->actingAs($this->user, 'api')
  67. ->json('GET', '/api/v1/settings/' . self::TWOFAUTH_NATIVE_SETTING)
  68. ->assertOk()
  69. ->assertExactJson([
  70. 'key' => self::TWOFAUTH_NATIVE_SETTING,
  71. 'value' => self::TWOFAUTH_NATIVE_SETTING_CHANGED_VALUE,
  72. ]);
  73. }
  74. /**
  75. * @test
  76. */
  77. public function test_show_custom_user_setting_returns_consistent_value()
  78. {
  79. $settingService = resolve('App\Services\SettingService');
  80. $settingService->set(self::USER_DEFINED_SETTING, self::USER_DEFINED_SETTING_VALUE);
  81. $response = $this->actingAs($this->user, 'api')
  82. ->json('GET', '/api/v1/settings/' . self::USER_DEFINED_SETTING)
  83. ->assertOk()
  84. ->assertExactJson([
  85. 'key' => self::USER_DEFINED_SETTING,
  86. 'value' => self::USER_DEFINED_SETTING_VALUE,
  87. ]);
  88. }
  89. /**
  90. * @test
  91. */
  92. public function test_show_missing_setting_returns_not_found()
  93. {
  94. $response = $this->actingAs($this->user, 'api')
  95. ->json('GET', '/api/v1/settings/missing')
  96. ->assertNotFound();
  97. }
  98. /**
  99. * @test
  100. */
  101. public function test_store_custom_user_setting_returns_success()
  102. {
  103. $response = $this->actingAs($this->user, 'api')
  104. ->json('POST', '/api/v1/settings', [
  105. 'key' => self::USER_DEFINED_SETTING,
  106. 'value' => self::USER_DEFINED_SETTING_VALUE,
  107. ])
  108. ->assertCreated()
  109. ->assertExactJson([
  110. 'key' => self::USER_DEFINED_SETTING,
  111. 'value' => self::USER_DEFINED_SETTING_VALUE,
  112. ]);
  113. }
  114. /**
  115. * @test
  116. */
  117. public function test_store_invalid_custom_user_setting_returns_validation_error()
  118. {
  119. $response = $this->actingAs($this->user, 'api')
  120. ->json('POST', '/api/v1/settings', [
  121. 'key' => null,
  122. 'value' => null,
  123. ])
  124. ->assertStatus(422);
  125. }
  126. /**
  127. * @test
  128. */
  129. public function test_store_existing_custom_user_setting_returns_validation_error()
  130. {
  131. $settingService = resolve('App\Services\SettingService');
  132. $settingService->set(self::USER_DEFINED_SETTING, self::USER_DEFINED_SETTING_VALUE);
  133. $response = $this->actingAs($this->user, 'api')
  134. ->json('POST', '/api/v1/settings', [
  135. 'key' => self::USER_DEFINED_SETTING,
  136. 'value' => self::USER_DEFINED_SETTING_VALUE,
  137. ])
  138. ->assertStatus(422);
  139. }
  140. /**
  141. * @test
  142. */
  143. public function test_update_unchanged_native_setting_returns_updated_setting()
  144. {
  145. $response = $this->actingAs($this->user, 'api')
  146. ->json('PUT', '/api/v1/settings/' . self::TWOFAUTH_NATIVE_SETTING, [
  147. 'value' => self::TWOFAUTH_NATIVE_SETTING_CHANGED_VALUE,
  148. ])
  149. ->assertOk()
  150. ->assertExactJson([
  151. 'key' => self::TWOFAUTH_NATIVE_SETTING,
  152. 'value' => self::TWOFAUTH_NATIVE_SETTING_CHANGED_VALUE,
  153. ]);
  154. }
  155. /**
  156. * @test
  157. */
  158. public function test_update_custom_user_setting_returns_updated_setting()
  159. {
  160. $settingService = resolve('App\Services\SettingService');
  161. $settingService->set(self::USER_DEFINED_SETTING, self::USER_DEFINED_SETTING_VALUE);
  162. $response = $this->actingAs($this->user, 'api')
  163. ->json('PUT', '/api/v1/settings/' . self::USER_DEFINED_SETTING, [
  164. 'value' => self::USER_DEFINED_SETTING_CHANGED_VALUE,
  165. ])
  166. ->assertOk()
  167. ->assertExactJson([
  168. 'key' => self::USER_DEFINED_SETTING,
  169. 'value' => self::USER_DEFINED_SETTING_CHANGED_VALUE,
  170. ]);
  171. }
  172. /**
  173. * @test
  174. */
  175. public function test_update_missing_user_setting_returns_created_setting()
  176. {
  177. $response = $this->actingAs($this->user, 'api')
  178. ->json('PUT', '/api/v1/settings/' . self::USER_DEFINED_SETTING, [
  179. 'value' => self::USER_DEFINED_SETTING_CHANGED_VALUE,
  180. ])
  181. ->assertOk()
  182. ->assertExactJson([
  183. 'key' => self::USER_DEFINED_SETTING,
  184. 'value' => self::USER_DEFINED_SETTING_CHANGED_VALUE,
  185. ]);
  186. }
  187. /**
  188. * @test
  189. */
  190. public function test_destroy_user_setting_returns_success()
  191. {
  192. $settingService = resolve('App\Services\SettingService');
  193. $settingService->set(self::USER_DEFINED_SETTING, self::USER_DEFINED_SETTING_VALUE);
  194. $response = $this->actingAs($this->user, 'api')
  195. ->json('DELETE', '/api/v1/settings/' . self::USER_DEFINED_SETTING)
  196. ->assertNoContent();
  197. }
  198. /**
  199. * @test
  200. */
  201. public function test_destroy_native_setting_returns_bad_request()
  202. {
  203. $response = $this->actingAs($this->user, 'api')
  204. ->json('DELETE', '/api/v1/settings/' . self::TWOFAUTH_NATIVE_SETTING)
  205. ->assertStatus(400)
  206. ->assertJsonStructure([
  207. 'message',
  208. 'reason',
  209. ]);
  210. }
  211. /**
  212. * @test
  213. */
  214. public function test_destroy_missing_user_setting_returns_not_found()
  215. {
  216. $response = $this->actingAs($this->user, 'api')
  217. ->json('DELETE', '/api/v1/settings/' . self::USER_DEFINED_SETTING)
  218. ->assertNotFound();
  219. }
  220. }