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:
liangshuo-1
2026-04-28 00:53:40 +08:00
committed by GitHub
parent a16eb24ba9
commit 17a85d319d
2 changed files with 16 additions and 8 deletions

View File

@@ -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()

View File

@@ -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)
})
})