Skip to content

Commit

Permalink
Merge branch 'add_cancel_task_api_for_v0.30.0' into add_swap_indexes_…
Browse files Browse the repository at this point in the history
…api_for_v0.30.0
  • Loading branch information
alallema committed Dec 14, 2022
2 parents 6d8eaed + d6bce8a commit 15f1b43
Show file tree
Hide file tree
Showing 4 changed files with 781 additions and 18 deletions.
50 changes: 47 additions & 3 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ type ClientInterface interface {
IsHealthy() bool
GetTask(taskUID int64) (resp *Task, err error)
GetTasks(param *TasksQuery) (resp *TaskResult, err error)
CancelTasks(param *TasksQuery) (resp *TaskInfo, err error)
CancelTasks(param *CancelTasksQuery) (resp *TaskInfo, err error)
DeleteTasks(param *DeleteTasksQuery) (resp *TaskInfo, err error)
SwapIndexes(param []SwapIndexesParams) (resp *TaskInfo, err error)
WaitForTask(taskUID int64, options ...WaitParams) (*Task, error)
GenerateTenantToken(APIKeyUID string, searchRules map[string]interface{}, options *TenantTokenOptions) (resp string, err error)
Expand Down Expand Up @@ -287,7 +288,7 @@ func (c *Client) GetTasks(param *TasksQuery) (resp *TaskResult, err error) {
return resp, nil
}

func (c *Client) CancelTasks(param *TasksQuery) (resp *TaskInfo, err error) {
func (c *Client) CancelTasks(param *CancelTasksQuery) (resp *TaskInfo, err error) {
resp = &TaskInfo{}
req := internalRequest{
endpoint: "/tasks/cancel",
Expand All @@ -299,7 +300,50 @@ func (c *Client) CancelTasks(param *TasksQuery) (resp *TaskInfo, err error) {
functionName: "CancelTasks",
}
if param != nil {
encodeTasksQuery(param, &req)
paramToSend := &TasksQuery{
UIDS: param.UIDS,
IndexUIDS: param.IndexUIDS,
Statuses: param.Statuses,
Types: param.Types,
BeforeEnqueuedAt: param.BeforeEnqueuedAt,
AfterEnqueuedAt: param.AfterEnqueuedAt,
BeforeStartedAt: param.BeforeStartedAt,
AfterStartedAt: param.AfterStartedAt,
}
encodeTasksQuery(paramToSend, &req)
}
if err := c.executeRequest(req); err != nil {
return nil, err
}
return resp, nil
}

func (c *Client) DeleteTasks(param *DeleteTasksQuery) (resp *TaskInfo, err error) {
resp = &TaskInfo{}
req := internalRequest{
endpoint: "/tasks",
method: http.MethodDelete,
withRequest: nil,
withResponse: &resp,
withQueryParams: map[string]string{},
acceptedStatusCodes: []int{http.StatusOK},
functionName: "DeleteTasks",
}
if param != nil {
paramToSend := &TasksQuery{
UIDS: param.UIDS,
IndexUIDS: param.IndexUIDS,
Statuses: param.Statuses,
Types: param.Types,
CanceledBy: param.CanceledBy,
BeforeEnqueuedAt: param.BeforeEnqueuedAt,
AfterEnqueuedAt: param.AfterEnqueuedAt,
BeforeStartedAt: param.BeforeStartedAt,
AfterStartedAt: param.AfterStartedAt,
BeforeFinishedAt: param.BeforeFinishedAt,
AfterFinishedAt: param.AfterFinishedAt,
}
encodeTasksQuery(paramToSend, &req)
}
if err := c.executeRequest(req); err != nil {
return nil, err
Expand Down
161 changes: 147 additions & 14 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -833,19 +833,28 @@ func TestClient_CancelTasks(t *testing.T) {
type args struct {
UID string
client *Client
query *TasksQuery
query *CancelTasksQuery
}
tests := []struct {
name string
args args
want string
}{
{
name: "TestBasicCancelTasks",
name: "TestCancelTasksWithNoFilters",
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: nil,
},
want: "",
},
{
name: "TestCancelTasksWithStatutes",
args: args{
UID: "indexUID",
client: defaultClient,
query: &CancelTasksQuery{
Statuses: []string{"succeeded"},
},
},
Expand All @@ -856,7 +865,7 @@ func TestClient_CancelTasks(t *testing.T) {
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
IndexUIDS: []string{"0"},
},
},
Expand All @@ -867,7 +876,7 @@ func TestClient_CancelTasks(t *testing.T) {
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
IndexUIDS: []string{"0", "1"},
},
},
Expand All @@ -878,7 +887,7 @@ func TestClient_CancelTasks(t *testing.T) {
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
UIDS: []int64{0},
},
},
Expand All @@ -889,7 +898,7 @@ func TestClient_CancelTasks(t *testing.T) {
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
UIDS: []int64{0, 1},
},
},
Expand All @@ -900,29 +909,152 @@ func TestClient_CancelTasks(t *testing.T) {
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
BeforeEnqueuedAt: time.Now(),
},
},
want: strings.NewReplacer(":", "%3A").Replace("?beforeEnqueuedAt=" + time.Now().Format("2006-01-02T15:04:05Z")),
},
{
name: "TestCancelTasksWithCanceledByFilter",
name: "TestCancelTasksWithParameters",
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &CancelTasksQuery{
Statuses: []string{"enqueued"},
IndexUIDS: []string{"indexUID"},
UIDS: []int64{1},
AfterEnqueuedAt: time.Now(),
},
},
want: "?afterEnqueuedAt=" + strings.NewReplacer(":", "%3A").Replace(time.Now().Format("2006-01-02T15:04:05Z")) + "&indexUids=indexUID&statuses=enqueued&uids=1",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.args.client
t.Cleanup(cleanup(c))

gotResp, err := c.CancelTasks(tt.args.query)
if tt.args.query == nil {
require.Error(t, err)
require.Equal(t, "missing_task_filters",
err.(*Error).MeilisearchApiError.Code)
} else {
require.NoError(t, err)

_, err = c.WaitForTask(gotResp.TaskUID)
require.NoError(t, err)

gotTask, err := c.GetTask(gotResp.TaskUID)
require.NoError(t, err)

require.NotNil(t, gotResp.Status)
require.NotNil(t, gotResp.Type)
require.NotNil(t, gotResp.TaskUID)
require.NotNil(t, gotResp.EnqueuedAt)
require.Equal(t, "", gotResp.IndexUID)
require.Equal(t, "taskCancelation", gotResp.Type)
require.Equal(t, tt.want, gotTask.Details.OriginalFilter)
}
})
}
}

