mirror of
https://github.com/larksuite/cli.git
synced 2026-08-03 08:32:46 +08:00
fix(e2e/wiki): pass obj_type when deleting wiki nodes in cleanup (#687)
* fix(e2e/wiki): pass obj_type when deleting wiki nodes in cleanup
The wiki node DELETE endpoint now rejects requests without obj_type
(API error 99992402: "obj_type is required"), causing TestWiki_NodeWorkflow
cleanup to fail on every run. Forward the obj_type from the create/copy
response into the delete query params so cleanup succeeds.
* fix(e2e/wiki): delete cleanup wiki nodes via drive v1 endpoint
The wiki v2 DELETE /spaces/{space_id}/nodes/{node_token} endpoint is
undocumented and rejects requests with `obj_type is required` even when
obj_type is forwarded as a query parameter (see actions run #25005966144).
Switch cleanup to the documented path: delete the underlying drive file
via DELETE /drive/v1/files/{obj_token}?type=<obj_type>, which removes the
backing document and the wiki node in one call.
Change-Id: Ieb93b1f92ea758d8b80bcfdd4f20b2be8f35a0bd
* fix(e2e/wiki): pass obj_type to wiki delete in body, not query
Previous attempts:
- query (?obj_type=docx) → API still rejects with 99992402 obj_type
required (the wiki delete-node endpoint reads it from the body, not
the query string).
- drive v1 fallback → bot identity does not have drive write scope and
returns 1061004 forbidden, so we cannot reuse drive's delete API for
the cleanup helpers.
This commit is contained in:
@@ -29,14 +29,12 @@ func createWikiNode(t *testing.T, parentT *testing.T, ctx context.Context, space
|
||||
|
||||
nodeToken := node.Get("node_token").String()
|
||||
require.NotEmpty(t, nodeToken, "stdout:\n%s", result.Stdout)
|
||||
objType := node.Get("obj_type").String()
|
||||
parentT.Cleanup(func() {
|
||||
cleanupCtx, cancel := clie2e.CleanupContext()
|
||||
defer cancel()
|
||||
|
||||
deleteResult, deleteErr := clie2e.RunCmd(cleanupCtx, clie2e.Request{
|
||||
Args: []string{"api", "delete", "/open-apis/wiki/v2/spaces/" + spaceID + "/nodes/" + nodeToken},
|
||||
DefaultAs: "bot",
|
||||
})
|
||||
deleteResult, deleteErr := deleteWikiNode(cleanupCtx, spaceID, nodeToken, objType)
|
||||
clie2e.ReportCleanupFailure(parentT, "delete wiki node "+nodeToken, deleteResult, deleteErr)
|
||||
})
|
||||
|
||||
@@ -90,6 +88,18 @@ func listWikiSpaces(t *testing.T, ctx context.Context, pageSize int) gjson.Resul
|
||||
return gjson.Parse(result.Stdout)
|
||||
}
|
||||
|
||||
// deleteWikiNode removes a wiki space node. The DELETE endpoint requires
|
||||
// obj_type as a body field (validation error 99992402 if omitted), so
|
||||
// pass it via --data rather than --params even though DELETE bodies are
|
||||
// uncommon.
|
||||
func deleteWikiNode(ctx context.Context, spaceID, nodeToken, objType string) (*clie2e.Result, error) {
|
||||
return clie2e.RunCmd(ctx, clie2e.Request{
|
||||
Args: []string{"api", "delete", "/open-apis/wiki/v2/spaces/" + spaceID + "/nodes/" + nodeToken},
|
||||
DefaultAs: "bot",
|
||||
Data: map[string]any{"obj_type": objType},
|
||||
})
|
||||
}
|
||||
|
||||
func findWikiNodeByToken(t *testing.T, ctx context.Context, spaceID string, nodeToken string) gjson.Result {
|
||||
t.Helper()
|
||||
|
||||
|
||||
@@ -118,16 +118,14 @@ func TestWiki_NodeWorkflow(t *testing.T) {
|
||||
|
||||
copiedNodeToken = gjson.Get(result.Stdout, "data.node.node_token").String()
|
||||
copiedSpaceID = gjson.Get(result.Stdout, "data.node.space_id").String()
|
||||
copiedObjType := gjson.Get(result.Stdout, "data.node.obj_type").String()
|
||||
require.NotEmpty(t, copiedNodeToken)
|
||||
require.NotEmpty(t, copiedSpaceID)
|
||||
parentT.Cleanup(func() {
|
||||
cleanupCtx, cancel := clie2e.CleanupContext()
|
||||
defer cancel()
|
||||
|
||||
deleteResult, deleteErr := clie2e.RunCmd(cleanupCtx, clie2e.Request{
|
||||
Args: []string{"api", "delete", "/open-apis/wiki/v2/spaces/" + copiedSpaceID + "/nodes/" + copiedNodeToken},
|
||||
DefaultAs: "bot",
|
||||
})
|
||||
deleteResult, deleteErr := deleteWikiNode(cleanupCtx, copiedSpaceID, copiedNodeToken, copiedObjType)
|
||||
clie2e.ReportCleanupFailure(parentT, "delete copied wiki node "+copiedNodeToken, deleteResult, deleteErr)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user