From 70f4bcadd794676a95d1ce64380be58eea689277 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 25 Dec 2019 14:57:13 +0800 Subject: [PATCH 1/3] Add validation for job_ids on clone jobs form other project --- app/Http/Controllers/Projects/JobsController.php | 11 +++++++---- tests/Feature/ManageJobsTest.php | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Projects/JobsController.php b/app/Http/Controllers/Projects/JobsController.php index 27a8eb9..9387dd4 100755 --- a/app/Http/Controllers/Projects/JobsController.php +++ b/app/Http/Controllers/Projects/JobsController.php @@ -52,15 +52,18 @@ class JobsController extends Controller public function store(CreateRequest $req, $projectId) { $job = $this->repo->createJob($req->except('_token'), $projectId); - flash(trans('job.created'), 'success'); + flash(__('job.created'), 'success'); return redirect()->route('jobs.show', $job->id); } - public function storeFromOtherProject(Request $req, $projectId) + public function storeFromOtherProject(Request $request, $projectId) { - $this->repo->createJobs($req->except('_token'), $projectId); - flash(trans('job.created_from_other_project'), 'success'); + $request->validate(['job_ids' => 'required|array']); + + $this->repo->createJobs($request->except('_token'), $projectId); + + flash(__('job.created_from_other_project'), 'success'); return redirect()->route('projects.jobs.index', $projectId); } diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index 18dbf73..f6c4799 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -199,6 +199,24 @@ class ManageJobsTest extends TestCase } /** @test */ + public function validate_clone_many_jobs_from_other_projects() + { + $user = $this->adminUserSigningIn(); + $customer = factory(Customer::class)->create(); + $projects = factory(Project::class, 2)->create(['customer_id' => $customer->id]); + $jobs = factory(Job::class, 3)->create(['project_id' => $projects[0]->id]); + $tasks1 = factory(Task::class, 3)->create(['job_id' => $jobs[0]->id]); + $tasks2 = factory(Task::class, 3)->create(['job_id' => $jobs[1]->id]); + + $this->visit(route('projects.jobs.add-from-other-project', [$projects[1]->id, 'project_id' => $projects[0]->id])); + + $this->submitForm(__('job.add'), []); + + $this->seePageIs(route('projects.jobs.add-from-other-project', [$projects[1]->id, 'project_id' => $projects[0]->id])); + $this->see(__('validation.required', ['attribute' => 'job ids'])); + } + + /** @test */ public function admin_can_see_unfinished_jobs_list() { $user = $this->adminUserSigningIn(); From 4139094808779c04c2f110b75a56b558e653533d Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 25 Dec 2019 15:02:54 +0800 Subject: [PATCH 2/3] Show validation errors on validation fails --- resources/lang/de/validation.php | 5 +++-- resources/lang/en/validation.php | 5 +++-- resources/lang/id/validation.php | 5 +++-- resources/views/projects/jobs/add-from-other-project.blade.php | 3 +++ tests/Feature/ManageJobsTest.php | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/resources/lang/de/validation.php b/resources/lang/de/validation.php index f8e9997..95dc689 100644 --- a/resources/lang/de/validation.php +++ b/resources/lang/de/validation.php @@ -90,7 +90,7 @@ return [ | */ - 'project' => [ + 'project' => [ 'customer_name' => [ 'required_without' => 'Customer name is required.', ], @@ -98,11 +98,12 @@ return [ 'required_without' => 'Customer email is required.', ], ], - 'agency' => [ + 'agency' => [ 'logo' => [ 'file_extension' => 'Please upload an image with .png format.', ], ], + 'select_one' => 'Select at least one item.', /* |-------------------------------------------------------------------------- diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index e4c4a49..04d4b29 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -90,7 +90,7 @@ return [ | */ - 'project' => [ + 'project' => [ 'customer_name' => [ 'required_without' => 'Customer name is required.', ], @@ -98,11 +98,12 @@ return [ 'required_without' => 'Customer email is required.', ], ], - 'agency' => [ + 'agency' => [ 'logo' => [ 'file_extension' => 'Please upload an image with .png format.', ], ], + 'select_one' => 'Select at least one item.', /* |-------------------------------------------------------------------------- diff --git a/resources/lang/id/validation.php b/resources/lang/id/validation.php index 64c9152..7c8cfaa 100644 --- a/resources/lang/id/validation.php +++ b/resources/lang/id/validation.php @@ -90,7 +90,7 @@ return [ | */ - 'project' => [ + 'project' => [ 'customer_name' => [ 'required_without' => 'Nama customer wajib diisi.', ], @@ -98,11 +98,12 @@ return [ 'required_without' => 'Email customer wajib diisi.', ], ], - 'agency' => [ + 'agency' => [ 'logo' => [ 'file_extension' => 'Silakan upload file format .png', ], ], + 'select_one' => 'Pilih setidaknya satu item.', /* |--------------------------------------------------------------------------------------- diff --git a/resources/views/projects/jobs/add-from-other-project.blade.php b/resources/views/projects/jobs/add-from-other-project.blade.php index c2d9290..2e72647 100755 --- a/resources/views/projects/jobs/add-from-other-project.blade.php +++ b/resources/views/projects/jobs/add-from-other-project.blade.php @@ -45,6 +45,9 @@ @else
{{ __('job.select_project') }}
@endif + @if ($errors->has('job_ids')) +
{{ __('validation.select_one') }}
+ @endif {{ Form::submit(__('job.add'), ['class' => 'btn btn-primary']) }} {{ Form::close() }} diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index f6c4799..cd43bd1 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -213,7 +213,7 @@ class ManageJobsTest extends TestCase $this->submitForm(__('job.add'), []); $this->seePageIs(route('projects.jobs.add-from-other-project', [$projects[1]->id, 'project_id' => $projects[0]->id])); - $this->see(__('validation.required', ['attribute' => 'job ids'])); + $this->see(__('validation.select_one')); } /** @test */ From 3f9bc1aa3b4edbe20b0ab1e57864306855aae928 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 25 Dec 2019 15:05:41 +0800 Subject: [PATCH 3/3] Fix: persist selected project --- resources/views/projects/jobs/add-from-other-project.blade.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/views/projects/jobs/add-from-other-project.blade.php b/resources/views/projects/jobs/add-from-other-project.blade.php index 2e72647..6422b15 100755 --- a/resources/views/projects/jobs/add-from-other-project.blade.php +++ b/resources/views/projects/jobs/add-from-other-project.blade.php @@ -17,7 +17,11 @@

{{ __('job.add_from_other_project') }}

{{ Form::open(['method' => 'get', 'class' => 'form-inline', 'style' => 'margin-bottom:20px']) }} - {!! FormField::select('project_id', $projects, ['label' => false, 'placeholder' => __('project.select')]) !!} + {!! FormField::select('project_id', $projects, [ + 'label' => false, + 'value' => request('project_id'), + 'placeholder' => __('project.select'), + ]) !!} {{ Form::submit(__('project.show_jobs'), ['class' => 'btn btn-default btn-sm']) }} {{ Form::close() }} @if ($selectedProject)