monthly budget, monthly report, unified report calculation (#2684)

This commit is contained in:
Kevin Papst
2021-08-06 18:38:41 +02:00
committed by GitHub
parent 21f785638c
commit cefd747e91
196 changed files with 5031 additions and 2167 deletions

View File

@@ -0,0 +1,48 @@
<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Tests\Entity;
use App\Entity\EntityWithBudget;
use PHPUnit\Framework\TestCase;
abstract class AbstractEntityTest extends TestCase
{
protected function assertBudget(EntityWithBudget $entityWithBudget)
{
$this->assertEquals(0.0, $entityWithBudget->getBudget());
$this->assertEquals(0, $entityWithBudget->getTimeBudget());
$this->assertNull($entityWithBudget->getBudgetType());
$this->assertFalse($entityWithBudget->isMonthlyBudget());
self::assertFalse($entityWithBudget->hasBudget());
self::assertFalse($entityWithBudget->hasTimeBudget());
$entityWithBudget->setBudget(12345.67);
$this->assertEquals(12345.67, $entityWithBudget->getBudget());
self::assertTrue($entityWithBudget->hasBudget());
self::assertFalse($entityWithBudget->hasTimeBudget());
$entityWithBudget->setTimeBudget(937321);
$this->assertEquals(937321, $entityWithBudget->getTimeBudget());
self::assertTrue($entityWithBudget->hasTimeBudget());
$entityWithBudget->setBudgetType('month');
$this->assertTrue($entityWithBudget->isMonthlyBudget());
$entityWithBudget->setBudgetType(null);
$this->assertFalse($entityWithBudget->isMonthlyBudget());
try {
$entityWithBudget->setBudgetType('foo');
$this->fail('Budget type only allows "month"');
} catch (\InvalidArgumentException $e) {
self::assertEquals('Unknown budget type: foo', $e->getMessage());
}
}
}

View File

@@ -18,12 +18,11 @@ use App\Export\Spreadsheet\ColumnDefinition;
use App\Export\Spreadsheet\Extractor\AnnotationExtractor;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Collections\Collection;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Entity\Activity
*/
class ActivityTest extends TestCase
class ActivityTest extends AbstractEntityTest
{
public function testDefaultValues()
{
@@ -36,16 +35,17 @@ class ActivityTest extends TestCase
$this->assertTrue($sut->isGlobal());
$this->assertNull($sut->getColor());
self::assertFalse($sut->hasColor());
$this->assertEquals(0.0, $sut->getBudget());
$this->assertEquals(0, $sut->getTimeBudget());
self::assertFalse($sut->hasBudget());
self::assertFalse($sut->hasTimeBudget());
$this->assertInstanceOf(Collection::class, $sut->getMetaFields());
$this->assertEquals(0, $sut->getMetaFields()->count());
$this->assertNull($sut->getMetaField('foo'));
$this->assertInstanceOf(Collection::class, $sut->getTeams());
}
public function testBudgets()
{
$this->assertBudget(new Activity());
}
public function testSetterAndGetter()
{
$sut = new Activity();
@@ -68,14 +68,6 @@ class ActivityTest extends TestCase
$this->assertNull($sut->getColor());
self::assertFalse($sut->hasColor());
$this->assertInstanceOf(Activity::class, $sut->setBudget(12345.67));
$this->assertEquals(12345.67, $sut->getBudget());
self::assertTrue($sut->hasBudget());
$this->assertInstanceOf(Activity::class, $sut->setTimeBudget(937321));
$this->assertEquals(937321, $sut->getTimeBudget());
self::assertTrue($sut->hasTimeBudget());
$this->assertTrue($sut->isGlobal());
$this->assertInstanceOf(Activity::class, $sut->setProject(new Project()));
$this->assertFalse($sut->isGlobal());

View File

@@ -17,12 +17,11 @@ use App\Export\Spreadsheet\ColumnDefinition;
use App\Export\Spreadsheet\Extractor\AnnotationExtractor;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Collections\Collection;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Entity\Customer
*/
class CustomerTest extends TestCase
class CustomerTest extends AbstractEntityTest
{
public function testDefaultValues()
{
@@ -49,10 +48,6 @@ class CustomerTest extends TestCase
self::assertNull($sut->getColor());
self::assertFalse($sut->hasColor());
self::assertEquals(0.0, $sut->getBudget());
self::assertEquals(0, $sut->getTimeBudget());
self::assertFalse($sut->hasBudget());
self::assertFalse($sut->hasTimeBudget());
self::assertInstanceOf(Collection::class, $sut->getMetaFields());
self::assertEquals(0, $sut->getMetaFields()->count());
self::assertNull($sut->getMetaField('foo'));
@@ -60,6 +55,11 @@ class CustomerTest extends TestCase
self::assertEquals(0, $sut->getTeams()->count());
}
public function testBudgets()
{
$this->assertBudget(new Customer());
}
public function testSetterAndGetter()
{
$sut = new Customer();
@@ -103,14 +103,6 @@ class CustomerTest extends TestCase
self::assertInstanceOf(Customer::class, $sut->setHomepage('https://www.example.com'));
self::assertEquals('https://www.example.com', $sut->getHomepage());
self::assertInstanceOf(Customer::class, $sut->setBudget(12345.67));
self::assertEquals(12345.67, $sut->getBudget());
self::assertTrue($sut->hasBudget());
self::assertInstanceOf(Customer::class, $sut->setTimeBudget(937321));
self::assertEquals(937321, $sut->getTimeBudget());
self::assertTrue($sut->hasTimeBudget());
self::assertInstanceOf(Customer::class, $sut->setVatId('ID 1234567890'));
self::assertEquals('ID 1234567890', $sut->getVatId());

View File

@@ -18,12 +18,11 @@ use App\Export\Spreadsheet\ColumnDefinition;
use App\Export\Spreadsheet\Extractor\AnnotationExtractor;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Collections\Collection;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Entity\Project
*/
class ProjectTest extends TestCase
class ProjectTest extends AbstractEntityTest
{
public function testDefaultValues()
{
@@ -39,10 +38,6 @@ class ProjectTest extends TestCase
self::assertTrue($sut->isVisible());
self::assertNull($sut->getColor());
self::assertFalse($sut->hasColor());
self::assertEquals(0.0, $sut->getBudget());
self::assertEquals(0, $sut->getTimeBudget());
self::assertFalse($sut->hasBudget());
self::assertFalse($sut->hasTimeBudget());
self::assertInstanceOf(Collection::class, $sut->getMetaFields());
self::assertEquals(0, $sut->getMetaFields()->count());
self::assertNull($sut->getMetaField('foo'));
@@ -51,6 +46,11 @@ class ProjectTest extends TestCase
self::assertTrue($sut->isVisibleAtDate(new \DateTime()));
}
public function testBudgets()
{
$this->assertBudget(new Project());
}
public function testSetterAndGetter()
{
$sut = new Project();
@@ -95,14 +95,6 @@ class ProjectTest extends TestCase
self::assertInstanceOf(Project::class, $sut->setVisible(false));
self::assertFalse($sut->isVisible());
self::assertInstanceOf(Project::class, $sut->setBudget(12345.67));
self::assertEquals(12345.67, $sut->getBudget());
self::assertTrue($sut->hasBudget());
self::assertInstanceOf(Project::class, $sut->setTimeBudget(937321));
self::assertEquals(937321, $sut->getTimeBudget());
self::assertTrue($sut->hasTimeBudget());
}
public function testMetaFields()