Preparations for coming features (#1818)
* removed unused convert_tz code * added timestampable listener to support automatic updates of change columns * added modified_at, billable and category timesheet fields * new timesheet API query parameter modified_after
This commit is contained in:
@@ -141,6 +141,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
|
||||
|
||||
public function testGetCollectionWithQuery()
|
||||
{
|
||||
$modifiedAfter = new \DateTime('-1 hour');
|
||||
$begin = new \DateTime('first day of this month');
|
||||
$begin->setTime(0, 0, 0);
|
||||
$end = new \DateTime('last day of this month');
|
||||
@@ -155,6 +156,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
|
||||
'order' => 'DESC',
|
||||
'orderBy' => 'rate',
|
||||
'active' => 0,
|
||||
'modified_after' => $modifiedAfter->format(self::DATE_FORMAT_HTML5),
|
||||
'begin' => $begin->format(self::DATE_FORMAT_HTML5),
|
||||
'end' => $end->format(self::DATE_FORMAT_HTML5),
|
||||
'exported' => 0,
|
||||
|
||||
@@ -33,6 +33,8 @@ class TimesheetTest extends TestCase
|
||||
self::assertNull($sut->getId());
|
||||
self::assertNull($sut->getBegin());
|
||||
self::assertNull($sut->getEnd());
|
||||
self::assertTrue($sut->isBillable());
|
||||
self::assertNull($sut->getModifiedAt());
|
||||
self::assertSame(0, $sut->getDuration());
|
||||
self::assertNull($sut->getUser());
|
||||
self::assertNull($sut->getActivity());
|
||||
@@ -140,4 +142,34 @@ class TimesheetTest extends TestCase
|
||||
self::assertEquals(3, $sut->getMetaFields()->count());
|
||||
self::assertCount(2, $sut->getVisibleMetaFields());
|
||||
}
|
||||
|
||||
public function testBillable()
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertTrue($sut->isBillable());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setBillable(false));
|
||||
self::assertFalse($sut->isBillable());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setBillable(true));
|
||||
self::assertTrue($sut->isBillable());
|
||||
}
|
||||
|
||||
public function testCategory()
|
||||
{
|
||||
$sut = new Timesheet();
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::HOLIDAY));
|
||||
self::assertEquals('holiday', $sut->getCategory());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::WORK));
|
||||
self::assertEquals('work', $sut->getCategory());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::SICKNESS));
|
||||
self::assertEquals('sickness', $sut->getCategory());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::PARENTAL));
|
||||
self::assertEquals('parental', $sut->getCategory());
|
||||
self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::OVERTIME));
|
||||
self::assertEquals('overtime', $sut->getCategory());
|
||||
|
||||
self::expectException(\InvalidArgumentException::class);
|
||||
self::expectExceptionMessage('Invalid timesheet category "foo" given, expected one of: work, holiday, sickness, parental, overtime');
|
||||
|
||||
$sut->setCategory('foo');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace App\Tests\Repository\Query;
|
||||
|
||||
use App\Repository\Query\InvoiceQuery;
|
||||
use App\Repository\Query\TimesheetQuery;
|
||||
|
||||
/**
|
||||
* @covers \App\Repository\Query\InvoiceQuery
|
||||
@@ -33,13 +34,19 @@ class InvoiceQueryTest extends TimesheetQueryTest
|
||||
$this->assertState($sut);
|
||||
$this->assertExported($sut);
|
||||
$this->assertMarkAsExported($sut);
|
||||
$this->assertModifiedAfter($sut);
|
||||
|
||||
self::assertEquals(TimesheetQuery::STATE_BILLABLE, $sut->getBillable());
|
||||
self::assertTrue($sut->isBillable());
|
||||
self::assertFalse($sut->isNotBillable());
|
||||
$this->assertBillable($sut);
|
||||
}
|
||||
|
||||
protected function assertMarkAsExported(InvoiceQuery $sut)
|
||||
{
|
||||
$this->assertFalse($sut->isMarkAsExported());
|
||||
self::assertFalse($sut->isMarkAsExported());
|
||||
|
||||
$sut->setMarkAsExported(true);
|
||||
$this->assertTrue($sut->isMarkAsExported());
|
||||
self::assertTrue($sut->isMarkAsExported());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,23 +35,29 @@ class TimesheetQueryTest extends BaseQueryTest
|
||||
$this->assertState($sut);
|
||||
$this->assertExported($sut);
|
||||
$this->assertSearchTerm($sut);
|
||||
$this->assertModifiedAfter($sut);
|
||||
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getBillable());
|
||||
self::assertFalse($sut->isBillable());
|
||||
self::assertFalse($sut->isNotBillable());
|
||||
$this->assertBillable($sut);
|
||||
|
||||
$this->assertResetByFormError(new TimesheetQuery(), 'begin', 'DESC');
|
||||
}
|
||||
|
||||
protected function assertUser(TimesheetQuery $sut)
|
||||
{
|
||||
$this->assertNull($sut->getUser());
|
||||
self::assertNull($sut->getUser());
|
||||
|
||||
$expected = new User();
|
||||
$expected->setUsername('foo-bar');
|
||||
$sut->setUser($expected);
|
||||
$this->assertEquals($expected, $sut->getUser());
|
||||
self::assertInstanceOf(TimesheetQuery::class, $sut->setUser($expected));
|
||||
self::assertEquals($expected, $sut->getUser());
|
||||
}
|
||||
|
||||
protected function assertUsers(TimesheetQuery $sut)
|
||||
{
|
||||
$this->assertEmpty($sut->getUsers());
|
||||
self::assertEmpty($sut->getUsers());
|
||||
|
||||
$user = $this->getMockBuilder(User::class)->disableOriginalConstructor()->getMock();
|
||||
$user->method('getId')->willReturn(1);
|
||||
@@ -70,43 +76,86 @@ class TimesheetQueryTest extends BaseQueryTest
|
||||
$sut->addUser($user);
|
||||
$sut->removeUser($user);
|
||||
|
||||
$this->assertCount(2, $sut->getUsers());
|
||||
self::assertCount(2, $sut->getUsers());
|
||||
}
|
||||
|
||||
protected function assertState(TimesheetQuery $sut)
|
||||
{
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
self::assertFalse($sut->isRunning());
|
||||
self::assertFalse($sut->isStopped());
|
||||
|
||||
$sut->setState(PHP_INT_MAX);
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
self::assertInstanceOf(TimesheetQuery::class, $sut->setState(PHP_INT_MAX));
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
|
||||
$sut->setState(TimesheetQuery::STATE_STOPPED);
|
||||
$this->assertEquals(TimesheetQuery::STATE_STOPPED, $sut->getState());
|
||||
self::assertEquals(TimesheetQuery::STATE_STOPPED, $sut->getState());
|
||||
self::assertFalse($sut->isRunning());
|
||||
self::assertTrue($sut->isStopped());
|
||||
|
||||
$sut->setState(TimesheetQuery::STATE_RUNNING);
|
||||
$this->assertEquals(TimesheetQuery::STATE_RUNNING, $sut->getState());
|
||||
self::assertEquals(TimesheetQuery::STATE_RUNNING, $sut->getState());
|
||||
self::assertTrue($sut->isRunning());
|
||||
self::assertFalse($sut->isStopped());
|
||||
|
||||
$sut->setState(TimesheetQuery::STATE_ALL);
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getState());
|
||||
}
|
||||
|
||||
protected function assertExported(TimesheetQuery $sut)
|
||||
{
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
self::assertFalse($sut->isExported());
|
||||
self::assertFalse($sut->isNotExported());
|
||||
|
||||
$sut->setExported(PHP_INT_MAX);
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
self::assertInstanceOf(TimesheetQuery::class, $sut->setExported(PHP_INT_MAX));
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
|
||||
$sut->setExported(TimesheetQuery::STATE_EXPORTED);
|
||||
$this->assertEquals(TimesheetQuery::STATE_EXPORTED, $sut->getExported());
|
||||
self::assertEquals(TimesheetQuery::STATE_EXPORTED, $sut->getExported());
|
||||
self::assertTrue($sut->isExported());
|
||||
self::assertFalse($sut->isNotExported());
|
||||
|
||||
$sut->setExported(TimesheetQuery::STATE_NOT_EXPORTED);
|
||||
$this->assertEquals(TimesheetQuery::STATE_NOT_EXPORTED, $sut->getExported());
|
||||
self::assertEquals(TimesheetQuery::STATE_NOT_EXPORTED, $sut->getExported());
|
||||
self::assertFalse($sut->isExported());
|
||||
self::assertTrue($sut->isNotExported());
|
||||
|
||||
$sut->setExported(TimesheetQuery::STATE_ALL);
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
|
||||
$sut->setExported('02');
|
||||
$this->assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getExported());
|
||||
}
|
||||
|
||||
protected function assertModifiedAfter(TimesheetQuery $sut)
|
||||
{
|
||||
self::assertNull($sut->getModifiedAfter());
|
||||
$date = new \DateTime('-3 hours');
|
||||
|
||||
self::assertInstanceOf(TimesheetQuery::class, $sut->setModifiedAfter($date));
|
||||
self::assertNotNull($sut->getModifiedAfter()); // just here to fix a PHPStan issue
|
||||
self::assertSame($date, $sut->getModifiedAfter());
|
||||
}
|
||||
|
||||
protected function assertBillable(TimesheetQuery $sut)
|
||||
{
|
||||
self::assertInstanceOf(TimesheetQuery::class, $sut->setBillable(TimesheetQuery::STATE_ALL));
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getBillable());
|
||||
self::assertFalse($sut->isBillable());
|
||||
self::assertFalse($sut->isNotBillable());
|
||||
|
||||
$sut->setBillable(PHP_INT_MAX);
|
||||
self::assertEquals(TimesheetQuery::STATE_ALL, $sut->getBillable());
|
||||
|
||||
$sut->setBillable(TimesheetQuery::STATE_BILLABLE);
|
||||
self::assertEquals(TimesheetQuery::STATE_BILLABLE, $sut->getBillable());
|
||||
self::assertTrue($sut->isBillable());
|
||||
self::assertFalse($sut->isNotBillable());
|
||||
|
||||
$sut->setBillable(TimesheetQuery::STATE_NOT_BILLABLE);
|
||||
self::assertEquals(TimesheetQuery::STATE_NOT_BILLABLE, $sut->getBillable());
|
||||
self::assertFalse($sut->isBillable());
|
||||
self::assertTrue($sut->isNotBillable());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user