ProjectTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace Tests\Feature\API;
  3. use App\Models\Asset;
  4. use App\Models\Enums\ProjectStatus;
  5. use App\Models\Plan;
  6. use App\Models\Project;
  7. use App\Models\ProjectPlan;
  8. use Carbon\Carbon;
  9. use Illuminate\Foundation\Testing\RefreshDatabase;
  10. use Illuminate\Foundation\Testing\WithFaker;
  11. use Tests\Feature\TestCase;
  12. class ProjectTest extends TestCase
  13. {
  14. public function test_project_list()
  15. {
  16. Project::factory(30)->create();
  17. $response = $this->get(route('project.index'));
  18. $response->assertStatus(200)
  19. ->assertJsonStructure([
  20. 'data' => [
  21. '*' => [
  22. 'id',
  23. 'name',
  24. 'code',
  25. 'status',
  26. 'const',
  27. 'begin',
  28. 'end',
  29. 'available_days',
  30. ]
  31. ]
  32. ]);
  33. }
  34. public function test_project_create(): void
  35. {
  36. $form = Project::factory()->make();
  37. $form->whitelist = [
  38. 1
  39. ];
  40. $form->plans = [
  41. Plan::factory()->create()->id,
  42. Plan::factory()->create()->id,
  43. ];
  44. $form->assets = [
  45. Asset::factory()->create()->id,
  46. Asset::factory()->create()->id,
  47. ];
  48. $response = $this->post(route('project.store'), $form->toArray());
  49. $response->assertStatus(201);
  50. }
  51. public function test_project_update(): void
  52. {
  53. $project = Project::factory()->create();
  54. $form = Project::factory()->make();
  55. $form->whitelist = [1];
  56. $form->plans = [
  57. Plan::factory()->create()->id,
  58. Plan::factory()->create()->id,
  59. ];
  60. $form->assets = [
  61. Asset::factory()->create()->id,
  62. Asset::factory()->create()->id,
  63. ];
  64. $response = $this->put(route('project.update', ['project' => $project->id]), $form->toArray());
  65. $response->assertStatus(204);
  66. $newAsset = Project::find($project->id);
  67. $this->assertEquals($form->name, $newAsset->name);
  68. }
  69. public function test_project_delete(): void
  70. {
  71. $project = Project::factory()->create();
  72. $response = $this->delete(route('project.destroy', ['project' => $project->id]));
  73. $response->assertStatus(204);
  74. $this->assertNull(Project::find($project->id));
  75. }
  76. public function test_project_closed(): void
  77. {
  78. $project = Project::factory()->create();
  79. $response = $this->patch(route('project.closed', ['project' => $project->id]));
  80. $response->assertStatus(204);
  81. $this->assertEquals(Project::find($project->id)->status, ProjectStatus::CLOSED->value);
  82. }
  83. public function test_project_start(): void
  84. {
  85. $project = Project::factory()->create();
  86. $response = $this->patch(route('project.start', ['project' => $project->id]));
  87. $response->assertStatus(204);
  88. $this->assertEquals(Project::find($project->id)->status, ProjectStatus::DOING->value);
  89. }
  90. public function test_project_pause(): void
  91. {
  92. $project = Project::factory()->create();
  93. $response = $this->patch(route('project.pause', ['project' => $project->id]));
  94. $response->assertStatus(204);
  95. $this->assertEquals(Project::find($project->id)->status, ProjectStatus::PAUSE->value);
  96. }
  97. public function test_project_postpone(): void
  98. {
  99. $project = Project::factory()->create();
  100. $response = $this->patch(route('project.postpone', ['project' => $project->id]), [
  101. 'begin' => Carbon::now()->toDateString(),
  102. 'end' => Carbon::now()->addDays(3)->toDateString(),
  103. 'available_days' => 3,
  104. ]);
  105. $response->assertStatus(204);
  106. }
  107. public function test_project_plans_test(): void
  108. {
  109. $project = Project::factory()->create();
  110. $plan = Plan::factory()->create();
  111. $projectPlan = ProjectPlan::create([
  112. 'project_id' => $project->id,
  113. 'plan_id' => $plan->id,
  114. ]);
  115. $response = $this->get(route('project.plan', ['project' => $project->id]));
  116. $response->assertStatus(200)
  117. ->assertJsonStructure([
  118. 'data' => [
  119. '*' => [
  120. 'id',
  121. 'title'
  122. ]
  123. ]
  124. ])->assertJsonPath("data.0.id", $projectPlan->id);
  125. }
  126. }