Add go backend
This commit is contained in:
199
api/test/controllers/user_test.go
Normal file
199
api/test/controllers/user_test.go
Normal file
@@ -0,0 +1,199 @@
|
||||
package controllers_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"magmise/controllers"
|
||||
"magmise/models"
|
||||
"magmise/test"
|
||||
"net/http"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// "/user/{username}"
|
||||
func TestGetUser(t *testing.T) {
|
||||
setup := test.Setup(t, "get user")
|
||||
defer setup()
|
||||
|
||||
var user controllers.User
|
||||
w := test.Request(t, user.Get, "GET", "/user/{username}", `{}`, map[string]string{"username": "fred"})
|
||||
|
||||
var usermodel models.User
|
||||
if json.Unmarshal(w.Body.Bytes(), &usermodel) != nil {
|
||||
t.Fail()
|
||||
}
|
||||
if usermodel.Username != "fred" {
|
||||
t.Fatal(usermodel)
|
||||
}
|
||||
}
|
||||
|
||||
// "/user"
|
||||
func TestCreateUser(t *testing.T) {
|
||||
setup := test.Setup(t, "create user")
|
||||
defer setup()
|
||||
var user controllers.User
|
||||
w := test.Request(t, user.Create, "POST", "/user/{username}", `{"username": "fred", "password": "a"}`, nil)
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatal(w.Code, w.Result().Status)
|
||||
}
|
||||
}
|
||||
|
||||
// // "/user/application/:userid/:discordid"
|
||||
// func TestCreateuser(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
|
||||
// var user controllers.User
|
||||
// handler := http.HandlerFunc(user.Createuser)
|
||||
// r, err := http.NewRequest("POST", "/user/application/:userid/:discordid", nil)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":userid", "6")
|
||||
// q.Add(":discordid", "6")
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Fail()
|
||||
// }
|
||||
// }
|
||||
|
||||
// // PATCH "/user/application/:userid"
|
||||
// func TestUpdateuser(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
// t.Log("Test Updateuser")
|
||||
// usermodel := models.User{userId: "1", Status: "closed"}
|
||||
// userjson, err := json.Marshal(usermodel)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// var user controllers.Userco
|
||||
// handler := http.HandlerFunc(user.Updateuser)
|
||||
// r, err := http.NewRequest("PATCH", "/user/application/:userid", bytes.NewBuffer(userjson))
|
||||
// r.Header.Set("Content-Type", "application/json; charset=UTF-8")
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":userid", "1")
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Log(w.Body)
|
||||
// t.Fatal(w.Code)
|
||||
// }
|
||||
// usermodel.Read()
|
||||
// if usermodel.Status != "closed" {
|
||||
|
||||
// t.Fail()
|
||||
// }
|
||||
// }
|
||||
|
||||
// // "/user/application/:userid"
|
||||
// func TestDeleteuser(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
|
||||
// var user controllers.User
|
||||
// handler := http.HandlerFunc(user.Deleteuser)
|
||||
// r, err := http.NewRequest("POST", "/user/application/:userid", nil)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":userid", "1")
|
||||
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Fail()
|
||||
// }
|
||||
// }
|
||||
|
||||
// // /user/:discordid/users/application/:status/
|
||||
// func TestGetUserusers(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
|
||||
// handler := http.HandlerFunc(controllers.User{}.GetUserusers)
|
||||
// r, err := http.NewRequest("GET", "/user/:discordid/users/application/:status/", nil)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":discordid", "1")
|
||||
// q.Add(":status", "all")
|
||||
// q.Add(":limit", "100")
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Fail()
|
||||
// }
|
||||
// var users []models.User
|
||||
// if json.Unmarshal(w.Body.Bytes(), &users) != nil {
|
||||
// t.Fatal("Failed unmarshal")
|
||||
// }
|
||||
|
||||
// for _, user := range users {
|
||||
// t.Log(user)
|
||||
// t.Log("\n")
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// // /users/application/:status/
|
||||
// func TestGetusers(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
|
||||
// handler := http.HandlerFunc(controllers.User{}.GetUserusers)
|
||||
// r, err := http.NewRequest("GET", "/users/application/:status/", nil)
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":status", "all")
|
||||
// q.Add(":limit", "100")
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Fail()
|
||||
// }
|
||||
// var users []models.User
|
||||
// if json.Unmarshal(w.Body.Bytes(), &users) != nil {
|
||||
// t.Fatal("Failed unmarshal")
|
||||
// }
|
||||
|
||||
// for _, user := range users {
|
||||
// t.Log(user)
|
||||
// t.Log("\n")
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// // "/answer/application/:userid/"
|
||||
// func TestAddAnswer(t *testing.T) {
|
||||
// setup := test.Setup(t)
|
||||
// defer setup()
|
||||
|
||||
// var user controllers.User
|
||||
// handler := http.HandlerFunc(user.AddAnswer)
|
||||
// r, err := http.NewRequest("POST", "/answer/application/:userid/", bytes.NewBufferString("Hello world"))
|
||||
// if err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// q := r.URL.Query()
|
||||
// q.Add(":userid", "1")
|
||||
// r.URL.RawQuery = q.Encode()
|
||||
// w := httptest.NewRecorder()
|
||||
// handler(w, r)
|
||||
// if w.Code != 200 {
|
||||
// t.Fatal("Failed to add answer", w.Code)
|
||||
// }
|
||||
// }
|
||||
18
api/test/middleware/basicauth_test.go
Normal file
18
api/test/middleware/basicauth_test.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package middleware_test
|
||||
|
||||
import (
|
||||
"magmise/middleware"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCheckPasswordHash(t *testing.T) {
|
||||
password := "password"
|
||||
hash, _ := middleware.HashPassword(password)
|
||||
if middleware.CheckPasswordHash(password, hash) == false {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestBasicAuth(t *testing.T) {
|
||||
|
||||
}
|
||||
72
api/test/models/db_test.go
Normal file
72
api/test/models/db_test.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"magmise/models"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type Test struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
func TestDB(t *testing.T) {
|
||||
// Create table
|
||||
models.DB().AutoMigrate(&models.User{})
|
||||
|
||||
user := models.User{Username: "test"}
|
||||
|
||||
//Create
|
||||
if err := models.Create(&user); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Log("\033[33mShould error with unique contraint\033[0m")
|
||||
if err := models.Create(&user); err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Read
|
||||
if err := models.Read(&user); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Create more rows
|
||||
user = models.User{Username: "test2"}
|
||||
models.Create(&user)
|
||||
user = models.User{Username: "test3"}
|
||||
models.Create(&user)
|
||||
user = models.User{Username: "test4"}
|
||||
models.Create(&user)
|
||||
|
||||
// Get second and third row
|
||||
var users []models.User
|
||||
if err := models.ReadAll(&users, 1, 2); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if users[0].Username != "test2" {
|
||||
t.Fatal("Offset failed\n", users)
|
||||
}
|
||||
|
||||
if len(users) != 2 {
|
||||
t.Fatal("Limit failed\n", users)
|
||||
}
|
||||
|
||||
// Update
|
||||
user.Password = "b"
|
||||
if err := models.Update(&user, "username", user.Username); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// Check Update
|
||||
if err := models.Read(&user); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if user.Password != "b" {
|
||||
t.Fatal("failed update")
|
||||
}
|
||||
|
||||
// Delete
|
||||
if err := models.Delete(&user); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
models.DB().Migrator().DropTable(&models.User{})
|
||||
}
|
||||
76
api/test/models/user_test.go
Normal file
76
api/test/models/user_test.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"magmise/models"
|
||||
"magmise/test"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestUserCreate(t *testing.T) {
|
||||
cleanup := test.Setup(t, "user create")
|
||||
defer cleanup()
|
||||
user := models.User{Username: "Bob", Password: "a"}
|
||||
if user.Create() != nil {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserRead(t *testing.T) {
|
||||
cleanup := test.Setup(t, "user read")
|
||||
defer cleanup()
|
||||
user := models.User{Username: "fred"}
|
||||
if user.Read() != nil {
|
||||
t.Fatal("Faied to read application user")
|
||||
}
|
||||
|
||||
if user.Password != "a" {
|
||||
t.Log(user)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserReadAll(t *testing.T) {
|
||||
cleanup := test.Setup(t, "user readall")
|
||||
defer cleanup()
|
||||
user := models.User{}
|
||||
users, err := user.ReadAll(0, 10)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if users[0].Username != "fred" {
|
||||
t.Log(users)
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestUserUpdate(t *testing.T) {
|
||||
cleanup := test.Setup(t, "user update")
|
||||
defer cleanup()
|
||||
user := models.User{Username: "fred"}
|
||||
user.Read()
|
||||
user.Password = "b"
|
||||
if user.Update() != nil {
|
||||
t.Fail()
|
||||
}
|
||||
user.Read()
|
||||
if user.Password != "b" {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserDelete(t *testing.T) {
|
||||
cleanup := test.Setup(t, "user delete")
|
||||
defer cleanup()
|
||||
user := models.User{Username: "fred"}
|
||||
|
||||
if err := user.Delete(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log()
|
||||
|
||||
t.Log("\033[33m\033[1mShould error with \033[95mrecord not found\033[0m")
|
||||
if user.Read() == nil {
|
||||
t.Fatal(user)
|
||||
}
|
||||
}
|
||||
49
api/test/test.go
Normal file
49
api/test/test.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"magmise/models"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
func Setup(t *testing.T, name string) func() {
|
||||
t.Log("Setup " + name)
|
||||
models.Init()
|
||||
//models.DB().Exec("DROP TABLE ticketapplication_answers")
|
||||
models.DB().Migrator().DropTable(models.User{})
|
||||
models.DB().AutoMigrate(models.User{})
|
||||
|
||||
models.User{Username: "fred", Password: "a"}.Create()
|
||||
return func() {
|
||||
t.Log("Cleanup " + name)
|
||||
models.DB().Migrator().DropTable(models.User{})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func Request(t *testing.T, model http.HandlerFunc, method, path, _json string, urlparams map[string]string) *httptest.ResponseRecorder {
|
||||
handler := http.HandlerFunc(model)
|
||||
r, err := http.NewRequest("GET", "/user/{username}", bytes.NewBufferString(_json))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
rctx := chi.NewRouteContext()
|
||||
for key, value := range urlparams {
|
||||
rctx.URLParams.Add(key, value)
|
||||
}
|
||||
|
||||
r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, rctx))
|
||||
|
||||
w := httptest.NewRecorder()
|
||||
handler(w, r)
|
||||
if w.Code != 200 {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
return w
|
||||
}
|
||||
Reference in New Issue
Block a user