Skip to content

Commit

Permalink
Merge pull request #15 from eiladin/refactor-status
Browse files Browse the repository at this point in the history
Refactor status
  • Loading branch information
eiladin committed Aug 13, 2020
2 parents 9808d2b + df53f47 commit b589a3a
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 30 deletions.
8 changes: 4 additions & 4 deletions internal/network/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
19 changes: 7 additions & 12 deletions internal/network/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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" }`

Expand All @@ -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())
}
}
13 changes: 9 additions & 4 deletions internal/network/status.go → internal/status/status.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package network
package status

import (
"crypto/tls"
Expand All @@ -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 {
Expand Down Expand Up @@ -69,16 +74,16 @@ 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
}
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 {
Expand Down
20 changes: 14 additions & 6 deletions internal/network/status_test.go → internal/status/status_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package network
package status

import (
"fmt"
Expand All @@ -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()
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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()))
}
Expand All @@ -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()
Expand Down
10 changes: 6 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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).
Expand Down
3 changes: 3 additions & 0 deletions pkg/interfaces/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import (
type NetworkService interface {
CreateNetwork(net *Network)
FindNetwork(net *Network)
}

type SiteService interface {
FindSite(site *Site)
}

Expand Down

0 comments on commit b589a3a

Please sign in to comment.