diff --git a/app/Models/Service.php b/app/Models/Service.php index cc8074b74..aba4c6e56 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -626,7 +626,7 @@ public function extraFields() } $fields->put('Unleash', $data->toArray()); break; - case $image->contains('grafana'): + case $this->isGrafanaImage($image->toString()): $data = collect([]); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_GRAFANA')->first(); $data = $data->merge([ @@ -1380,6 +1380,15 @@ public function extraFields() return $fields; } + private function isGrafanaImage(string $image): bool + { + return in_array($image, [ + 'grafana/grafana', + 'grafana/grafana-oss', + 'grafana/grafana-enterprise', + ], true); + } + public function saveExtraFields($fields) { foreach ($fields as $field) { diff --git a/tests/Feature/ServiceExtraFieldsTest.php b/tests/Feature/ServiceExtraFieldsTest.php new file mode 100644 index 000000000..c90a76bc6 --- /dev/null +++ b/tests/Feature/ServiceExtraFieldsTest.php @@ -0,0 +1,47 @@ +create(); + $project = Project::factory()->create(['team_id' => $team->id]); + $environment = Environment::factory()->create(['project_id' => $project->id]); + $server = Server::factory()->create(); + $destination = StandaloneDocker::factory()->create(['server_id' => $server->id]); + + $service = Service::factory()->create([ + 'environment_id' => $environment->id, + 'server_id' => $server->id, + 'destination_id' => $destination->id, + 'destination_type' => StandaloneDocker::class, + ]); + + $service->applications()->create([ + 'name' => 'app', + 'image' => $image, + ]); + + return $service; +} + +it('only adds Grafana extra fields for Grafana server images', function (string $image, bool $shouldHaveGrafanaFields) { + $fields = serviceExtraFieldsTestServiceWithApplicationImage($image)->extraFields(); + + expect($fields->has('Grafana'))->toBe($shouldHaveGrafanaFields); +})->with([ + 'grafana oss' => ['grafana/grafana-oss:latest', true], + 'grafana enterprise' => ['grafana/grafana-enterprise:latest', true], + 'grafana default' => ['grafana/grafana:latest', true], + 'loki' => ['grafana/loki:latest', false], + 'promtail' => ['grafana/promtail:latest', false], + 'tempo' => ['grafana/tempo:latest', false], +]);