getCalculator(); self::assertLessThanOrEqual(20, \strlen($sut->getId())); $this->assertEmptyModel($sut); } private function assertEmptyModel(CalculatorInterface $sut): void { $model = $this->getEmptyModel(); self::assertEquals('EUR', $model->getCurrency()); $sut->setModel($model); self::assertEquals(0, $sut->getTotal()); self::assertEquals(0, $sut->getVat()); self::assertEquals(0, $sut->getSubtotal()); self::assertEquals(0, $sut->getTimeWorked()); self::assertEquals(0, \count($sut->getEntries())); self::assertEquals(0, $sut->getTax()); } private function getEmptyModel(): InvoiceModel { $customer = new Customer('foo'); $template = new InvoiceTemplate(); $query = new InvoiceQuery(); return (new InvoiceModelFactoryFactory($this))->create()->createModel(new DebugFormatter(), $customer, $template, $query); } protected function assertDescription(CalculatorInterface $sut, $addProject = false, $addActivity = false): void { $customer = new Customer('foo'); $template = new InvoiceTemplate(); $template->setVat(19); $user = $this->getMockBuilder(User::class)->onlyMethods(['getId'])->disableOriginalConstructor()->getMock(); $user->method('getId')->willReturn(1); $project = $this->getMockBuilder(Project::class)->onlyMethods(['getId', 'getCustomer', 'getName'])->disableOriginalConstructor()->getMock(); $project->method('getId')->willReturn(1); $project->method('getCustomer')->willReturn($customer); $project->method('getName')->willReturn('project description'); $activity = $this->getMockBuilder(Activity::class)->onlyMethods(['getId', 'getProject', 'getName'])->disableOriginalConstructor()->getMock(); $activity->method('getId')->willReturn(1); $activity->method('getProject')->willReturn($project); $activity->method('getName')->willReturn('activity description'); $query = new InvoiceQuery(); if ($addProject === true) { $query->setProjects([$project]); } elseif ($addActivity === true) { $query->setActivities([$activity]); } $timesheet = new Timesheet(); $timesheet->setDescription('timesheet description'); $timesheet->setBegin(new \DateTime()); $timesheet->setDuration(3600); $timesheet->setRate(293.27); $timesheet->setUser($user); $timesheet->setActivity($activity); $timesheet->setProject($project); $model = (new InvoiceModelFactoryFactory($this))->create()->createModel(new DebugFormatter(), $customer, $template, $query); $model->addEntries([$timesheet]); $sut->setModel($model); self::assertEquals(1, \count($sut->getEntries())); /** @var Timesheet $result */ $result = $sut->getEntries()[0]; if ($addProject === true) { self::assertEquals('project description', $result->getDescription()); } elseif ($addActivity === true) { self::assertEquals('activity description', $result->getDescription()); } else { self::assertEquals('timesheet description', $result->getDescription()); } } }