tests (boilerplate)
This commit is contained in:
103
server/test/common_test.go
Normal file
103
server/test/common_test.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
scn "blackforestbytes.com/simplecloudnotifier"
|
||||
"blackforestbytes.com/simplecloudnotifier/api"
|
||||
"blackforestbytes.com/simplecloudnotifier/common/ginext"
|
||||
"blackforestbytes.com/simplecloudnotifier/db"
|
||||
"blackforestbytes.com/simplecloudnotifier/jobs"
|
||||
"blackforestbytes.com/simplecloudnotifier/logic"
|
||||
"blackforestbytes.com/simplecloudnotifier/push"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func NewSimpleWebserver(t *testing.T) *logic.Application {
|
||||
|
||||
uuid, err := langext.NewHexUUID()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
dbfile := filepath.Join(os.TempDir(), uuid+"sqlite3")
|
||||
defer func() {
|
||||
_ = os.Remove(dbfile)
|
||||
}()
|
||||
|
||||
conf := scn.Config{
|
||||
Namespace: "test",
|
||||
GinDebug: true,
|
||||
ServerIP: "0.0.0.0",
|
||||
ServerPort: "0", // simply choose a free port
|
||||
DBFile: dbfile,
|
||||
RequestTimeout: 500 * time.Millisecond,
|
||||
ReturnRawErrors: true,
|
||||
DummyFirebase: true,
|
||||
}
|
||||
|
||||
sqlite, err := db.NewDatabase(dbfile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
app := logic.NewApp(sqlite)
|
||||
|
||||
if err := app.Migrate(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ginengine := ginext.NewEngine(conf)
|
||||
|
||||
router := api.NewRouter(app)
|
||||
|
||||
nc := push.NewTestSink()
|
||||
|
||||
jobRetry := jobs.NewDeliveryRetryJob(app)
|
||||
app.Init(conf, ginengine, nc, []logic.Job{jobRetry})
|
||||
|
||||
router.Init(ginengine)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
func requestGet[T any](t *testing.T, baseURL string, prefix string) T {
|
||||
client := http.Client{}
|
||||
|
||||
req, err := http.NewRequest("GET", baseURL+prefix, bytes.NewReader([]byte{}))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return *new(T)
|
||||
}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return *new(T)
|
||||
}
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
t.Error("Statuscode != 200")
|
||||
}
|
||||
|
||||
respBodyBin, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return *new(T)
|
||||
}
|
||||
|
||||
var data T
|
||||
if err := json.Unmarshal(respBodyBin, &data); err != nil {
|
||||
t.Error(err)
|
||||
return *new(T)
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
25
server/test/webserver_test.go
Normal file
25
server/test/webserver_test.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestWebserver(t *testing.T) {
|
||||
ws := NewSimpleWebserver(t)
|
||||
defer ws.Stop()
|
||||
go func() { ws.Run() }()
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
|
||||
func TestPing(t *testing.T) {
|
||||
ws := NewSimpleWebserver(t)
|
||||
defer ws.Stop()
|
||||
go func() { ws.Run() }()
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
baseUrl := "http://127.0.0.1:" + ws.Port
|
||||
|
||||
_ = requestGet[struct{}](t, baseUrl, "/api/ping")
|
||||
|
||||
}
|
Reference in New Issue
Block a user