92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package apis
|
|
|
|
import (
|
|
"clortho/db"
|
|
"clortho/users"
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
// Set up test database file
|
|
os.Setenv("CLORTHO_DB_FILE", "clortho_test.db")
|
|
// Global setup
|
|
fmt.Println("Setting up resources...")
|
|
|
|
db.InitDb()
|
|
defer db.ResetDb()
|
|
|
|
exitCode := m.Run() // Run all tests
|
|
|
|
// Global teardown
|
|
fmt.Println("Cleaning up resources...")
|
|
|
|
os.Exit(exitCode)
|
|
}
|
|
|
|
func TestInitAuthEndpoints_authSignin(t *testing.T) {
|
|
adminPass, err := users.InitAdminUser()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
r := gin.Default()
|
|
SetupRouter(r, nil)
|
|
|
|
reqBody := loginRequest{Username: "admin", Password: *adminPass}
|
|
strReqBody, _ := json.Marshal(reqBody)
|
|
w := httptest.NewRecorder()
|
|
req, _ := http.NewRequest("POST", "/gui/auth/signin", strings.NewReader(string(strReqBody)))
|
|
r.ServeHTTP(w, req)
|
|
|
|
assert.Equal(t, 200, w.Code)
|
|
assert.JSONEq(t, `{"valid": true}`, w.Body.String())
|
|
setCookie := w.Header().Get("Set-Cookie")
|
|
assert.True(t, strings.Contains(setCookie, "CLORTHO_AUTH="))
|
|
}
|
|
|
|
func TestInitAuthEndpoints_authSignout(t *testing.T) {
|
|
adminPass, err := users.InitAdminUser()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
r := gin.Default()
|
|
SetupRouter(r, nil)
|
|
|
|
reqBody := loginRequest{Username: "admin", Password: *adminPass}
|
|
strReqBody, _ := json.Marshal(reqBody)
|
|
w := httptest.NewRecorder()
|
|
req, _ := http.NewRequest("POST", "/gui/auth/signout", strings.NewReader(string(strReqBody)))
|
|
r.ServeHTTP(w, req)
|
|
|
|
assert.Equal(t, 200, w.Code)
|
|
assert.JSONEq(t, `{}`, w.Body.String())
|
|
setCookie := w.Header().Get("Set-Cookie")
|
|
assert.True(t, strings.Contains(setCookie, "CLORTHO_AUTH="))
|
|
}
|
|
|
|
func TestInitAuthEndpoints_getMe(t *testing.T) {
|
|
user, err := InitUser("admin", "password")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r := gin.Default()
|
|
SetupRouter(r, MockAuthMiddleware(*user))
|
|
|
|
w := httptest.NewRecorder()
|
|
req, _ := http.NewRequest("GET", "/gui/auth/me", nil)
|
|
r.ServeHTTP(w, req)
|
|
|
|
strUser, _ := json.Marshal(user)
|
|
assert.Equal(t, 200, w.Code)
|
|
assert.JSONEq(t, fmt.Sprintf(`{"loggedIn": true, "user": %s}`, strUser), w.Body.String())
|
|
}
|