func TestClient_DeleteTasks(t *testing.T) {
type args struct {
UID string
client *Client
query *DeleteTasksQuery
}
tests := []struct {
name string
args args
want string
}{
{
name: "TestBasicDeleteTasks",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
Statuses: []string{"enqueued"},
},
},
want: "?statuses=enqueued",
},
{
name: "TestDeleteTasksWithUidFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
UIDS: []int64{1},
},
},
want: "?uids=1",
},
{
name: "TestDeleteTasksWithMultipleUidsFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
UIDS: []int64{0, 1},
},
},
want: "?uids=0%2C1",
},
{
name: "TestDeleteTasksWithIndexUidFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
IndexUIDS: []string{"0"},
},
},
want: "?indexUids=0",
},
{
name: "TestDeleteTasksWithMultipleIndexUidsFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
IndexUIDS: []string{"0", "1"},
},
},
want: "?indexUids=0%2C1",
},
{
name: "TestDeleteTasksWithDateFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
BeforeEnqueuedAt: time.Now(),
},
},
want: strings.NewReplacer(":", "%3A").Replace("?beforeEnqueuedAt=" + time.Now().Format("2006-01-02T15:04:05Z")),
},
{
name: "TestDeleteTasksWithCanceledByFilter",
args: args{
UID: "indexUID",
client: defaultClient,
query: &DeleteTasksQuery{
CanceledBy: []int64{1},
},
},
want: "?canceledBy=1",
},
{
name: "TestCancelTasksWithParameters",
name: "TestDeleteTasksWithParameters",
args: args{
UID: "indexUID",
client: defaultClient,
query: &TasksQuery{
query: &DeleteTasksQuery{
Statuses: []string{"enqueued"},
IndexUIDS: []string{"indexUID"},
UIDS: []int64{1},
Expand All @@ -937,7 +1069,7 @@ func TestClient_CancelTasks(t *testing.T) {
c := tt.args.client
t.Cleanup(cleanup(c))

gotResp, err := c.CancelTasks(tt.args.query)
gotResp, err := c.DeleteTasks(tt.args.query)
require.NoError(t, err)

_, err = c.WaitForTask(gotResp.TaskUID)
Expand All @@ -951,7 +1083,8 @@ func TestClient_CancelTasks(t *testing.T) {
require.NotNil(t, gotResp.TaskUID)
require.NotNil(t, gotResp.EnqueuedAt)
require.Equal(t, "", gotResp.IndexUID)
require.Equal(t, "taskCancelation", gotResp.Type)
require.Equal(t, "taskDeletion", gotResp.Type)
require.NotNil(t, gotTask.Details.OriginalFilter)
require.Equal(t, tt.want, gotTask.Details.OriginalFilter)
})
}
Expand Down
29 changes: 28 additions & 1 deletion types.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ type TaskInfo struct {
EnqueuedAt time.Time `json:"enqueuedAt"`
}

// TasksQuery is the request body for list documents method
// TasksQuery is a list of filter available to send as query parameters
type TasksQuery struct {
UIDS []int64
Limit int64
Expand All @@ -161,6 +161,33 @@ type TasksQuery struct {
AfterFinishedAt time.Time
}

// CancelTasksQuery is a list of filter available to send as query parameters
type CancelTasksQuery struct {
UIDS []int64
IndexUIDS []string
Statuses []string
Types []string
BeforeEnqueuedAt time.Time
AfterEnqueuedAt time.Time
BeforeStartedAt time.Time
AfterStartedAt time.Time
}

// DeleteTasksQuery is a list of filter available to send as query parameters
type DeleteTasksQuery struct {
UIDS []int64
IndexUIDS []string
Statuses []string
Types []string
CanceledBy []int64
BeforeEnqueuedAt time.Time
AfterEnqueuedAt time.Time
BeforeStartedAt time.Time
AfterStartedAt time.Time
BeforeFinishedAt time.Time
AfterFinishedAt time.Time
}

type Details struct {
ReceivedDocuments int64 `json:"receivedDocuments,omitempty"`
IndexedDocuments int64 `json:"indexedDocuments,omitempty"`
Expand Down
Loading

0 comments on commit 15f1b43

Please sign in to comment.