From 026e2601c4972861485fc10beb60b0fe8bf61b27 Mon Sep 17 00:00:00 2001 From: guillaume91 Date: Thu, 30 May 2024 17:03:32 +0200 Subject: [PATCH] wip --- .../app/Jobs/ProjectDownloadTiffJob.php | 2 +- .../app/Jobs/ProjectMosiacGeneratorJob.php | 2 ++ .../app/Livewire/Projects/MosaicManager.php | 2 +- laravel_app/app/Models/Project.php | 18 +++++------- .../components/mosaic-create-modal.blade.php | 4 +-- .../livewire/projects/tabs/settings.blade.php | 5 ++-- laravel_app/tests/Unit/Models/ProjectTest.php | 29 +++++++++++-------- 7 files changed, 33 insertions(+), 29 deletions(-) diff --git a/laravel_app/app/Jobs/ProjectDownloadTiffJob.php b/laravel_app/app/Jobs/ProjectDownloadTiffJob.php index 2dd3183..97654fa 100644 --- a/laravel_app/app/Jobs/ProjectDownloadTiffJob.php +++ b/laravel_app/app/Jobs/ProjectDownloadTiffJob.php @@ -48,7 +48,7 @@ public function handle(): void $process->run(); if (!$process->isSuccessful()) { - logger('error', $process->getErrorOutput()); + logger('error', [$process->getErrorOutput()]); } logger($process->getOutput()); diff --git a/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php b/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php index da81de6..023b7d0 100644 --- a/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php +++ b/laravel_app/app/Jobs/ProjectMosiacGeneratorJob.php @@ -12,6 +12,7 @@ use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; +use Illuminate\Process\Exceptions\ProcessFailedException; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Symfony\Component\Process\Process; @@ -76,6 +77,7 @@ public static function handleFor(Project $project, $year, $startWeekNumber) { logger("ProjectMosiacGeneratorJob::handleFor(week $startWeekNumber, year $year)"); if ($project->hasInvalidMosaicFor($year, $startWeekNumber)) { + logger("ProjecMosaicGeneratorJob::handleFor(week $startWeekNumber, year $year): InvalidMosaic."); return new NullJob(); } diff --git a/laravel_app/app/Livewire/Projects/MosaicManager.php b/laravel_app/app/Livewire/Projects/MosaicManager.php index 764862d..b4591bb 100644 --- a/laravel_app/app/Livewire/Projects/MosaicManager.php +++ b/laravel_app/app/Livewire/Projects/MosaicManager.php @@ -41,7 +41,7 @@ public function saveMosaic() ], [ 'path' => $this->project->getMosaicPath(), ]); - + logger(sprintf('in SaveMosaic: %s, week: %d, year: %d', $mosaic->name, $mosaic->week, $mosaic->year)); ProjectMosiacGeneratorJob::dispatch($mosaic); $this->showCreateModal = false; diff --git a/laravel_app/app/Models/Project.php b/laravel_app/app/Models/Project.php index 890bff3..3f62558 100644 --- a/laravel_app/app/Models/Project.php +++ b/laravel_app/app/Models/Project.php @@ -135,7 +135,7 @@ public function allMosaicsPresent(Carbon $endDate): bool { // end date is in the future if ($endDate->isFuture()) { - throw new \Exception('End date is in the future'); + throw new \Exception('Mosaic can be generated for the future. Change the end date.'); } $mosaicsNotPresentInFilesystem = $this->getMosaicFilenameListByEndDate($endDate) @@ -155,7 +155,7 @@ public function allMosaicsPresent(Carbon $endDate): bool throw new \Exception($message); } - public function getMosaicFilenameListByEndDate(Carbon $endDate): Collection + public static function getMosaicFilenameListByEndDate(Carbon $endDate): Collection { $result = collect([]); for ($i = 0; $i < 4; $i++) { @@ -304,7 +304,7 @@ public function scheduleReport($year = null, $week = null) Bus::chain([ Bus::batch($this->getFileDownloadsFor($year, $week)), Bus::batch($this->getMosaicsFor($year, $week)), - Bus::batch($this->getReportFor($year, $week, true)), + Bus::batch([$this->getReportFor($year, $week, true)]), ]) ->dispatch(); return "done"; @@ -319,30 +319,28 @@ public function getReportFor($year, $week, $sendMail = false) 'path' => 'reports/week_'.$week.'_'.$year.'.docx', ]); - return [new ProjectReportGeneratorJob($report, $sendMail)]; + return (new ProjectReportGeneratorJob($report, $sendMail)); } - public function getFileDownloadsFor($year, $startWeekNumber) + public function getFileDownloadsFor($year, $startWeekNumber):array { $endOfRange = now()->setISODate($year, $startWeekNumber)->endOfWeek(); $startOfRange = (clone $endOfRange)->subWeeks(3)->startOfWeek(); $dateRange = CarbonPeriod::create($startOfRange, $endOfRange); - $return = collect($dateRange) + return collect($dateRange) ->map(fn($date) => ProjectDownloadTiffJob::handleForDate($this, $date)) ->filter() ->toArray(); - return $return; } public function getMosaicsFor($year, $startWeekNumber) { - $return = collect(range(0, 3)) + logger(sprintf('in Get Mosaics for year %s week %d', $year, $startWeekNumber)); + return collect(range(0, 3)) ->map(fn($weekDiff) => ProjectMosiacGeneratorJob::handleFor($this, $year, $startWeekNumber - $weekDiff)) ->filter() ->toArray(); - - return $return; } } diff --git a/laravel_app/resources/views/components/mosaic-create-modal.blade.php b/laravel_app/resources/views/components/mosaic-create-modal.blade.php index 99881dc..fd318e5 100644 --- a/laravel_app/resources/views/components/mosaic-create-modal.blade.php +++ b/laravel_app/resources/views/components/mosaic-create-modal.blade.php @@ -18,11 +18,11 @@
- +
- +
diff --git a/laravel_app/resources/views/livewire/projects/tabs/settings.blade.php b/laravel_app/resources/views/livewire/projects/tabs/settings.blade.php index 492b27d..fa5679b 100644 --- a/laravel_app/resources/views/livewire/projects/tabs/settings.blade.php +++ b/laravel_app/resources/views/livewire/projects/tabs/settings.blade.php @@ -69,7 +69,7 @@ class="flex flex-col md:flex-row">
{{-- flex col--}}
@@ -79,8 +79,7 @@ class="flex flex-col md:w-2/3"
diff --git a/laravel_app/tests/Unit/Models/ProjectTest.php b/laravel_app/tests/Unit/Models/ProjectTest.php index 8dd10af..5734ecb 100644 --- a/laravel_app/tests/Unit/Models/ProjectTest.php +++ b/laravel_app/tests/Unit/Models/ProjectTest.php @@ -90,14 +90,15 @@ public function when_not_all_mosaics_are_present_it_should_return_an_exception() /** @test */ public function when_all_mosaics_are_present_it_should_return_true() { + // TODO CHeck with Martin the Leading Zero test $project = Mockery::mock(Project::class)->makePartial(); - $lastDate = Carbon::parse('2021-01-01'); + $lastDate = Carbon::parse('2021-01-22'); $project->shouldReceive('getMosaicList')->andReturn( collect([ "chemba/weekly_mosaic/week_53_2020.tif", - "chemba/weekly_mosaic/week_52_2020.tif", - "chemba/weekly_mosaic/week_51_2020.tif", - "chemba/weekly_mosaic/week_50_2020.tif", + "chemba/weekly_mosaic/week_03_2021.tif", + "chemba/weekly_mosaic/week_02_2021.tif", + "chemba/weekly_mosaic/week_01_2021.tif", ])); $this->assertTrue($project->allMosaicsPresent($lastDate)); @@ -126,7 +127,7 @@ public function when_not_mosaics_are_present_it_should_throw_an_exception_listin public function when_all_mosaics_are_present_is_called_with_future_date_it_should_throw_an_expection() { $this->expectException(\Exception::class); - $this->expectExceptionMessage('End date is in the future'); + $this->expectExceptionMessage('Mosaic can be generated for the future. Change the end date.'); $this->seed(); $project = Project::find(1); Carbon::setTestNow(Carbon::parse('2020-01-01')); @@ -139,9 +140,10 @@ public function when_all_mosaics_are_present_is_called_with_future_date_it_shoul public function getMosiacFileListByEndDate_should_return_four_filenames() { $this->seed(); + /* @var Project $project */ $project = Project::find(1); $lastDate = Carbon::parse('2021-01-01'); - $list = $project->getMosiacFilenameListByEndDate($lastDate); + $list = $project::getMosaicFilenameListByEndDate($lastDate); $this->assertCount(4, $list); $this->assertEquals([ "week_53_2020.tif", @@ -154,32 +156,35 @@ public function getMosiacFileListByEndDate_should_return_four_filenames() /** @test */ public function when_getFileDownloadsFor_is_called_it_returns_a_collection_of_seven_downloads_jobs() { + /* @var Project $project */ $project = Project::create([ 'name' => 'project_name', 'download_path' => 'project_download_path', ]); - $downloads = $project->getFileDownloadsFor(2023, 2); - $this->assertCount(3 * 7, $downloads); - $downloads->each(fn($job) => $this->assertInstanceOf(ProjectDownloadTiffJob::class, $job)); + $downloads = $project->getFileDownloadsFor(2023, 22); + $this->assertCount(4 * 7, $downloads); + collect($downloads)->each(fn($job) => $this->assertInstanceOf(ProjectDownloadTiffJob::class, $job)); } /** @test */ public function when_getMosaicsFor_is_called_it_returns_a_collection_of_seven_downloads_jobs() { + /* @var Project $project */ $project = Project::create([ 'name' => 'project_name', 'download_path' => 'project_download_path', ]); $mosaics = $project->getMosaicsFor(2023, 2); - $this->assertCount(3, $mosaics); - $mosaics->each(fn($job) => $this->assertInstanceOf(ProjectMosiacGeneratorJob::class, $job)); + $this->assertCount(4, $mosaics); + collect($mosaics)->each(fn($job) => $this->assertInstanceOf(ProjectMosiacGeneratorJob::class, $job)); } /** @test */ public function when_getReport_is_called_it_returns_a_jobs() { + /* @var Project $project*/ $project = Project::create([ 'name' => 'project_name', 'download_path' => 'project_download_path', @@ -230,7 +235,7 @@ public function when_friday_and_first_week_it_should_schedule($date, $day, $resu $this->assertEquals($result, $project->shouldSchedule()); } - public function scheduleDayProvider(){ + public static function scheduleDayProvider(){ return [ ['date' => '2024-03-01', 'day' => 'Friday', 'result' => true], ['date' => '2024-03-02', 'day' => 'Saturday', 'result' => false],