From 3c9d0a1ba52b91947459cc9252e0032195556df1 Mon Sep 17 00:00:00 2001 From: Sajo <75281007+sajotrei@users.noreply.github.com> Date: Sat, 26 Sep 2026 19:48:57 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20valida=20durata=20sessioni=20attivit?= =?UTF-8?q?=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/interventi/src/Components/Sessione.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/interventi/src/Components/Sessione.php b/modules/interventi/src/Components/Sessione.php index ddf96630b..7d7392b42 100755 --- a/modules/interventi/src/Components/Sessione.php +++ b/modules/interventi/src/Components/Sessione.php @@ -157,8 +157,13 @@ public function setTecnico($id_tecnico) public function getOreCalcolateAttribute() { $inizio = new \DateTime($this->orario_inizio); - $diff = $inizio->diff(new \DateTime($this->orario_fine)); + $fine = new \DateTime($this->orario_fine); + if ($fine <= $inizio) { + throw new \InvalidArgumentException('La data/ora di fine deve essere successiva alla data/ora di inizio.'); + } + + $diff = $inizio->diff($fine); $ore = $diff->i / 60 + $diff->h + ($diff->days * 24); return $ore; From 10cdceb0ed4fd03fa8dde3fae4ecd65d9497ecba Mon Sep 17 00:00:00 2001 From: Sajo <75281007+sajotrei@users.noreply.github.com> Date: Sat, 26 Sep 2026 19:49:05 +0200 Subject: [PATCH 2/2] test: copre validazione durata sessioni --- .../interventi/tests/SessioneDurataTest.php | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 modules/interventi/tests/SessioneDurataTest.php diff --git a/modules/interventi/tests/SessioneDurataTest.php b/modules/interventi/tests/SessioneDurataTest.php new file mode 100644 index 000000000..07be36f5c --- /dev/null +++ b/modules/interventi/tests/SessioneDurataTest.php @@ -0,0 +1,57 @@ +orario_inizio = '2026-09-02 14:30:00'; + $sessione->orario_fine = '2026-09-02 18:30:00'; + + $this->assertSame(4.0, $sessione->ore_calcolate); + } + + public function testDurataZeroNonValida(): void + { + $sessione = new Sessione(); + $sessione->orario_inizio = '2026-09-02 14:30:00'; + $sessione->orario_fine = '2026-09-02 14:30:00'; + + $this->expectException(\InvalidArgumentException::class); + $sessione->ore_calcolate; + } + + public function testFinePrecedenteNonValida(): void + { + $sessione = new Sessione(); + $sessione->orario_inizio = '2026-09-02 14:30:00'; + $sessione->orario_fine = '2026-09-02 13:30:00'; + + $this->expectException(\InvalidArgumentException::class); + $sessione->ore_calcolate; + } + + public function testCasoIssue1910NonValido(): void + { + $sessione = new Sessione(); + $sessione->orario_inizio = '2026-09-02 14:30:00'; + $sessione->orario_fine = '2026-08-27 18:30:00'; + + $this->expectException(\InvalidArgumentException::class); + $sessione->ore_calcolate; + } + + public function testDurataSuPiuGiorniValida(): void + { + $sessione = new Sessione(); + $sessione->orario_inizio = '2026-09-02 14:30:00'; + $sessione->orario_fine = '2026-09-03 10:30:00'; + + $this->assertSame(20.0, $sessione->ore_calcolate); + } +}