AdminSettingsControllerTest.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace Tests\Feature;
  3. use App\Models\Role;
  4. use App\Models\Setting;
  5. use App\Models\User;
  6. use Illuminate\Foundation\Testing\RefreshDatabase;
  7. use Tests\TestCase;
  8. class AdminSettingsControllerTest extends TestCase
  9. {
  10. use RefreshDatabase;
  11. protected $seed = true;
  12. private User $adminUser;
  13. private User $managerUser;
  14. protected function setUp(): void
  15. {
  16. parent::setUp();
  17. $this->adminUser = User::factory()->create(['role' => Role::ADMIN]);
  18. $this->managerUser = User::factory()->create(['role' => Role::MANAGER]);
  19. }
  20. public function test_admin_can_store_ttn_next_number_setting(): void
  21. {
  22. $response = $this->actingAs($this->adminUser)
  23. ->post(route('admin.settings.store'), [
  24. 'default_maf_order_user_id' => null,
  25. 'reclamation_act_representative_user_id' => null,
  26. 'ttn_next_number' => 25,
  27. 'technical_description_price_field' => 'project_price',
  28. ]);
  29. $response->assertRedirect();
  30. $response->assertSessionHas('success');
  31. $this->assertSame(25, Setting::getInt(Setting::KEY_TTN_NEXT_NUMBER));
  32. $this->assertSame('project_price', Setting::technicalDescriptionPriceField());
  33. }
  34. public function test_admin_can_select_technical_description_price_field(): void
  35. {
  36. $this->actingAs($this->adminUser)
  37. ->post(route('admin.settings.store'), [
  38. 'default_maf_order_user_id' => null,
  39. 'reclamation_act_representative_user_id' => null,
  40. 'ttn_next_number' => 25,
  41. 'technical_description_price_field' => 'wholesale_price',
  42. ])
  43. ->assertRedirect();
  44. $this->assertSame('wholesale_price', Setting::technicalDescriptionPriceField());
  45. }
  46. public function test_technical_description_price_defaults_to_project(): void
  47. {
  48. $this->assertSame('project_price', Setting::technicalDescriptionPriceField());
  49. }
  50. public function test_manager_cannot_store_admin_settings(): void
  51. {
  52. $response = $this->actingAs($this->managerUser)
  53. ->post(route('admin.settings.store'), [
  54. 'ttn_next_number' => 25,
  55. ]);
  56. $response->assertStatus(403);
  57. }
  58. }