iris/versioning/version_test.go
Gerasimos (Makis) Maropoulos b409f7807e
New feature: versioning.Aliases
Thanks @mulyawansentosa and @remopavithran for your donates ❤️
2021-01-06 01:52:39 +02:00

99 lines
3.3 KiB
Go

package versioning_test
import (
"testing"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/httptest"
"github.com/kataras/iris/v12/versioning"
)
func TestGetVersion(t *testing.T) {
app := iris.New()
writeVesion := func(ctx iris.Context) {
ctx.WriteString(versioning.GetVersion(ctx))
}
app.Get("/", writeVesion)
app.Get("/manual", func(ctx iris.Context) {
versioning.SetVersion(ctx, "11.0.5")
ctx.Next()
}, writeVesion)
e := httptest.New(t, app)
e.GET("/").WithHeader(versioning.AcceptVersionHeaderKey, "1.0").Expect().
Status(iris.StatusOK).Body().Equal("1.0")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "application/vnd.api+json; version=2.1").Expect().
Status(iris.StatusOK).Body().Equal("2.1")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "application/vnd.api+json; version=2.1 ;other=dsa").Expect().
Status(iris.StatusOK).Body().Equal("2.1")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "version=2.1").Expect().
Status(iris.StatusOK).Body().Equal("2.1")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "version=1").Expect().
Status(iris.StatusOK).Body().Equal("1")
// unknown versions.
e.GET("/").WithHeader(versioning.AcceptVersionHeaderKey, "").Expect().
Status(iris.StatusOK).Body().Equal("")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "application/vnd.api+json; version=").Expect().
Status(iris.StatusOK).Body().Equal("")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "application/vnd.api+json; version= ;other=dsa").Expect().
Status(iris.StatusOK).Body().Equal("")
e.GET("/").WithHeader(versioning.AcceptHeaderKey, "version=").Expect().
Status(iris.StatusOK).Body().Equal("")
e.GET("/manual").Expect().Status(iris.StatusOK).Body().Equal("11.0.5")
}
func TestVersionAliases(t *testing.T) {
app := iris.New()
api := app.Party("/api")
api.Use(versioning.Aliases(map[string]string{
versioning.Empty: "1",
"stage": "2",
}))
writeVesion := func(ctx iris.Context) {
ctx.WriteString(versioning.GetVersion(ctx))
}
// A group without registration order.
v3 := versioning.NewGroup(api, ">= 3, < 4")
v3.Get("/", writeVesion)
v1 := versioning.NewGroup(api, ">= 1, < 2")
v1.Get("/", writeVesion)
v2 := versioning.NewGroup(api, ">= 2, < 3")
v2.Get("/", writeVesion)
api.Get("/manual", func(ctx iris.Context) {
versioning.SetVersion(ctx, "12.0.0")
ctx.Next()
}, writeVesion)
e := httptest.New(t, app)
// Make sure the SetVersion still works.
e.GET("/api/manual").Expect().Status(iris.StatusOK).Body().Equal("12.0.0")
// Test Empty default.
e.GET("/api").WithHeader(versioning.AcceptVersionHeaderKey, "").Expect().
Status(iris.StatusOK).Body().Equal("1.0.0")
// Test NotFound error, aliases are not responsible for that.
e.GET("/api").WithHeader(versioning.AcceptVersionHeaderKey, "4").Expect().
Status(iris.StatusNotImplemented).Body().Equal("version not found")
// Test "stage" alias.
e.GET("/api").WithHeader(versioning.AcceptVersionHeaderKey, "stage").Expect().
Status(iris.StatusOK).Body().Equal("2.0.0")
// Test version 2.
e.GET("/api").WithHeader(versioning.AcceptVersionHeaderKey, "2").Expect().
Status(iris.StatusOK).Body().Equal("2.0.0")
// Test version 3 (registered first).
e.GET("/api").WithHeader(versioning.AcceptVersionHeaderKey, "3.1").Expect().
Status(iris.StatusOK).Body().Equal("3.1.0")
}