|
@@ -5,7 +5,12 @@ namespace Tests\Feature\API;
|
|
|
use App\Models\Asset;
|
|
|
use App\Models\Enums\ProjectStatus;
|
|
|
use App\Models\Plan;
|
|
|
+use App\Models\PlanRequirement;
|
|
|
use App\Models\Project;
|
|
|
+use App\Models\ProjectAsset;
|
|
|
+use App\Models\ProjectPlan;
|
|
|
+use App\Models\ProjectRequirement;
|
|
|
+use App\Models\Requirement;
|
|
|
use Carbon\Carbon;
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
use Illuminate\Foundation\Testing\WithFaker;
|
|
@@ -141,4 +146,145 @@ class ProjectTest extends TestCase
|
|
|
|
|
|
$response->assertStatus(204);
|
|
|
}
|
|
|
+
|
|
|
+ public function test_project_plans(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+ $plan = Plan::factory()->create();
|
|
|
+
|
|
|
+ $projectPlan = ProjectPlan::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'plan_id' => $plan->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->get(route('project.plan', ['project' => $project->id]));
|
|
|
+
|
|
|
+ $response->assertStatus(200)
|
|
|
+ ->assertJsonStructure([
|
|
|
+ 'data' => [
|
|
|
+ '*' => [
|
|
|
+ 'id',
|
|
|
+ 'title'
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ])->assertJsonPath("data.0.id", $projectPlan->id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_project_not_link_asset_requirement(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+ $requirement = Requirement::factory()->create();
|
|
|
+
|
|
|
+ ProjectAsset::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'asset_id' => $requirement->asset_id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->get(route('project.not-link-asset-requirement', ['project' => $project->id]));
|
|
|
+
|
|
|
+ $response->assertStatus(200)
|
|
|
+ ->assertJsonStructure($this->simplePaginateResponseStructure([
|
|
|
+ 'id', 'title',
|
|
|
+ ]))->assertJsonPath("data.0.id", $requirement->id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_link_requirement(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+
|
|
|
+ $requirement = Requirement::factory()->create();
|
|
|
+
|
|
|
+ ProjectAsset::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'asset_id' => $requirement->asset_id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->patch(route('project.link-requirement', ['project' => $project->id]), [
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response->assertStatus(204);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_unlink_requirement(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+
|
|
|
+ $requirement = Requirement::factory()->create();
|
|
|
+
|
|
|
+ ProjectAsset::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'asset_id' => $requirement->asset_id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ ProjectRequirement::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->patch(route('project.unlink-requirement', ['project' => $project->id]), [
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response->assertStatus(204);
|
|
|
+
|
|
|
+ $count = ProjectRequirement::where([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ])->count();
|
|
|
+
|
|
|
+ $this->assertEquals(0, $count);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_project_link_requirement_by_plan(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+
|
|
|
+ $plan = Plan::factory()->create();
|
|
|
+
|
|
|
+ $requirement = Requirement::factory()->make();
|
|
|
+ $requirement->asset_id = $plan->asset_id;
|
|
|
+ $requirement->save();
|
|
|
+
|
|
|
+ PlanRequirement::create([
|
|
|
+ 'plan_id' => $plan->id,
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response = $this->patch(route('project.link-requirement-by-plan', ['project' => $project->id]), [
|
|
|
+ 'plan_id' => $plan->id,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $response->assertStatus(204);
|
|
|
+
|
|
|
+ $count = ProjectRequirement::where([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ])->count();
|
|
|
+
|
|
|
+ $this->assertEquals(1, $count);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_project_requirement_list(): void
|
|
|
+ {
|
|
|
+ $project = Project::factory()->create();
|
|
|
+
|
|
|
+ $requirements = Requirement::factory(30)->create();
|
|
|
+
|
|
|
+ foreach ($requirements as $requirement) {
|
|
|
+ ProjectRequirement::create([
|
|
|
+ 'project_id' => $project->id,
|
|
|
+ 'requirement_id' => $requirement->id,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $response = $this->get(route('project.requirement', ['project' => $project->id]));
|
|
|
+
|
|
|
+ dump($response->getContent());
|
|
|
+
|
|
|
+ $response->assertStatus(200)
|
|
|
+ ->assertJsonStructure($this->simplePaginateResponseStructure([
|
|
|
+ 'id', 'title', 'created_by', 'status'
|
|
|
+ ]));
|
|
|
+ }
|
|
|
}
|