diff --git a/README.md b/README.md
index d3e8a9bc..006eea5d 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
Statup - Web and App Status Monitoring for Any Type of Project
-View Wiki | Demo
Docker | EC2 | Heroku | Mac | Linux | Windows | Plugins
+View Wiki | Demo
API | Docker | EC2 | Heroku | Mac | Linux | Windows | Plugins
# Statup - Status Page & Monitoring Server
diff --git a/cmd/main_test.go b/cmd/main_test.go
index ea101f71..f91b1b81 100644
--- a/cmd/main_test.go
+++ b/cmd/main_test.go
@@ -551,7 +551,7 @@ func RunLoginHandler(t *testing.T) {
assert.Nil(t, err)
rr := httptest.NewRecorder()
route.ServeHTTP(rr, req)
- assert.Equal(t, 303, rr.Result().StatusCode)
+ assert.Equal(t, 200, rr.Result().StatusCode)
assert.True(t, handlers.IsAuthenticated(req))
}
diff --git a/handlers/api_handlers_test.go b/handlers/api_handlers_test.go
index 4bb5464c..c2aa3c98 100644
--- a/handlers/api_handlers_test.go
+++ b/handlers/api_handlers_test.go
@@ -18,6 +18,7 @@ package handlers
import (
"encoding/json"
"github.com/hunterlong/statup/core"
+ "github.com/hunterlong/statup/source"
"github.com/hunterlong/statup/types"
"github.com/hunterlong/statup/utils"
"github.com/stretchr/testify/assert"
@@ -34,13 +35,39 @@ const (
NEW_TCP_SERVICE = `{"name": "Google DNS", "domain": "8.8.8.8", "expected": "", "check_interval": 5, "type": "tcp"}`
)
-func injectDatabase() {
+var (
+ dir string
+)
+
+func init() {
+ dir = utils.Directory
+ utils.InitLogs()
+ source.Assets()
+}
+
+func loadDatabase() {
core.NewCore()
- core.Configs = new(core.DbConfig)
- core.Configs.DbConn = "sqlite"
+ core.LoadConfig(dir)
+ core.Configs = &core.DbConfig{DbConfig: &types.DbConfig{
+ DbConn: "sqlite",
+ Location: dir,
+ }}
+ core.Configs.Connect(false, utils.Directory)
core.CoreApp.DbConnection = "sqlite"
core.CoreApp.Version = "DEV"
- core.Configs.Connect(false, utils.Directory)
+ core.Configs.Save()
+}
+
+func createDatabase() {
+ core.Configs.DropDatabase()
+ core.Configs.CreateDatabase()
+ core.InitApp()
+}
+
+func resetDatabase() {
+ core.Configs.DropDatabase()
+ core.Configs.CreateDatabase()
+ core.Configs.SeedDatabase()
core.InitApp()
}
@@ -53,6 +80,10 @@ func Clean() {
func TestInit(t *testing.T) {
Clean()
+ loadDatabase()
+ resetDatabase()
+ loadDatabase()
+ core.InitApp()
}
func formatJSON(res string, out interface{}) {
@@ -60,7 +91,7 @@ func formatJSON(res string, out interface{}) {
}
func TestApiIndexHandler(t *testing.T) {
- t.SkipNow()
+
rr, err := httpRequestAPI(t, "GET", "/api", nil)
assert.Nil(t, err)
body := rr.Body.String()
@@ -68,12 +99,12 @@ func TestApiIndexHandler(t *testing.T) {
var obj types.Core
formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Equal(t, "Tester", obj.Name)
+ assert.Equal(t, "Awesome Status", obj.Name)
assert.Equal(t, "sqlite", obj.DbConnection)
}
func TestApiAllServicesHandlerHandler(t *testing.T) {
- t.SkipNow()
+
rr, err := httpRequestAPI(t, "GET", "/api/services", nil)
assert.Nil(t, err)
body := rr.Body.String()
@@ -86,7 +117,7 @@ func TestApiAllServicesHandlerHandler(t *testing.T) {
}
func TestApiServiceHandler(t *testing.T) {
- t.SkipNow()
+
rr, err := httpRequestAPI(t, "GET", "/api/services/1", nil)
assert.Nil(t, err)
body := rr.Body.String()
@@ -99,7 +130,7 @@ func TestApiServiceHandler(t *testing.T) {
}
func TestApiCreateServiceHandler(t *testing.T) {
- t.SkipNow()
+
rr, err := httpRequestAPI(t, "POST", "/api/services", strings.NewReader(NEW_HTTP_SERVICE))
assert.Nil(t, err)
body := rr.Body.String()
@@ -113,20 +144,30 @@ func TestApiCreateServiceHandler(t *testing.T) {
}
func TestApiUpdateServiceHandler(t *testing.T) {
- t.SkipNow()
- rr, err := httpRequestAPI(t, "POST", "/api/services/1", strings.NewReader(UPDATED_HTTP_SERVICE))
+ data := `{
+ "name": "Updated Service",
+ "domain": "https://google.com",
+ "expected": "",
+ "expected_status": 200,
+ "check_interval": 60,
+ "type": "http",
+ "method": "GET",
+ "post_data": "",
+ "port": 0,
+ "timeout": 10,
+ "order_id": 0}`
+ rr, err := httpRequestAPI(t, "POST", "/api/services/1", strings.NewReader(data))
assert.Nil(t, err)
body := rr.Body.String()
t.Log(body)
var obj types.Service
formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Equal(t, "Google Website", obj.Name)
+ assert.Equal(t, "Updated Service", obj.Name)
assert.Equal(t, "https://google.com", obj.Domain)
}
func TestApiDeleteServiceHandler(t *testing.T) {
- t.SkipNow()
rr, err := httpRequestAPI(t, "DELETE", "/api/services/1", nil)
assert.Nil(t, err)
body := rr.Body.String()
@@ -134,12 +175,12 @@ func TestApiDeleteServiceHandler(t *testing.T) {
var obj ApiResponse
formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Equal(t, "Google Website", obj.Method)
- assert.Equal(t, "https://google.com", obj.Status)
+ assert.Equal(t, "delete", obj.Method)
+ assert.Equal(t, "success", obj.Status)
}
func TestApiAllUsersHandler(t *testing.T) {
- t.SkipNow()
+
rr, err := httpRequestAPI(t, "GET", "/api/users", nil)
assert.Nil(t, err)
body := rr.Body.String()
@@ -147,46 +188,62 @@ func TestApiAllUsersHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
var obj []types.User
formatJSON(body, &obj)
- assert.Equal(t, "Google", obj[0].Admin)
- assert.Equal(t, "https://google.com", obj[0].Username)
+ assert.Equal(t, true, obj[0].Admin)
+ assert.Equal(t, "admin", obj[0].Username)
}
func TestApiCreateUserHandler(t *testing.T) {
- t.SkipNow()
- rr, err := httpRequestAPI(t, "POST", "/api/users", nil)
+ data := `{
+ "username": "admin2",
+ "email": "info@email.com",
+ "password": "password123",
+ "admin": true}`
+ rr, err := httpRequestAPI(t, "POST", "/api/users", strings.NewReader(data))
assert.Nil(t, err)
body := rr.Body.String()
- t.Log(body)
+ var obj ApiResponse
+ formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Contains(t, body, "statup_total_services 6")
+ assert.Contains(t, "create", obj.Method)
+ assert.Contains(t, "success", obj.Status)
}
func TestApiViewUserHandler(t *testing.T) {
- t.SkipNow()
- rr, err := httpRequestAPI(t, "GET", "/api/users/1", nil)
+ rr, err := httpRequestAPI(t, "GET", "/api/users/2", nil)
assert.Nil(t, err)
body := rr.Body.String()
assert.Equal(t, 200, rr.Code)
- assert.Contains(t, body, "statup_total_services 6")
+ var obj types.User
+ formatJSON(body, &obj)
+ assert.Equal(t, "admin2", obj.Username)
+ assert.Equal(t, true, obj.Admin)
}
func TestApiUpdateUserHandler(t *testing.T) {
- t.SkipNow()
- rr, err := httpRequestAPI(t, "POST", "/api/users/1", nil)
+ data := `{
+ "username": "adminupdated",
+ "email": "info@email.com",
+ "password": "password123",
+ "admin": true}`
+ rr, err := httpRequestAPI(t, "POST", "/api/users/1", strings.NewReader(data))
assert.Nil(t, err)
body := rr.Body.String()
- t.Log(body)
+ var obj types.User
+ formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Contains(t, body, "statup_total_services 6")
+ assert.Equal(t, "adminupdated", obj.Username)
+ assert.Equal(t, true, obj.Admin)
}
func TestApiDeleteUserHandler(t *testing.T) {
- t.SkipNow()
rr, err := httpRequestAPI(t, "DELETE", "/api/users/1", nil)
assert.Nil(t, err)
body := rr.Body.String()
+ var obj ApiResponse
+ formatJSON(body, &obj)
assert.Equal(t, 200, rr.Code)
- assert.Contains(t, body, "statup_total_services 6")
+ assert.Equal(t, "delete", obj.Method)
+ assert.Equal(t, "success", obj.Status)
}
func httpRequestAPI(t *testing.T, method, url string, body io.Reader) (*httptest.ResponseRecorder, error) {
diff --git a/handlers/handlers_test.go b/handlers/handlers_test.go
index b59f986b..985a99a1 100644
--- a/handlers/handlers_test.go
+++ b/handlers/handlers_test.go
@@ -29,28 +29,10 @@ import (
"testing"
)
-var (
- dir string
-)
-
-func init() {
- utils.InitLogs()
- source.Assets()
- dir = utils.Directory
-}
-
-func IsRouteAuthenticated(req *http.Request) bool {
- os.Setenv("GO_ENV", "production")
- rr := httptest.NewRecorder()
- req.Header.Set("Authorization", "badkey")
- Router().ServeHTTP(rr, req)
- code := rr.Code
- if code == 200 {
- os.Setenv("GO_ENV", "test")
- return false
- }
- os.Setenv("GO_ENV", "test")
- return true
+func TestResetHandlerDatabase(t *testing.T) {
+ Clean()
+ loadDatabase()
+ createDatabase()
}
func TestFailedHTTPServer(t *testing.T) {
@@ -63,7 +45,7 @@ func TestIndexHandler(t *testing.T) {
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
- assert.Equal(t, 303, rr.Code)
+ assert.Equal(t, 200, rr.Code)
}
func TestSetupHandler(t *testing.T) {
@@ -197,7 +179,7 @@ func TestServicesHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "Statup | Services")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestCreateUserHandler(t *testing.T) {
@@ -212,7 +194,7 @@ func TestCreateUserHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestEditUserHandler(t *testing.T) {
@@ -235,7 +217,7 @@ func TestEditUserHandler(t *testing.T) {
assert.Contains(t, body, "admin | ")
assert.Contains(t, body, "changedusername | ")
assert.Equal(t, 200, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestDeleteUserHandler(t *testing.T) {
@@ -244,7 +226,7 @@ func TestDeleteUserHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestUsersHandler(t *testing.T) {
@@ -258,7 +240,7 @@ func TestUsersHandler(t *testing.T) {
assert.Contains(t, body, "admin | ")
assert.NotContains(t, body, "changedusername | ")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestUsersEditHandler(t *testing.T) {
@@ -273,7 +255,7 @@ func TestUsersEditHandler(t *testing.T) {
assert.Contains(t, body, "value=\"info@statup.io\"")
assert.Contains(t, body, "value=\"##########\"")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestSettingsHandler(t *testing.T) {
@@ -285,7 +267,7 @@ func TestSettingsHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "Statup | Settings")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestHelpHandler(t *testing.T) {
@@ -297,7 +279,7 @@ func TestHelpHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "Statup | Help")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestCreateHTTPServiceHandler(t *testing.T) {
@@ -318,7 +300,7 @@ func TestCreateHTTPServiceHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestCreateTCPerviceHandler(t *testing.T) {
@@ -339,7 +321,7 @@ func TestCreateTCPerviceHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestServicesHandler2(t *testing.T) {
@@ -353,7 +335,7 @@ func TestServicesHandler2(t *testing.T) {
assert.Contains(t, body, "Crystal Castles - Kept")
assert.Contains(t, body, "Local Postgres")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestViewHTTPServicesHandler(t *testing.T) {
@@ -384,7 +366,7 @@ func TestServicesDeleteFailuresHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestFailingServicesDeleteFailuresHandler(t *testing.T) {
@@ -393,7 +375,7 @@ func TestFailingServicesDeleteFailuresHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestServicesUpdateHandler(t *testing.T) {
@@ -429,7 +411,7 @@ func TestDeleteServiceHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestLogsHandler(t *testing.T) {
@@ -441,7 +423,7 @@ func TestLogsHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "Statup | Logs")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestLogsLineHandler(t *testing.T) {
@@ -453,7 +435,7 @@ func TestLogsLineHandler(t *testing.T) {
assert.Equal(t, 200, rr.Code)
t.Log(body)
assert.NotEmpty(t, body)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestSaveSettingsHandler(t *testing.T) {
@@ -466,7 +448,7 @@ func TestSaveSettingsHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestViewSettingsHandler(t *testing.T) {
@@ -479,7 +461,7 @@ func TestViewSettingsHandler(t *testing.T) {
assert.Contains(t, body, "Statup | Settings")
assert.Contains(t, body, "Awesome Status")
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestSaveAssetsHandler(t *testing.T) {
@@ -491,7 +473,7 @@ func TestSaveAssetsHandler(t *testing.T) {
assert.FileExists(t, utils.Directory+"/assets/css/base.css")
assert.DirExists(t, utils.Directory+"/assets")
assert.True(t, source.UsingAssets(dir))
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestDeleteAssetsHandler(t *testing.T) {
@@ -501,7 +483,7 @@ func TestDeleteAssetsHandler(t *testing.T) {
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
assert.False(t, source.UsingAssets(dir))
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestPrometheusHandler(t *testing.T) {
@@ -513,7 +495,7 @@ func TestPrometheusHandler(t *testing.T) {
body := rr.Body.String()
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "statup_total_services 11")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestSaveNotificationHandler(t *testing.T) {
@@ -535,7 +517,7 @@ func TestSaveNotificationHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestViewNotificationSettingsHandler(t *testing.T) {
@@ -555,7 +537,7 @@ func TestViewNotificationSettingsHandler(t *testing.T) {
assert.Contains(t, body, `value="7" id="limits_per_hour_email"`)
assert.Contains(t, body, `id="switch-email" checked`)
assert.Contains(t, body, "Statup made with ❤️")
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestSaveFooterHandler(t *testing.T) {
@@ -567,7 +549,7 @@ func TestSaveFooterHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
req, err = http.NewRequest("GET", "/", nil)
assert.Nil(t, err)
@@ -600,7 +582,7 @@ func TestBuildAssetsHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
assert.FileExists(t, "../assets/scss/base.scss")
}
@@ -617,7 +599,7 @@ func TestSaveSassHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
newBase := source.OpenAsset(utils.Directory, "css/base.css")
assert.Contains(t, newBase, ".test_design {")
@@ -631,7 +613,7 @@ func TestReorderServiceHandler(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 200, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
func TestCreateBulkServices(t *testing.T) {
@@ -666,6 +648,20 @@ func TestCreateBulkServices(t *testing.T) {
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
- assert.True(t, IsRouteAuthenticated(req))
+ assert.True(t, isRouteAuthenticated(req))
}
}
+
+func isRouteAuthenticated(req *http.Request) bool {
+ os.Setenv("GO_ENV", "production")
+ rr := httptest.NewRecorder()
+ req.Header.Set("Authorization", "badkey")
+ Router().ServeHTTP(rr, req)
+ code := rr.Code
+ if code == 200 {
+ os.Setenv("GO_ENV", "test")
+ return false
+ }
+ os.Setenv("GO_ENV", "test")
+ return true
+}