Files
sablier/internal/api/start_dynamic_test.go
Alexis Couvreur ce7de13ade refactor: remove session manager
The session manager is now simply Sablier
2025-03-08 12:17:12 -05:00

104 lines
4.2 KiB
Go

package api
import (
"errors"
"github.com/sablierapp/sablier/pkg/sablier"
"github.com/tniswong/go.rfcx/rfc7807"
"go.uber.org/mock/gomock"
"gotest.tools/v3/assert"
"net/http"
"testing"
)
func session() *sablier.SessionState {
state := sablier.ReadyInstanceState("test", 1)
state2 := sablier.ReadyInstanceState("test2", 1)
return &sablier.SessionState{
Instances: map[string]sablier.InstanceInfoWithError{
"test": {
Instance: state,
Error: nil,
},
"test2": {
Instance: state2,
Error: nil,
},
},
}
}
func TestStartDynamic(t *testing.T) {
t.Run("StartDynamicInvalidBind", func(t *testing.T) {
app, router, strategy, _ := NewApiTest(t)
StartDynamic(router, strategy)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?timeout=invalid")
assert.Equal(t, http.StatusBadRequest, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicWithoutNamesOrGroup", func(t *testing.T) {
app, router, strategy, _ := NewApiTest(t)
StartDynamic(router, strategy)
r := PerformRequest(app, "GET", "/api/strategies/dynamic")
assert.Equal(t, http.StatusBadRequest, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicWithNamesAndGroup", func(t *testing.T) {
app, router, strategy, _ := NewApiTest(t)
StartDynamic(router, strategy)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?names=test&group=test")
assert.Equal(t, http.StatusBadRequest, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicThemeNotFound", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSessionGroup(gomock.Any(), "test", gomock.Any()).Return(session(), nil)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test&theme=invalid")
assert.Equal(t, http.StatusNotFound, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicByNames", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSession(gomock.Any(), []string{"test"}, gomock.Any()).Return(session(), nil)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?names=test")
assert.Equal(t, http.StatusOK, r.Code)
assert.Equal(t, SablierStatusReady, r.Header().Get(SablierStatusHeader))
})
t.Run("StartDynamicByGroup", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSessionGroup(gomock.Any(), "test", gomock.Any()).Return(session(), nil)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test")
assert.Equal(t, http.StatusOK, r.Code)
assert.Equal(t, SablierStatusReady, r.Header().Get(SablierStatusHeader))
})
t.Run("StartDynamicErrGroupNotFound", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSessionGroup(gomock.Any(), "test", gomock.Any()).Return(nil, sablier.ErrGroupNotFound{
Group: "test",
AvailableGroups: []string{"test1", "test2"},
})
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test")
assert.Equal(t, http.StatusNotFound, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicError", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSessionGroup(gomock.Any(), "test", gomock.Any()).Return(nil, errors.New("unknown error"))
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test")
assert.Equal(t, http.StatusInternalServerError, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
t.Run("StartDynamicSessionNil", func(t *testing.T) {
app, router, strategy, m := NewApiTest(t)
StartDynamic(router, strategy)
m.EXPECT().RequestSessionGroup(gomock.Any(), "test", gomock.Any()).Return(nil, nil)
r := PerformRequest(app, "GET", "/api/strategies/dynamic?group=test")
assert.Equal(t, http.StatusInternalServerError, r.Code)
assert.Equal(t, rfc7807.JSONMediaType, r.Header().Get("Content-Type"))
})
}