diff --git a/api/v1/testkube.yaml b/api/v1/testkube.yaml index 678abda5cda..1b3211217c0 100644 --- a/api/v1/testkube.yaml +++ b/api/v1/testkube.yaml @@ -185,6 +185,7 @@ paths: operationId: listExecutions parameters: - $ref: "#/components/parameters/TestName" + - $ref: "#/components/parameters/Type" - $ref: "#/components/parameters/TextSearch" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/PageIndex" @@ -1631,6 +1632,14 @@ components: default: "" description: test namespaced name to filter required: false + Type: + in: query + name: type + schema: + type: string + default: "" + description: object type + required: false TextSearch: in: query name: textSearch diff --git a/internal/app/api/v1/server.go b/internal/app/api/v1/server.go index 75c9063f4a7..bed79665fda 100644 --- a/internal/app/api/v1/server.go +++ b/internal/app/api/v1/server.go @@ -197,6 +197,11 @@ func getFilterFromRequest(c *fiber.Ctx) result.Filter { filter = filter.WithStatus(testkube.ExecutionStatus(status)) } + objectType := c.Query("type", "") + if objectType != "" { + filter = filter.WithType(objectType) + } + dFilter := datefilter.NewDateFilter(c.Query("startDate", ""), c.Query("endDate", "")) if dFilter.IsStartValid { filter = filter.WithStartDate(dFilter.Start) diff --git a/internal/pkg/api/repository/result/filter.go b/internal/pkg/api/repository/result/filter.go index d8b65ee9c6d..057620a2311 100644 --- a/internal/pkg/api/repository/result/filter.go +++ b/internal/pkg/api/repository/result/filter.go @@ -15,6 +15,7 @@ type filter struct { pageSize int textSearch string tags []string + objectType string } func NewExecutionsFilter() *filter { @@ -62,6 +63,10 @@ func (f *filter) WithTags(tags []string) *filter { return f } +func (f *filter) WithType(objectType string) *filter { + f.objectType = objectType + return f +} func (f filter) ScriptName() string { return f.scriptName } @@ -110,6 +115,14 @@ func (f filter) TextSearch() string { return f.textSearch } +func (f filter) TypeDefined() bool { + return f.objectType != "" +} + +func (f filter) Type() string { + return f.objectType +} + func (f filter) Tags() []string { return f.tags } diff --git a/internal/pkg/api/repository/result/interface.go b/internal/pkg/api/repository/result/interface.go index cfe169c1208..7ea21e8563b 100644 --- a/internal/pkg/api/repository/result/interface.go +++ b/internal/pkg/api/repository/result/interface.go @@ -24,6 +24,8 @@ type Filter interface { TextSearchDefined() bool TextSearch() string Tags() []string + TypeDefined() bool + Type() string } type Repository interface { diff --git a/internal/pkg/api/repository/result/mongo.go b/internal/pkg/api/repository/result/mongo.go index e9266ca6d68..26d90e4f542 100644 --- a/internal/pkg/api/repository/result/mongo.go +++ b/internal/pkg/api/repository/result/mongo.go @@ -161,7 +161,6 @@ func (r *MongoRepository) EndExecution(ctx context.Context, id string, endTime t } func composeQueryAndOpts(filter Filter) (bson.M, *options.FindOptions) { - query := bson.M{} opts := options.Find() startTimeQuery := bson.M{} @@ -197,6 +196,10 @@ func composeQueryAndOpts(filter Filter) (bson.M, *options.FindOptions) { query["tags"] = filter.Tags() } + if filter.TypeDefined() { + query["scripttype"] = filter.Type() + } + opts.SetSkip(int64(filter.Page() * filter.PageSize())) opts.SetLimit(int64(filter.PageSize())) opts.SetSort(bson.D{{"starttime", -1}})