mirror of
https://github.com/Karaka-Management/oms-HumanResourceTimeRecording.git
synced 2026-01-11 20:08:40 +00:00
135 lines
5.1 KiB
PHP
Executable File
135 lines
5.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Jingga
|
|
*
|
|
* PHP Version 8.2
|
|
*
|
|
* @package tests
|
|
* @copyright Dennis Eichhorn
|
|
* @license OMS License 2.0
|
|
* @version 1.0.0
|
|
* @link https://jingga.app
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Modules\HumanResourceTimeRecording\tests\Models;
|
|
|
|
use Modules\HumanResourceTimeRecording\Models\ClockingStatus;
|
|
use Modules\HumanResourceTimeRecording\Models\ClockingType;
|
|
use Modules\HumanResourceTimeRecording\Models\Session;
|
|
use Modules\HumanResourceTimeRecording\Models\SessionElement;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
#[\PHPUnit\Framework\Attributes\CoversClass(\Modules\HumanResourceTimeRecording\Models\Session::class)]
|
|
final class SessionTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
private Session $session;
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function setUp() : void
|
|
{
|
|
$this->session = new Session();
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\Group('module')]
|
|
public function testDefault() : void
|
|
{
|
|
self::assertEquals(0, $this->session->id);
|
|
self::assertEquals(0, $this->session->busy);
|
|
self::assertEquals(0, $this->session->getBreak());
|
|
self::assertEquals([], $this->session->sessionElements);
|
|
self::assertEquals(ClockingType::NO_DATA, $this->session->type);
|
|
self::assertEquals(ClockingStatus::START, $this->session->getStatus());
|
|
self::assertEquals((new \DateTime('now'))->format('Y-m-d'), $this->session->start->format('Y-m-d'));
|
|
self::assertNull($this->session->end);
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\Group('module')]
|
|
public function testStatusInputOutput() : void
|
|
{
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05'));
|
|
$element->status = ClockingStatus::START;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-06'));
|
|
$element->status = ClockingStatus::PAUSE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-07'));
|
|
$element->status = ClockingStatus::CONTINUE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$this->session->recalculate();
|
|
|
|
self::assertEquals(ClockingStatus::CONTINUE, $this->session->getStatus());
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\Group('module')]
|
|
public function testBusyBreakInputOutput() : void
|
|
{
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 02:00:00'));
|
|
$element->status = ClockingStatus::START;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
// this is ignored because the session is already started
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 03:00:00'));
|
|
$element->status = ClockingStatus::START;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 04:00:00'));
|
|
$element->status = ClockingStatus::PAUSE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 04:30:00'));
|
|
$element->status = ClockingStatus::CONTINUE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 07:00:00'));
|
|
$element->status = ClockingStatus::PAUSE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 08:30:00'));
|
|
$element->status = ClockingStatus::CONTINUE;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 11:00:00'));
|
|
$element->status = ClockingStatus::END;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
// this is ignored because the session is already stopped
|
|
$element = new SessionElement(null, new \DateTime('2021-10-05 11:30:00'));
|
|
$element->status = ClockingStatus::END;
|
|
$this->session->sessionElements[] = $element;
|
|
|
|
$this->session->recalculate();
|
|
|
|
self::assertEquals(2 * 60 * 60, $this->session->getBreak());
|
|
self::assertEquals(7 * 60 * 60, $this->session->busy);
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\Group('module')]
|
|
public function testSerialize() : void
|
|
{
|
|
$this->session->type = ClockingType::VACATION;
|
|
|
|
$serialized = $this->session->jsonSerialize();
|
|
unset($serialized['start']);
|
|
unset($serialized['employee']);
|
|
|
|
self::assertEquals(
|
|
[
|
|
'id' => 0,
|
|
'end' => null,
|
|
'busy' => 0,
|
|
'type' => ClockingType::VACATION,
|
|
'elements' => [],
|
|
],
|
|
$serialized
|
|
);
|
|
}
|
|
}
|