(t *testing.T, ctx context.Context, tasklistGUID string, taskGUID string)
| 75 | } |
| 76 | |
| 77 | func findTaskInTasklist(t *testing.T, ctx context.Context, tasklistGUID string, taskGUID string) gjson.Result { |
| 78 | t.Helper() |
| 79 | |
| 80 | require.NotEmpty(t, tasklistGUID, "tasklist GUID is required") |
| 81 | require.NotEmpty(t, taskGUID, "task GUID is required") |
| 82 | |
| 83 | pageToken := "" |
| 84 | seenPageTokens := map[string]struct{}{} |
| 85 | for { |
| 86 | params := map[string]any{ |
| 87 | "tasklist_guid": tasklistGUID, |
| 88 | "page_size": 50, |
| 89 | } |
| 90 | if pageToken != "" { |
| 91 | if _, seen := seenPageTokens[pageToken]; seen { |
| 92 | t.Fatalf("tasklist task pagination loop detected for tasklist %q, repeated page_token %q", tasklistGUID, pageToken) |
| 93 | } |
| 94 | seenPageTokens[pageToken] = struct{}{} |
| 95 | params["page_token"] = pageToken |
| 96 | } |
| 97 | |
| 98 | result, err := clie2e.RunCmd(ctx, clie2e.Request{ |
| 99 | Args: []string{"task", "tasklists", "tasks"}, |
| 100 | DefaultAs: "bot", |
| 101 | Params: params, |
| 102 | }) |
| 103 | require.NoError(t, err) |
| 104 | result.AssertExitCode(t, 0) |
| 105 | result.AssertStdoutStatus(t, true) |
| 106 | |
| 107 | taskItem := gjson.Get(result.Stdout, `data.items.#(guid=="`+taskGUID+`")`) |
| 108 | if taskItem.Exists() { |
| 109 | return taskItem |
| 110 | } |
| 111 | |
| 112 | hasMore := gjson.Get(result.Stdout, "data.has_more").Bool() |
| 113 | pageToken = gjson.Get(result.Stdout, "data.page_token").String() |
| 114 | if !hasMore || pageToken == "" { |
| 115 | t.Fatalf("task %q not found in tasklist %q pages, last stdout:\n%s", taskGUID, tasklistGUID, result.Stdout) |
| 116 | } |
| 117 | } |
| 118 | } |
no test coverage detected