mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 15:22:47 +01:00
106 lines
2.3 KiB
Go
106 lines
2.3 KiB
Go
package testing
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/pocketbase/pocketbase/apis"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type BaseTest struct {
|
|
Name string
|
|
Method string
|
|
RequestHeaders map[string]string
|
|
URL string
|
|
Body string
|
|
}
|
|
|
|
type UserTest struct {
|
|
Name string
|
|
AuthRecord string
|
|
Admin string
|
|
ExpectedStatus int
|
|
ExpectedContent []string
|
|
NotExpectedContent []string
|
|
ExpectedEvents map[string]int
|
|
}
|
|
|
|
type catalystTest struct {
|
|
baseTest BaseTest
|
|
userTests []UserTest
|
|
}
|
|
|
|
func runMatrixTest(t *testing.T, baseTest BaseTest, userTest UserTest) {
|
|
t.Helper()
|
|
|
|
baseApp, counter, baseAppCleanup := App(t)
|
|
defer baseAppCleanup()
|
|
|
|
server, err := apis.InitApi(baseApp)
|
|
require.NoError(t, err)
|
|
|
|
if err := baseApp.OnBeforeServe().Trigger(&core.ServeEvent{
|
|
App: baseApp,
|
|
Router: server,
|
|
}); err != nil {
|
|
t.Fatal(fmt.Errorf("failed to trigger OnBeforeServe: %w", err))
|
|
}
|
|
|
|
recorder := httptest.NewRecorder()
|
|
body := bytes.NewBufferString(baseTest.Body)
|
|
req := httptest.NewRequest(baseTest.Method, baseTest.URL, body)
|
|
|
|
for k, v := range baseTest.RequestHeaders {
|
|
req.Header.Set(k, v)
|
|
}
|
|
|
|
if userTest.AuthRecord != "" {
|
|
token, err := generateRecordToken(t, baseApp, userTest.AuthRecord)
|
|
require.NoError(t, err)
|
|
|
|
req.Header.Set("Authorization", token)
|
|
}
|
|
|
|
if userTest.Admin != "" {
|
|
token, err := generateAdminToken(t, baseApp, userTest.Admin)
|
|
require.NoError(t, err)
|
|
|
|
req.Header.Set("Authorization", token)
|
|
}
|
|
|
|
server.ServeHTTP(recorder, req)
|
|
|
|
res := recorder.Result()
|
|
defer res.Body.Close()
|
|
|
|
assert.Equal(t, userTest.ExpectedStatus, res.StatusCode)
|
|
|
|
for _, expectedContent := range userTest.ExpectedContent {
|
|
assert.Contains(t, recorder.Body.String(), expectedContent)
|
|
}
|
|
|
|
for _, notExpectedContent := range userTest.NotExpectedContent {
|
|
assert.NotContains(t, recorder.Body.String(), notExpectedContent)
|
|
}
|
|
|
|
for event, count := range userTest.ExpectedEvents {
|
|
assert.Equal(t, count, counter.Count(event))
|
|
}
|
|
}
|
|
|
|
func b(data map[string]any) []byte {
|
|
b, _ := json.Marshal(data) //nolint:errchkjson
|
|
|
|
return b
|
|
}
|
|
|
|
func s(data map[string]any) string {
|
|
return string(b(data))
|
|
}
|