From b0158ba01ad5b0fbb15bb479ed752cb3ca62f44c Mon Sep 17 00:00:00 2001 From: Progi1984 Date: Wed, 7 Feb 2024 16:05:41 +0100 Subject: [PATCH] Fixed filters behavior in endpoint `/reports` --- src/Controller/ReportController.php | 17 ++++++----- tests/Controller/ReportControllerTest.php | 37 +++++++++++++++++++++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 644661ec..2423a1df 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -37,17 +37,18 @@ public function __construct( public function reports(Request $request): JsonResponse { $executionFilters = []; + $requestParams = $request->query->all(); - if ($request->query->has('filter_platform')) { - $executionFilters['platform'] = $request->query->get('filter_platform'); - } elseif ($request->query->has('filter_browser')) { - $executionFilters['platform'] = $request->query->get('filter_browser'); + if (isset($requestParams['filter_platform'])) { + $executionFilters['platform'] = $requestParams['filter_platform']; + } elseif (isset($requestParams['filter_browser'])) { + $executionFilters['platform'] = $requestParams['filter_browser']; } - if ($request->query->has('filter_campaign')) { - $executionFilters['campaign'] = $request->query->get('filter_campaign'); + if (isset($requestParams['filter_campaign'])) { + $executionFilters['campaign'] = $requestParams['filter_campaign']; } - if ($request->query->has('filter_version')) { - $executionFilters['version'] = $request->query->get('filter_version'); + if (isset($requestParams['filter_version'])) { + $executionFilters['version'] = $requestParams['filter_version']; } $executions = $this->executionRepository->findBy($executionFilters, [ 'start_date' => 'DESC', diff --git a/tests/Controller/ReportControllerTest.php b/tests/Controller/ReportControllerTest.php index d216c87f..e6ca9812 100644 --- a/tests/Controller/ReportControllerTest.php +++ b/tests/Controller/ReportControllerTest.php @@ -39,10 +39,15 @@ public function testCorsReports(): void $this->assertEquals($response->headers->get('access-control-allow-origin'), '*'); } - public function testReports(): void + /** + * @dataProvider dataProviderReportFilters + * + * @param array $query + */ + public function testReportsFilters(array $query, int $count): void { $client = static::createClient(); - $client->request('GET', '/reports'); + $client->request('GET', '/reports' . ($query ? '?' . http_build_query($query) : '')); $response = $client->getResponse(); $this->assertTrue($response->isSuccessful()); @@ -50,7 +55,7 @@ public function testReports(): void $this->assertEquals('application/json', $response->headers->get('content-type')); $content = json_decode($response->getContent(), true); - $this->assertGreaterThan(0, count($content)); + $this->assertEquals($count, count($content)); $datePrevious = null; foreach ($content as $item) { if ($datePrevious) { @@ -61,16 +66,28 @@ public function testReports(): void $this->assertIsInt($item['id']); $this->assertArrayHasKey('date', $item); $this->assertArrayHasKey('version', $item); + if (isset($query['filter_version'])) { + $this->assertEquals($item['version'], $query['filter_version']); + } $this->assertArrayHasKey('campaign', $item); $this->assertContains($item['campaign'], array_merge( ReportMochaImporter::FILTER_CAMPAIGNS, ReportPlaywrightImporter::FILTER_CAMPAIGNS )); + if (isset($query['filter_campaign[0]'])) { + $this->assertEquals($item['campaign'], $query['filter_campaign[0]']); + } $this->assertArrayHasKey('browser', $item); $this->assertContains($item['browser'], ReportMochaImporter::FILTER_PLATFORMS); $this->assertArrayHasKey('platform', $item); $this->assertContains($item['platform'], ReportMochaImporter::FILTER_PLATFORMS); $this->assertEquals($item['browser'], $item['platform']); + if (isset($query['filter_platform'])) { + $this->assertEquals($item['platform'], $query['filter_platform']); + } + if (isset($query['filter_browser'])) { + $this->assertEquals($item['platform'], $query['filter_browser']); + } $this->assertArrayHasKey('start_date', $item); $this->assertArrayHasKey('end_date', $item); $this->assertArrayHasKey('duration', $item); @@ -91,6 +108,20 @@ public function testReports(): void } } + /** + * @return array|int>> + */ + public static function dataProviderReportFilters(): array + { + return [ + [[], 6], + [['filter_campaign[0]' => 'functional'], 2], + [['filter_platform' => 'chromium'], 3], + [['filter_browser' => 'chromium'], 3], + [['filter_version' => 'develop'], 6], + ]; + } + public function testReportNotFound(): void { $client = static::createClient();