diff --git a/controller/controller_test.go b/controller/controller_test.go new file mode 100644 index 0000000..7c68186 --- /dev/null +++ b/controller/controller_test.go @@ -0,0 +1,35 @@ +package controller + +import ( + "net/http" + "net/http/httptest" + "os" + "strings" + "testing" + + "goweb/config" + "goweb/services" + + "github.com/labstack/echo/v4" +) + +var ( + c *services.Container +) + +func TestMain(m *testing.M) { + // Set the environment to test + config.SwitchEnvironment(config.EnvTest) + + // Create a new container + c = services.NewContainer() + + // Run tests + exitVal := m.Run() + os.Exit(exitVal) +} + +func newContext(url string) echo.Context { + req := httptest.NewRequest(http.MethodPost, url, strings.NewReader("")) + return c.Web.NewContext(req, httptest.NewRecorder()) +} diff --git a/controller/page_test.go b/controller/page_test.go new file mode 100644 index 0000000..1e5471e --- /dev/null +++ b/controller/page_test.go @@ -0,0 +1,78 @@ +package controller + +import ( + "net/http" + "testing" + + "goweb/context" + "goweb/msg" + + "github.com/gorilla/sessions" + "github.com/labstack/echo-contrib/session" + "github.com/labstack/echo/v4" + + echomw "github.com/labstack/echo/v4/middleware" + "github.com/stretchr/testify/assert" +) + +func TestNewPage(t *testing.T) { + ctx := newContext("/") + p := NewPage(ctx) + assert.Same(t, ctx, p.Context) + assert.NotNil(t, p.ToURL) + assert.Equal(t, "/", p.Path) + assert.Equal(t, "/", p.URL) + assert.Equal(t, http.StatusOK, p.StatusCode) + assert.Equal(t, NewPager(ctx), p.Pager) + assert.Empty(t, p.Headers) + assert.True(t, p.IsHome) + assert.False(t, p.IsAuth) + assert.Empty(t, p.CSRF) + assert.Empty(t, p.RequestID) + assert.False(t, p.Cache.Enabled) + + ctx = newContext("/abc?def=123") + ctx.Set(context.AuthenticatedUserKey, 1) + ctx.Set(echomw.DefaultCSRFConfig.ContextKey, "csrf") + p = NewPage(ctx) + assert.Equal(t, "/abc", p.Path) + assert.Equal(t, "/abc?def=123", p.URL) + assert.False(t, p.IsHome) + assert.True(t, p.IsAuth) + assert.Equal(t, "csrf", p.CSRF) +} + +func TestPage_GetMessages(t *testing.T) { + ctx := newContext("/") + p := NewPage(ctx) + + // Simulate an HTTP request through the session middleware to initiate the session + mw := session.Middleware(sessions.NewCookieStore([]byte("secret"))) + handler := mw(echo.NotFoundHandler) + assert.Error(t, handler(ctx)) + + // Set messages + msgTests := make(map[msg.Type][]string) + msgTests[msg.TypeWarning] = []string{ + "abc", + "def", + } + msgTests[msg.TypeInfo] = []string{ + "123", + "456", + } + for typ, values := range msgTests { + for _, value := range values { + msg.Set(ctx, typ, value) + } + } + + // Get the messages + for typ, values := range msgTests { + msgs := p.GetMessages(typ) + + for i, message := range msgs { + assert.Equal(t, values[i], string(message)) + } + } +}