ResponsibleControllerTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Tests\Feature;
  3. use App\Models\Dictionary\Area;
  4. use App\Models\Dictionary\District;
  5. use App\Models\Responsible;
  6. use App\Models\Role;
  7. use App\Models\User;
  8. use Illuminate\Foundation\Testing\RefreshDatabase;
  9. use Tests\TestCase;
  10. class ResponsibleControllerTest extends TestCase
  11. {
  12. use RefreshDatabase;
  13. protected $seed = true;
  14. private User $adminUser;
  15. protected function setUp(): void
  16. {
  17. parent::setUp();
  18. $this->adminUser = User::factory()->create(['role' => Role::ADMIN]);
  19. }
  20. public function test_responsibles_index_filters_by_area_name(): void
  21. {
  22. $district = District::factory()->create();
  23. $matchingResponsible = Responsible::query()->create([
  24. 'name' => 'Иван Иванов',
  25. 'phone' => '+79990000001',
  26. 'post' => 'Куратор',
  27. ]);
  28. $otherResponsible = Responsible::query()->create([
  29. 'name' => 'Петр Петров',
  30. 'phone' => '+79990000002',
  31. 'post' => 'Куратор',
  32. ]);
  33. Area::factory()->create([
  34. 'district_id' => $district->id,
  35. 'name' => 'Тверской',
  36. 'responsible_id' => $matchingResponsible->id,
  37. ]);
  38. Area::factory()->create([
  39. 'district_id' => $district->id,
  40. 'name' => 'Арбат',
  41. 'responsible_id' => $otherResponsible->id,
  42. ]);
  43. $response = $this->actingAs($this->adminUser)
  44. ->get(route('responsible.index', [
  45. 'filters' => ['area_name' => 'Тверской'],
  46. ]));
  47. $response->assertOk();
  48. $response->assertSee('Иван Иванов');
  49. $response->assertDontSee('Петр Петров');
  50. }
  51. public function test_responsible_area_filter_values_are_loaded_from_view(): void
  52. {
  53. $district = District::factory()->create();
  54. $responsible = Responsible::query()->create([
  55. 'name' => 'Иван Иванов',
  56. 'phone' => '+79990000001',
  57. 'post' => 'Куратор',
  58. ]);
  59. Area::factory()->create([
  60. 'district_id' => $district->id,
  61. 'name' => 'Тверской',
  62. 'responsible_id' => $responsible->id,
  63. ]);
  64. $response = $this->actingAs($this->adminUser)
  65. ->getJson(route('getFilters', [
  66. 'table' => 'responsibles',
  67. 'column' => 'area_name',
  68. ]));
  69. $response->assertOk();
  70. $response->assertJsonFragment(['Тверской']);
  71. }
  72. public function test_responsible_show_uses_nav_context_back_url(): void
  73. {
  74. $responsible = Responsible::query()->create([
  75. 'name' => 'Иван Иванов',
  76. 'phone' => '+79990000001',
  77. 'post' => 'Куратор',
  78. ]);
  79. $response = $this->actingAs($this->adminUser)
  80. ->withSession([
  81. 'navigation' => [
  82. 'responsible-nav' => [
  83. 'updated_at' => now()->timestamp,
  84. 'stack' => [
  85. route('responsible.index', ['page' => 3]),
  86. ],
  87. ],
  88. ],
  89. ])
  90. ->get(route('responsible.show', ['responsible' => $responsible, 'nav' => 'responsible-nav']));
  91. $response->assertOk();
  92. $response->assertViewHas('nav', 'responsible-nav');
  93. $response->assertViewHas('back_url', route('responsible.index', ['page' => 3, 'nav' => 'responsible-nav']));
  94. }
  95. }