220 lines
9.1 KiB
Go
220 lines
9.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"gitea.tecamino.com/paadi/memberDB/api"
|
|
"gitea.tecamino.com/paadi/memberDB/models"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-playground/assert/v2"
|
|
)
|
|
|
|
func TestErrors(t *testing.T) {
|
|
dbName := "test.db"
|
|
if _, err := os.Stat(dbName); err == nil {
|
|
t.Log("remove user.db to start test with empty database")
|
|
if err := os.Remove(dbName); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
t.Log("start member db test")
|
|
|
|
t.Log("initialize accessHandler")
|
|
|
|
r := gin.Default()
|
|
|
|
apiHandler, err := api.NewAPIHandler(nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
v1 := r.Group("v1")
|
|
v1.GET("/events", apiHandler.GetEvent)
|
|
v1.GET("/events/new", apiHandler.StartNewEvent)
|
|
v1.GET("/events/delete", apiHandler.DeleteEvent)
|
|
v1.GET("/members", apiHandler.GetMember)
|
|
v1.GET("/responsible", apiHandler.GetResponsible)
|
|
|
|
v1.POST("/database/open", apiHandler.OpenDatabase)
|
|
v1.POST("/members/add", apiHandler.AddNewMember)
|
|
v1.POST("/members/edit", apiHandler.EditMember)
|
|
v1.POST("/members/delete", apiHandler.DeleteMember)
|
|
v1.POST("/members/import/csv", apiHandler.ImportCSV)
|
|
|
|
v1.POST("/events/attendees/add", apiHandler.AddNewAttendees)
|
|
v1.POST("/events/attendees/delete", apiHandler.DeleteAttendee)
|
|
|
|
v1.POST("/responsible/add", apiHandler.AddNewResponsible)
|
|
v1.POST("/responsible/delete", apiHandler.DeleteResponsible)
|
|
|
|
type request struct {
|
|
Log string
|
|
Name string
|
|
Method string
|
|
Path string
|
|
Payload any
|
|
Cookie *http.Cookie
|
|
ignoreError bool
|
|
}
|
|
var requests []request
|
|
|
|
type payload struct {
|
|
DBPath string `json:"dbPath,omitempty"`
|
|
Create bool `json:"create,omitempty"`
|
|
FirstName string `json:"FirstName,omitempty"`
|
|
LastName string `json:"lastName,omitempty"`
|
|
Birthday string `json:"birthday,omitempty"`
|
|
}
|
|
requests = append(requests,
|
|
|
|
request{Log: "error db not opened", Name: "error db not opened", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Adrian", LastName: "Zürcher", Birthday: "23.06.1987"}, ignoreError: true},
|
|
request{Log: "open member db", Name: "open member db", Method: "POST", Path: "/v1/database/open", Payload: payload{DBPath: "test.db", Create: true}},
|
|
request{Log: "add new member", Name: "add new member", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Adrian", LastName: "Zürcher", Birthday: "23.06.1987"}, ignoreError: true},
|
|
request{Log: "error first name missing", Name: "error first name missing", Method: "POST", Path: "/v1/members/add", Payload: payload{LastName: "Zürcher", Birthday: "23.06.1987"}, ignoreError: true},
|
|
request{Log: "error last name missing", Name: "error last name missing", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Adrian", Birthday: "23.06.1987"}, ignoreError: true},
|
|
request{Log: "error birthday missing", Name: "error birthday missing", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Paulina", LastName: "Zürcher"}, ignoreError: true},
|
|
request{Log: "error wrong birthday format", Name: "error wrong birthday format", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Paulina", LastName: "Zürcher", Birthday: "213.06.1987"}, ignoreError: true},
|
|
)
|
|
|
|
for _, request := range requests {
|
|
if request.Log != "" {
|
|
t.Log(request.Log)
|
|
|
|
}
|
|
var bodyReader io.Reader
|
|
if request.Payload != nil {
|
|
jsonBytes, _ := json.Marshal(request.Payload)
|
|
bodyReader = bytes.NewBuffer(jsonBytes)
|
|
}
|
|
req, _ := http.NewRequest(request.Method, request.Path, bodyReader)
|
|
if request.Cookie != nil {
|
|
req.AddCookie(request.Cookie) // attach refresh_token cookie
|
|
}
|
|
w := httptest.NewRecorder()
|
|
|
|
r.ServeHTTP(w, req)
|
|
|
|
t.Log(request.Name+" response:", w.Body.String())
|
|
if !request.ignoreError {
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
}
|
|
}
|
|
}
|
|
func TestMemberDB(t *testing.T) {
|
|
dbName := "test.db"
|
|
if _, err := os.Stat(dbName); err == nil {
|
|
t.Log("remove user.db to start test with empty database")
|
|
if err := os.Remove(dbName); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
t.Log("start member db test")
|
|
|
|
t.Log("initialize accessHandler")
|
|
|
|
r := gin.Default()
|
|
|
|
apiHandler, err := api.NewAPIHandler(nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
v1 := r.Group("v1")
|
|
v1.GET("/events", apiHandler.GetEvent)
|
|
v1.GET("/events/new", apiHandler.StartNewEvent)
|
|
v1.GET("/events/delete", apiHandler.DeleteEvent)
|
|
v1.GET("/members", apiHandler.GetMember)
|
|
v1.GET("/responsible", apiHandler.GetResponsible)
|
|
|
|
v1.POST("/database/open", apiHandler.OpenDatabase)
|
|
v1.POST("/members/add", apiHandler.AddNewMember)
|
|
v1.POST("/members/edit", apiHandler.EditMember)
|
|
v1.POST("/members/delete", apiHandler.DeleteMember)
|
|
v1.POST("/members/import/csv", apiHandler.ImportCSV)
|
|
|
|
v1.POST("/events/attendees/add", apiHandler.AddNewAttendees)
|
|
v1.POST("/events/attendees/delete", apiHandler.DeleteAttendee)
|
|
|
|
v1.POST("/responsible/add", apiHandler.AddNewResponsible)
|
|
v1.POST("/responsible/delete", apiHandler.DeleteResponsible)
|
|
|
|
type request struct {
|
|
Log string
|
|
Name string
|
|
Method string
|
|
Path string
|
|
Payload any
|
|
Cookie *http.Cookie
|
|
ignoreError bool
|
|
}
|
|
var requests []request
|
|
|
|
type payload struct {
|
|
DBPath string `json:"dbPath,omitempty"`
|
|
Create bool `json:"create,omitempty"`
|
|
Ids []uint `json:"ids,omitempty"`
|
|
FirstName string `json:"FirstName,omitempty"`
|
|
LastName string `json:"lastName,omitempty"`
|
|
Birthday string `json:"birthday,omitempty"`
|
|
Group string `json:"group,omitempty"`
|
|
}
|
|
|
|
requests = append(requests,
|
|
request{Log: "open member db", Name: "open member db", Method: "POST", Path: "/v1/database/open", Payload: payload{DBPath: "test.db", Create: true}},
|
|
|
|
request{Log: "add new member", Name: "add new member", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Adrian", LastName: "Zürcher", Birthday: "23.06.1987"}},
|
|
request{Log: "add existing member", Name: "add existing member", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Adrian", LastName: "Zürcher", Birthday: "23.06.1987"}, ignoreError: true},
|
|
request{Log: "add new member", Name: "add new member", Method: "POST", Path: "/v1/members/add", Payload: payload{FirstName: "Paulina", LastName: "Zürcher", Birthday: "15.01.1991"}},
|
|
request{Log: "get members", Name: "get members", Method: "GET", Path: "/v1/members"},
|
|
request{Log: "update members", Name: "update members", Method: "POST", Path: "/v1/members/edit?id=1", Payload: payload{Group: "testGroup"}},
|
|
request{Log: "get again members", Name: "get again members", Method: "GET", Path: "/v1/members"},
|
|
request{Log: "delete members", Name: "delete members", Method: "POST", Path: "/v1/members/delete", Payload: payload{Ids: []uint{2, 1}}},
|
|
request{Log: "get again members", Name: "get again members", Method: "GET", Path: "/v1/members"},
|
|
|
|
request{Log: "new event", Name: "new event", Method: "GET", Path: "/v1/events/new?name=testEvent"},
|
|
request{Log: "add new attendee", Name: "add new attendee", Method: "POST", Path: "/v1/events/attendees/add", Payload: models.Event{Attendees: models.Persons{{FirstName: "Adi", LastName: "Züri"}}}},
|
|
request{Log: "add another attendee", Name: "add another attendee", Method: "POST", Path: "/v1/events/attendees/add", Payload: models.Event{Attendees: models.Persons{{FirstName: "Pau", LastName: "Züri"}}}},
|
|
request{Log: "get events", Name: "get events", Method: "GET", Path: "/v1/events"},
|
|
request{Log: "add delete attendee", Name: "add delete attendee", Method: "POST", Path: "/v1/events/attendees/delete", Payload: models.Event{Attendees: models.Persons{{FirstName: "Adi", LastName: "Züri"}}}},
|
|
request{Log: "get events", Name: "get events", Method: "GET", Path: "/v1/events"},
|
|
|
|
request{Log: "add responsible", Name: "add responsible", Method: "POST", Path: "/v1/responsible/add", Payload: models.Person{FirstName: "Max", LastName: "Muster"}},
|
|
request{Log: "add another responsible", Name: "add another responsible", Method: "POST", Path: "/v1/responsible/add", Payload: models.Person{FirstName: "Hausi", LastName: "Muster"}},
|
|
request{Log: "get responsible", Name: "get responsible", Method: "GET", Path: "/v1/responsible"},
|
|
request{Log: "delete responsible id 1", Name: "delete responsible id 1", Method: "POST", Path: "/v1/responsible/delete", Payload: payload{Ids: []uint{1}}},
|
|
request{Log: "get responsible", Name: "get responsible", Method: "GET", Path: "/v1/responsible"},
|
|
)
|
|
|
|
for _, request := range requests {
|
|
if request.Log != "" {
|
|
t.Log(request.Log)
|
|
|
|
}
|
|
var bodyReader io.Reader
|
|
if request.Payload != nil {
|
|
jsonBytes, _ := json.Marshal(request.Payload)
|
|
bodyReader = bytes.NewBuffer(jsonBytes)
|
|
}
|
|
req, _ := http.NewRequest(request.Method, request.Path, bodyReader)
|
|
if request.Cookie != nil {
|
|
req.AddCookie(request.Cookie) // attach refresh_token cookie
|
|
}
|
|
w := httptest.NewRecorder()
|
|
|
|
r.ServeHTTP(w, req)
|
|
|
|
t.Log(request.Name+" response:", w.Body.String())
|
|
if !request.ignoreError {
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
}
|
|
}
|
|
}
|