package handlers import ( "github.com/hunterlong/statup/core" "github.com/hunterlong/statup/utils" "github.com/stretchr/testify/assert" "net/http" "net/http/httptest" "net/url" "strings" "testing" ) func init() { utils.InitLogs() core.RenderBoxes() } func TestIndexHandler(t *testing.T) { req, err := http.NewRequest("GET", "/", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestSetupHandler(t *testing.T) { req, err := http.NewRequest("GET", "/setup", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Setup") } func TestProcessSetupHandler(t *testing.T) { form := url.Values{} form.Add("db_host", "") form.Add("db_user", "") form.Add("db_password", "") form.Add("db_database", "") form.Add("db_connection", "sqlite") form.Add("db_port", "") form.Add("project", "Tester") form.Add("username", "admin") form.Add("password", "password123") form.Add("sample_data", "on") form.Add("description", "This is an awesome test") form.Add("domain", "http://localhost:8080") form.Add("email", "info@statup.io") req, err := http.NewRequest("POST", "/setup", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestCheckSetupHandler(t *testing.T) { req, err := http.NewRequest("GET", "/setup", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestCheckIndexHandler(t *testing.T) { req, err := http.NewRequest("GET", "/", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 200, rr.Code) } func TestServicesViewHandler(t *testing.T) { req, err := http.NewRequest("GET", "/service/1", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Google Service") assert.Contains(t, body, "Statup made with ❤️") } func TestServiceChartHandler(t *testing.T) { req, err := http.NewRequest("GET", "/charts.js", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "var ctx_1") assert.Contains(t, body, "var ctx_2") assert.Contains(t, body, "var ctx_3") assert.Contains(t, body, "var ctx_4") } func TestDashboardHandler(t *testing.T) { req, err := http.NewRequest("GET", "/dashboard", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Dashboard") assert.Contains(t, body, "Statup made with ❤️") } func TestLoginHandler(t *testing.T) { form := url.Values{} form.Add("username", "admin") form.Add("password", "password123") req, err := http.NewRequest("POST", "/dashboard", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestBadLoginHandler(t *testing.T) { form := url.Values{} form.Add("username", "admin") form.Add("password", "wrongpassword") req, err := http.NewRequest("POST", "/dashboard", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Contains(t, body, "Incorrect login information submitted, try again.") assert.Equal(t, 200, rr.Code) } func TestServicesHandler(t *testing.T) { req, err := http.NewRequest("GET", "/services", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Services") assert.Contains(t, body, "Statup made with ❤️") } func TestCreateUserHandler(t *testing.T) { form := url.Values{} form.Add("username", "newuser") form.Add("password", "password123") form.Add("email", "info@okokk.com") form.Add("admin", "on") req, err := http.NewRequest("POST", "/users", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestEditUserHandler(t *testing.T) { form := url.Values{} form.Add("username", "changedusername") form.Add("password", "##########") form.Add("email", "info@okokk.com") form.Add("admin", "on") req, err := http.NewRequest("POST", "/user/2", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Contains(t, body, "admin") assert.Contains(t, body, "changedusername") assert.Equal(t, 200, rr.Code) } func TestDeleteUserHandler(t *testing.T) { req, err := http.NewRequest("GET", "/user/2/delete", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestUsersHandler(t *testing.T) { req, err := http.NewRequest("GET", "/users", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Users") assert.Contains(t, body, "admin") assert.NotContains(t, body, "changedusername") assert.Contains(t, body, "Statup made with ❤️") } func TestUsersEditHandler(t *testing.T) { req, err := http.NewRequest("GET", "/user/1", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Users") assert.Contains(t, body, "

User admin

") assert.Contains(t, body, "value=\"info@statup.io\"") assert.Contains(t, body, "value=\"##########\"") assert.Contains(t, body, "Statup made with ❤️") } func TestSettingsHandler(t *testing.T) { req, err := http.NewRequest("GET", "/settings", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Settings") assert.Contains(t, body, "Statup made with ❤️") } func TestHelpHandler(t *testing.T) { req, err := http.NewRequest("GET", "/help", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Help") assert.Contains(t, body, "Statup made with ❤️") } func TestCreateHTTPServiceHandler(t *testing.T) { form := url.Values{} form.Add("name", "Crystal Castles - Kept") form.Add("domain", "https://www.youtube.com/watch?v=CfbCLwNlGwU") form.Add("method", "GET") form.Add("expected_status", "200") form.Add("interval", "30") form.Add("port", "") form.Add("timeout", "30") form.Add("check_type", "http") form.Add("post_data", "") req, err := http.NewRequest("POST", "/services", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestCreateTCPerviceHandler(t *testing.T) { form := url.Values{} form.Add("name", "Local Postgres") form.Add("domain", "localhost") form.Add("method", "GET") form.Add("expected_status", "") form.Add("interval", "30") form.Add("port", "5432") form.Add("timeout", "30") form.Add("check_type", "tcp") form.Add("post_data", "") req, err := http.NewRequest("POST", "/services", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestServicesHandler2(t *testing.T) { req, err := http.NewRequest("GET", "/services", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Services") assert.Contains(t, body, "Crystal Castles - Kept") assert.Contains(t, body, "Local Postgres") assert.Contains(t, body, "Statup made with ❤️") } func TestViewHTTPServicesHandler(t *testing.T) { req, err := http.NewRequest("GET", "/service/6", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Crystal Castles - Kept Service") assert.Contains(t, body, "Statup made with ❤️") } func TestViewTCPServicesHandler(t *testing.T) { req, err := http.NewRequest("GET", "/service/7", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Local Postgres Service") assert.Contains(t, body, "Statup made with ❤️") } func TestServicesUpdateHandler(t *testing.T) { form := url.Values{} form.Add("name", "The Bravery - An Honest Mistake") form.Add("domain", "https://www.youtube.com/watch?v=O8vzbezVru4") form.Add("method", "GET") form.Add("expected_status", "") form.Add("interval", "30") form.Add("port", "") form.Add("timeout", "15") form.Add("check_type", "http") form.Add("post_data", "") req, err := http.NewRequest("POST", "/service/6", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | The Bravery - An Honest Mistake Service") assert.Contains(t, body, "Statup made with ❤️") } func TestDeleteServiceHandler(t *testing.T) { req, err := http.NewRequest("POST", "/service/7/delete", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestLogsHandler(t *testing.T) { t.SkipNow() req, err := http.NewRequest("GET", "/logs", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Logs") assert.Contains(t, body, "Statup made with ❤️") } func TestLogsLineHandler(t *testing.T) { t.SkipNow() req, err := http.NewRequest("GET", "/logs/line", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) t.Log(body) assert.NotEmpty(t, body) } func TestSaveSettingsHandler(t *testing.T) { form := url.Values{} form.Add("project", "Awesome Status") form.Add("description", "These tests can probably be better") req, err := http.NewRequest("POST", "/settings", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) } func TestViewSettingsHandler(t *testing.T) { req, err := http.NewRequest("GET", "/settings", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "Statup | Settings") assert.Contains(t, body, "Awesome Status") assert.Contains(t, body, "Statup made with ❤️") } func TestPrometheusHandler(t *testing.T) { req, err := http.NewRequest("GET", "/metrics", nil) req.Header.Set("Authorization", core.CoreApp.ApiSecret) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) body := rr.Body.String() assert.Equal(t, 200, rr.Code) assert.Contains(t, body, "statup_total_services 6") } func TestLogoutHandler(t *testing.T) { req, err := http.NewRequest("GET", "/logout", nil) assert.Nil(t, err) rr := httptest.NewRecorder() Router().ServeHTTP(rr, req) assert.Equal(t, 303, rr.Code) }