123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <?php
- 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;
- use Tests\Feature\TestCase;
- class ProjectTest extends TestCase
- {
- public function test_project_list()
- {
- Project::factory(30)->create();
- $response = $this->get(route('project.index'));
- $response->assertStatus(200)
- ->assertJsonStructure([
- 'data' => [
- '*' => [
- 'id',
- 'name',
- 'code',
- 'status',
- 'const',
- 'begin',
- 'end',
- 'available_days',
- ]
- ]
- ]);
- }
- public function test_project_detail()
- {
- $project = Project::factory()->create();
- $response = $this->get(route('project.show', ['project' => $project->id]));
- $response->assertStatus(200)
- ->assertJsonStructure([
- 'data' => [
- 'id',
- 'name',
- 'code',
- 'status',
- 'const',
- 'begin',
- 'end',
- 'available_days',
- 'latitude',
- 'longitude',
- 'type',
- 'acl',
- 'whitelist',
- 'description',
- ]
- ]);
- }
- public function test_project_create(): void
- {
- $form = Project::factory()->make();
- $form->whitelist = [
- 1
- ];
- $form->plans = [
- Plan::factory()->create()->id,
- Plan::factory()->create()->id,
- ];
- $form->assets = [
- Asset::factory()->create()->id,
- Asset::factory()->create()->id,
- ];
- $response = $this->post(route('project.store'), $form->toArray());
- $response->assertStatus(201);
- }
- public function test_project_update(): void
- {
- $project = Project::factory()->create();
- $form = Project::factory()->make();
- $form->whitelist = [1];
- $form->plans = [
- Plan::factory()->create()->id,
- Plan::factory()->create()->id,
- ];
- $form->assets = [
- Asset::factory()->create()->id,
- Asset::factory()->create()->id,
- ];
- $response = $this->put(route('project.update', ['project' => $project->id]), $form->toArray());
- $response->assertStatus(204);
- $newAsset = Project::find($project->id);
- $this->assertEquals($form->name, $newAsset->name);
- }
- public function test_project_delete(): void
- {
- $project = Project::factory()->create();
- $response = $this->delete(route('project.destroy', ['project' => $project->id]));
- $response->assertStatus(204);
- $this->assertNull(Project::find($project->id));
- }
- public function test_project_closed(): void
- {
- $project = Project::factory()->create();
- $response = $this->patch(route('project.closed', ['project' => $project->id]));
- $response->assertStatus(204);
- $this->assertEquals(Project::find($project->id)->status, ProjectStatus::CLOSED->value);
- }
- public function test_project_start(): void
- {
- $project = Project::factory()->create();
- $response = $this->patch(route('project.start', ['project' => $project->id]));
- $response->assertStatus(204);
- $this->assertEquals(Project::find($project->id)->status, ProjectStatus::DOING->value);
- }
- public function test_project_pause(): void
- {
- $project = Project::factory()->create();
- $response = $this->patch(route('project.pause', ['project' => $project->id]));
- $response->assertStatus(204);
- $this->assertEquals(Project::find($project->id)->status, ProjectStatus::PAUSE->value);
- }
- public function test_project_postpone(): void
- {
- $project = Project::factory()->create();
- $response = $this->patch(route('project.postpone', ['project' => $project->id]), [
- 'begin' => Carbon::now()->toDateString(),
- 'end' => Carbon::now()->addDays(3)->toDateString(),
- 'available_days' => 3,
- ]);
- $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->plan_id = $plan->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]));
- $response->assertStatus(200)
- ->assertJsonStructure($this->simplePaginateResponseStructure([
- 'id', 'title', 'created_by', 'status'
- ]));
- }
- }
|