setAmount(50); $fixture->setAmountRunning(10); $fixture->setUser($this->getUserByRole($role)); $fixture->setStartDate(new \DateTime()); $this->importFixture($fixture); } abstract protected function getReportUrl(): string; abstract protected function getReportExportUrl(): string; abstract protected function getBoxId(): string; public function testIsSecure(): void { $this->assertUrlIsSecured($this->getReportUrl()); } public static function getTestData(): array { return [ ['duration', 'Total'], ['rate', 'Total revenue'], ['internalRate', 'Internal price'], ]; } #[DataProvider('getTestData')] public function testUsersPeriodReport(string $dataType, string $title): void { $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $this->importReportingFixture(User::ROLE_SUPER_ADMIN); $this->assertAccessIsGranted($client, \sprintf('%s?date=12999119191&sumType=%s', $this->getReportUrl(), $dataType)); self::assertStringContainsString(\sprintf('
text()); } #[DataProvider('getTestData')] public function testUsersPeriodReportAsTeamlead(string $dataType, string $title): void { $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $this->importReportingFixture(User::ROLE_TEAMLEAD); $this->assertAccessIsGranted($client, \sprintf('%s?date=12999119191&sumType=%s', $this->getReportUrl(), $dataType)); self::assertStringContainsString(\sprintf('
count()); $cell = $client->getCrawler()->filterXPath("//th[contains(@class, 'reportDataTypeTitle')]"); self::assertEquals($title, $cell->text()); } #[DataProvider('getTestData')] public function testUsersPeriodReportExport(string $dataType, string $title): void { $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $this->importReportingFixture(User::ROLE_SUPER_ADMIN); $this->request($client, \sprintf('%s?date=12999119191&sumType=%s', $this->getReportExportUrl(), $dataType)); $response = $client->getResponse(); self::assertTrue($response->isSuccessful()); self::assertInstanceOf(BinaryFileResponse::class, $response); self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type')); self::assertStringContainsString('attachment; filename=kimai-export-users-', $response->headers->get('Content-Disposition')); self::assertStringContainsString('.xlsx', $response->headers->get('Content-Disposition')); } }