1
0
mirror of https://github.com/khorevaa/kubodin.git synced 2025-03-03 15:32:43 +02:00
kubodin/api/server_test.go

88 lines
1.6 KiB
Go
Raw Permalink Normal View History

2021-03-04 16:09:08 +03:00
package api
import (
"github.com/gofiber/fiber/v2"
db "github.com/khorevaa/kubodin/database"
"github.com/khorevaa/kubodin/ras"
"github.com/khorevaa/kubodin/service"
"github.com/khorevaa/kubodin/service/cache"
"github.com/steinfletcher/apitest"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"io"
"net/http"
"sync"
"time"
)
var once = sync.Once{}
type baseSuite struct {
suite.Suite
}
func (s *baseSuite) r() *require.Assertions {
return s.Require()
}
func (s *baseSuite) api(recorder ...*apitest.Recorder) *apitest.APITest {
rec := apitest.NewTestRecorder()
if len(recorder) > 0 {
rec = recorder[0]
}
once.Do(func() {
})
return apitest.New().
HandlerFunc(FiberToHandlerFunc(newTestApp(rec))).
//Debug().
//Report(apitest.SequenceDiagram())
Recorder(rec)
}
func newTestApp(rec *apitest.Recorder) *fiber.App {
server := fiber.New()
memoryCache := &cache.Memory{
Expiration: 30 * time.Minute,
}
memoryCache.Connect()
ras.SetLocalStorage(RecorderStorage(rec))
rep := WithRecorderRepository(db.NewMemoryRepository(), rec)
s, _ := service.NewService(WithRecorderCache(memoryCache, rec), rep)
serv := WithRecorderService(s, rec)
server.Use(service.Middleware(serv))
Routes(server, serv)
return server
}
func FiberToHandlerFunc(app *fiber.App) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
resp, err := app.Test(r)
if err != nil {
panic(err)
}
// copy headers
for k, vv := range resp.Header {
for _, v := range vv {
w.Header().Add(k, v)
}
}
w.WriteHeader(resp.StatusCode)
if _, err := io.Copy(w, resp.Body); err != nil {
panic(err)
}
}
}