From df53f4799b26b0a2ab5cdd33a3c684e965b48ce3 Mon Sep 17 00:00:00 2001 From: "Khan, Sami" Date: Thu, 13 Aug 2020 09:50:15 -0500 Subject: [PATCH] feat: refactor status --- internal/network/network.go | 8 ++++---- internal/network/network_test.go | 19 +++++++------------ internal/{network => status}/status.go | 13 +++++++++---- internal/{network => status}/status_test.go | 20 ++++++++++++++------ main.go | 10 ++++++---- pkg/interfaces/interfaces.go | 3 +++ 6 files changed, 43 insertions(+), 30 deletions(-) rename internal/{network => status}/status.go (89%) rename internal/{network => status}/status_test.go (94%) diff --git a/internal/network/network.go b/internal/network/network.go index 0722b1e..7d8caf6 100644 --- a/internal/network/network.go +++ b/internal/network/network.go @@ -12,15 +12,15 @@ type Handler struct { NetworkService interfaces.NetworkService } -// GetNetwork handles /api/network -func (h Handler) GetNetwork(c echo.Context) error { +// Get handles /api/network +func (h Handler) Get(c echo.Context) error { var net interfaces.Network h.NetworkService.FindNetwork(&net) return c.JSON(http.StatusOK, net) } -// NewNetwork handles /api/network -func (h Handler) NewNetwork(c echo.Context) error { +// Create handles /api/network +func (h Handler) Create(c echo.Context) error { net := new(interfaces.Network) err := c.Bind(net) if err != nil || (net.Network == "" && net.ID == 0 && net.Links == nil && net.Sites == nil) { diff --git a/internal/network/network_test.go b/internal/network/network_test.go index bd5b0aa..7ff9edd 100644 --- a/internal/network/network_test.go +++ b/internal/network/network_test.go @@ -14,7 +14,6 @@ import ( type mockNetworkService struct { CreateNetworkFunc func(*interfaces.Network) FindNetworkFunc func(*interfaces.Network) - FindSiteFunc func(*interfaces.Site) } func (m *mockNetworkService) CreateNetwork(net *interfaces.Network) { @@ -25,10 +24,6 @@ func (m *mockNetworkService) FindNetwork(net *interfaces.Network) { m.FindNetworkFunc(net) } -func (m *mockNetworkService) FindSite(site *interfaces.Site) { - m.FindSiteFunc(site) -} - func getMockHandler() Handler { store := mockNetworkService{ CreateNetworkFunc: func(net *interfaces.Network) { @@ -42,7 +37,7 @@ func getMockHandler() Handler { return Handler{NetworkService: &store} } -func TestNewNetworkHandler(t *testing.T) { +func TestCreateHandler(t *testing.T) { app := echo.New() body := `{ "network": "test-network" }` @@ -52,31 +47,31 @@ func TestNewNetworkHandler(t *testing.T) { ctx := app.NewContext(req, rec) h := getMockHandler() - if assert.NoError(t, h.NewNetwork(ctx)) { + if assert.NoError(t, h.Create(ctx)) { assert.Equal(t, http.StatusCreated, rec.Code) - assert.Equal(t, "{\"id\":\"12345\"}", rec.Body.String()) + assert.Equal(t, "{\"id\":12345}\n", rec.Body.String()) } } -func TestNewNetworkError(t *testing.T) { +func TestCreateError(t *testing.T) { app := echo.New() req := httptest.NewRequest("POST", "/", strings.NewReader(``)) req.Header.Add(echo.HeaderContentType, echo.MIMEApplicationJSON) rec := httptest.NewRecorder() ctx := app.NewContext(req, rec) h := getMockHandler() - err := h.NewNetwork(ctx) + err := h.Create(ctx) assert.Error(t, err) assert.EqualError(t, err, echo.ErrBadRequest.Error()) } -func TestGetNetwork(t *testing.T) { +func TestGet(t *testing.T) { app := echo.New() req := httptest.NewRequest("GET", "/", nil) rec := httptest.NewRecorder() ctx := app.NewContext(req, rec) h := getMockHandler() - if assert.NoError(t, h.GetNetwork(ctx)) { + if assert.NoError(t, h.Get(ctx)) { assert.Equal(t, "{\"network\":\"test-network\",\"links\":null,\"sites\":null}\n", rec.Body.String()) } } diff --git a/internal/network/status.go b/internal/status/status.go similarity index 89% rename from internal/network/status.go rename to internal/status/status.go index deabe35..2000d96 100644 --- a/internal/network/status.go +++ b/internal/status/status.go @@ -1,4 +1,4 @@ -package network +package status import ( "crypto/tls" @@ -14,6 +14,11 @@ import ( "github.com/labstack/echo/v4" ) +// Handler handles Status commands +type Handler struct { + SiteService interfaces.SiteService +} + func updateStatus(s *interfaces.Site) error { url, err := url.Parse(s.URI) if err != nil { @@ -69,7 +74,7 @@ func testHTTP(s *interfaces.Site, u *url.URL) error { func getStatus(h Handler, id uint) (*interfaces.Site, error) { site := interfaces.Site{ID: id} - h.NetworkService.FindSite(&site) + h.SiteService.FindSite(&site) err := updateStatus(&site) if err != nil { return &site, err @@ -77,8 +82,8 @@ func getStatus(h Handler, id uint) (*interfaces.Site, error) { return &site, nil } -// GetStatus handles /api/status/:id -func (h Handler) GetStatus(c echo.Context) error { +// Get handles /api/status/:id +func (h Handler) Get(c echo.Context) error { val := c.Param("id") id, err := strconv.Atoi(val) if err != nil { diff --git a/internal/network/status_test.go b/internal/status/status_test.go similarity index 94% rename from internal/network/status_test.go rename to internal/status/status_test.go index 6b97e7f..3fd1162 100644 --- a/internal/network/status_test.go +++ b/internal/status/status_test.go @@ -1,4 +1,4 @@ -package network +package status import ( "fmt" @@ -13,6 +13,14 @@ import ( "github.com/stretchr/testify/assert" ) +type mockSiteService struct { + FindSiteFunc func(*interfaces.Site) +} + +func (m *mockSiteService) FindSite(site *interfaces.Site) { + m.FindSiteFunc(site) +} + func TestHttp(t *testing.T) { httpmock.ActivateNonDefault(&httpClient) defer httpmock.DeactivateAndReset() @@ -85,8 +93,8 @@ func TestUpdateStatus(t *testing.T) { func TestGetStatusHandler(t *testing.T) { app := echo.New() - var store mockNetworkService - h := Handler{NetworkService: &store} + var store mockSiteService + h := Handler{SiteService: &store} httpmock.ActivateNonDefault(&httpClient) defer httpmock.DeactivateAndReset() @@ -124,7 +132,7 @@ func TestGetStatusHandler(t *testing.T) { ctx.SetPath("/:id") ctx.SetParamNames("id") ctx.SetParamValues(c.ID) - err := h.GetStatus(ctx) + err := h.Get(ctx) if c.Error != nil { assert.EqualError(t, err, c.Error.Error(), fmt.Sprintf("%s should return %s", c.URI, c.Error.Error())) } @@ -135,8 +143,8 @@ func TestGetStatusHandler(t *testing.T) { } func TestGetStatus(t *testing.T) { - var store mockNetworkService - handler := Handler{NetworkService: &store} + var store mockSiteService + handler := Handler{SiteService: &store} httpmock.ActivateNonDefault(&httpClient) defer httpmock.DeactivateAndReset() diff --git a/main.go b/main.go index 1cd6e45..0317845 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "github.com/eiladin/go-simple-startpage/internal/config" "github.com/eiladin/go-simple-startpage/internal/database" "github.com/eiladin/go-simple-startpage/internal/network" + "github.com/eiladin/go-simple-startpage/internal/status" "github.com/eiladin/go-simple-startpage/pkg/interfaces" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" @@ -28,20 +29,21 @@ func setupMiddleware(app *echo.Echo) { } func setupRoutes(app echoswagger.ApiRoot, store *database.DB) { - handler := network.Handler{NetworkService: store} + netHandler := network.Handler{NetworkService: store} + statusHandler := status.Handler{SiteService: store} app.GET("/api/appconfig", config.GetAppConfig). AddResponse(http.StatusOK, "success", config.Configuration{}, nil) - app.GET("/api/network", handler.GetNetwork). + app.GET("/api/network", netHandler.Get). AddResponse(http.StatusOK, "success", interfaces.Network{}, nil). AddResponse(http.StatusInternalServerError, "error", nil, nil) - app.POST("/api/network", handler.NewNetwork). + app.POST("/api/network", netHandler.Create). AddParamBody(interfaces.Network{}, "body", "Network to add to the store", true). AddResponse(http.StatusOK, "success", interfaces.NetworkID{}, nil) - app.GET("/api/status/:id", handler.GetStatus). + app.GET("/api/status/:id", statusHandler.Get). AddParamPath(0, "id", "ID of site to get status for"). AddResponse(http.StatusOK, "success", interfaces.SiteStatus{}, nil). AddResponse(http.StatusBadRequest, "bad request", nil, nil). diff --git a/pkg/interfaces/interfaces.go b/pkg/interfaces/interfaces.go index f311bc8..5253258 100644 --- a/pkg/interfaces/interfaces.go +++ b/pkg/interfaces/interfaces.go @@ -10,6 +10,9 @@ import ( type NetworkService interface { CreateNetwork(net *Network) FindNetwork(net *Network) +} + +type SiteService interface { FindSite(site *Site) }