added multi-select for customer, project and activity (#1557)

This commit is contained in:
Kevin Papst
2020-03-16 14:06:26 +01:00
committed by GitHub
parent 6eeb01ad48
commit 4b1cfa5840
74 changed files with 1262 additions and 754 deletions

View File

@@ -73,9 +73,9 @@ abstract class AbstractCalculatorTest extends TestCase
$query = new InvoiceQuery();
if ($addProject === true) {
$query->setProject($project);
$query->setProjects([$project]);
} elseif ($addActivity === true) {
$query->setActivity($activity);
$query->setActivities([$activity]);
}
$timesheet = new Timesheet();

View File

@@ -105,7 +105,7 @@ class DateInvoiceCalculatorTest extends AbstractCalculatorTest
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];
$query = new InvoiceQuery();
$query->setProject($project1);
$query->setProjects([$project1]);
$model = new InvoiceModel(new DebugFormatter());
$model->setCustomer($customer);

View File

@@ -105,7 +105,7 @@ class ProjectInvoiceCalculatorTest extends AbstractCalculatorTest
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];
$query = new InvoiceQuery();
$query->setProject($project1);
$query->setProjects([$project1]);
$model = new InvoiceModel(new DebugFormatter());
$model->setCustomer($customer);

View File

@@ -29,7 +29,7 @@ class InvoiceModelActivityHydratorTest extends TestCase
$result = $sut->hydrate($model);
$this->assertModelStructure($result);
$model->getQuery()->setActivity(null);
$model->getQuery()->setActivities([]);
$result = $sut->hydrate($model);
self::assertEmpty($result);
}
@@ -41,6 +41,10 @@ class InvoiceModelActivityHydratorTest extends TestCase
'activity.name',
'activity.comment',
'activity.meta.foo-activity',
'activity.1.id',
'activity.1.name',
'activity.1.comment',
'activity.1.meta.foo-activity',
];
$givenKeys = array_keys($model);

View File

@@ -29,7 +29,7 @@ class InvoiceModelProjectHydratorTest extends TestCase
$result = $sut->hydrate($model);
$this->assertModelStructure($result);
$model->getQuery()->setProject(null);
$model->getQuery()->setProjects([]);
$result = $sut->hydrate($model);
self::assertEmpty($result);
}
@@ -51,6 +51,20 @@ class InvoiceModelProjectHydratorTest extends TestCase
'project.budget_time',
'project.budget_time_decimal',
'project.budget_time_minutes',
'project.1.id',
'project.1.name',
'project.1.comment',
'project.1.order_date',
'project.1.order_number',
'project.1.meta.foo-project',
'project.1.start_date',
'project.1.end_date',
'project.1.budget_money',
'project.1.budget_money_nc',
'project.1.budget_money_plain',
'project.1.budget_time',
'project.1.budget_time_decimal',
'project.1.budget_time_minutes',
];
$givenKeys = array_keys($model);

View File

@@ -41,7 +41,7 @@ class CsvRendererTest extends TestCase
public function getTestModel()
{
yield [$this->getInvoiceModel(), '€1,947.99', 6, 5, 1, 2, 2];
yield [$this->getInvoiceModel(), '€1,947.99', 6, 4, 1, 2, 2];
yield [$this->getInvoiceModelOneEntry(), '$293.27', 2, 1, 0, 1, 0];
}

View File

@@ -58,7 +58,7 @@ class DebugRendererTest extends TestCase
$response = $sut->render($document, $model);
$data = json_decode($response->getContent(), true);
$this->assertModelStructure($data['model'], $hasProject);
$this->assertModelStructure($data['model'], count($model->getQuery()->getProjects()), count($model->getQuery()->getActivities()));
$rows = $data['entries'];
$this->assertEquals($expectedRows, count($rows));
@@ -74,7 +74,7 @@ class DebugRendererTest extends TestCase
// TODO check values or formats?
}
protected function assertModelStructure(array $model, $hasProject = true)
protected function assertModelStructure(array $model, int $projectCounter = 0, int $activityCounter = 0)
{
$keys = [
'invoice.due_date',
@@ -133,7 +133,16 @@ class DebugRendererTest extends TestCase
'testFromModelHydrator'
];
if ($hasProject) {
if ($activityCounter > 1) {
$keys = array_merge($keys, [
'activity.1.id',
'activity.1.name',
'activity.1.comment',
'activity.1.meta.foo-activity',
]);
}
if ($projectCounter > 0) {
$keys = array_merge($keys, [
'project.id',
'project.name',
@@ -150,6 +159,24 @@ class DebugRendererTest extends TestCase
'project.budget_time_decimal',
'project.budget_time_minutes',
]);
if ($projectCounter > 1) {
$keys = array_merge($keys, [
'project.1.id',
'project.1.name',
'project.1.comment',
'project.1.order_date',
'project.1.order_number',
'project.1.meta.foo-project',
'project.1.start_date',
'project.1.end_date',
'project.1.budget_money',
'project.1.budget_money_nc',
'project.1.budget_money_plain',
'project.1.budget_time',
'project.1.budget_time_decimal',
'project.1.budget_time_minutes',
]);
}
}
$givenKeys = array_keys($model);

View File

@@ -126,6 +126,16 @@ trait RendererTestTrait
$activity->setProject($project);
$activity->setMetaField((new ActivityMeta())->setName('foo-activity')->setValue('bar-activity')->setIsVisible(true));
$project2 = new Project();
$project2->setName('project 2 name');
$project2->setCustomer($customer);
$project2->setMetaField((new ProjectMeta())->setName('foo-project')->setValue('bar-project2')->setIsVisible(true));
$activity2 = new Activity();
$activity2->setName('activity 1 description');
$activity2->setProject($project2);
$activity2->setMetaField((new ActivityMeta())->setName('foo-activity')->setValue('bar-activity2')->setIsVisible(true));
$userMethods = ['getId', 'getPreferenceValue', 'getUsername'];
$user1 = $this->getMockBuilder(User::class)->onlyMethods($userMethods)->disableOriginalConstructor()->getMock();
$user1->method('getId')->willReturn(1);
@@ -165,8 +175,8 @@ trait RendererTestTrait
->setDuration(1800)
->setRate(111.11)
->setUser($user1)
->setActivity($activity)
->setProject($project)
->setActivity($activity2)
->setProject($project2)
->setBegin(new \DateTime())
->setEnd(new \DateTime())
->setMetaField((new TimesheetMeta())->setName('foo-timesheet')->setValue('bar-timesheet1')->setIsVisible(true))
@@ -198,10 +208,10 @@ trait RendererTestTrait
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5];
$query = new InvoiceQuery();
$query->setActivity($activity);
$query->setActivities([$activity, $activity2]);
$query->setBegin(new \DateTime());
$query->setEnd(new \DateTime());
$query->setProject($project);
$query->setProjects([$project, $project2]);
$model = new InvoiceModel($this->getFormatter());
$model->setCustomer($customer);
@@ -272,7 +282,7 @@ trait RendererTestTrait
$entries = [$timesheet];
$query = new InvoiceQuery();
$query->setActivity($activity);
$query->addActivity($activity);
$query->setBegin(new \DateTime());
$query->setEnd(new \DateTime());

View File

@@ -67,6 +67,6 @@ class TwigRendererTest extends KernelTestCase
$this->assertStringContainsString('<h2 class="page-header">
<span contenteditable="true">a very *long* test invoice / template title with [special] character</span>
</h2>', $content);
$this->assertEquals(5, substr_count($content, 'activity description'));
$this->assertEquals(4, substr_count($content, 'activity description'));
}
}