From 6478528ebca11b87b77974ec7a2867e890c86fb2 Mon Sep 17 00:00:00 2001 From: Khiet Tam Nguyen <86177399+nktnet1@users.noreply.github.com> Date: Fri, 17 Jan 2025 19:58:58 +1100 Subject: [PATCH] feat(api): add dummy root route pointing to docs (#1099) * feat(api): added dummy root route pointing to docs * test(api): root request test added * feat(api): added NoContent return for favicon from @gulien Co-authored-by: Julien Neuhart * test(api): added favicon * lint(api): fix format * refactor(api): use %s for favicon.ico for consistency with /health * test(api): added new recorder for each check * docs(api): consistent comment for favicon --------- Co-authored-by: Julien Neuhart --- pkg/modules/api/api.go | 16 ++++++++++++++++ pkg/modules/api/api_test.go | 19 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/pkg/modules/api/api.go b/pkg/modules/api/api.go index 7daa1892..7e4302d5 100644 --- a/pkg/modules/api/api.go +++ b/pkg/modules/api/api.go @@ -483,6 +483,22 @@ func (a *Api) Start() error { ) } + // Root route. + a.srv.GET( + a.rootPath, + func(c echo.Context) error { + return c.HTML(http.StatusOK, `Hey, this Gotenberg has no UI, it's an API. Head to the documentation to learn how to interact with it 🚀`) + }, + ) + + // Favicon route. + a.srv.GET( + fmt.Sprintf("%s%s", a.rootPath, "favicon.ico"), + func(c echo.Context) error { + return c.NoContent(http.StatusNoContent) + }, + ) + // Let's not forget the health check routes... checks := append(a.healthChecks, health.WithTimeout(a.timeout)) checker := health.NewChecker(checks...) diff --git a/pkg/modules/api/api_test.go b/pkg/modules/api/api_test.go index b32eace8..9a123176 100644 --- a/pkg/modules/api/api_test.go +++ b/pkg/modules/api/api_test.go @@ -866,15 +866,31 @@ func TestApi_Start(t *testing.T) { return } - // health requests. + // root request. recorder := httptest.NewRecorder() + rootRequest := httptest.NewRequest(http.MethodGet, "/", nil) + mod.srv.ServeHTTP(recorder, rootRequest) + if recorder.Code != http.StatusOK { + t.Errorf("expected %d status code but got %d", http.StatusOK, recorder.Code) + } + // favicon request. + recorder = httptest.NewRecorder() + faviconRequest := httptest.NewRequest(http.MethodGet, "/favicon.ico", nil) + mod.srv.ServeHTTP(recorder, faviconRequest) + if recorder.Code != http.StatusNoContent { + t.Errorf("expected %d status code but got %d", http.StatusNoContent, recorder.Code) + } + + // health requests. + recorder = httptest.NewRecorder() healthGetRequest := httptest.NewRequest(http.MethodGet, "/health", nil) mod.srv.ServeHTTP(recorder, healthGetRequest) if recorder.Code != http.StatusOK { t.Errorf("expected %d status code but got %d", http.StatusOK, recorder.Code) } + recorder = httptest.NewRecorder() healthHeadRequest := httptest.NewRequest(http.MethodHead, "/health", nil) mod.srv.ServeHTTP(recorder, healthHeadRequest) if recorder.Code != http.StatusOK { @@ -882,6 +898,7 @@ func TestApi_Start(t *testing.T) { } // version request. + recorder = httptest.NewRecorder() versionRequest := httptest.NewRequest(http.MethodGet, "/version", nil) mod.srv.ServeHTTP(recorder, versionRequest) if recorder.Code != http.StatusOK {