From 3935d39e6759f4a19198ffe8b6475546028535c6 Mon Sep 17 00:00:00 2001 From: Roman Perekhod Date: Tue, 24 Sep 2024 22:27:36 +0200 Subject: [PATCH 1/3] We fixed the missing folder variable when folder renamed --- changelog/unreleased/fix-acitivity-folder.md | 6 +++ services/activitylog/pkg/service/http.go | 10 ++-- services/activitylog/pkg/service/response.go | 54 ++++++++++++++------ 3 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 changelog/unreleased/fix-acitivity-folder.md diff --git a/changelog/unreleased/fix-acitivity-folder.md b/changelog/unreleased/fix-acitivity-folder.md new file mode 100644 index 0000000000..4e2c27d01b --- /dev/null +++ b/changelog/unreleased/fix-acitivity-folder.md @@ -0,0 +1,6 @@ +Bugfix: Fixed the missing folder variable + +We fixed the missing folder variable when folder renamed. + +https://github.com/owncloud/ocis/pull/10150 +https://github.com/owncloud/ocis/issues/10148 diff --git a/services/activitylog/pkg/service/http.go b/services/activitylog/pkg/service/http.go index d888b9052a..2d8522ba13 100644 --- a/services/activitylog/pkg/service/http.go +++ b/services/activitylog/pkg/service/http.go @@ -134,19 +134,19 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h message = MessageResourceUpdated } ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.FileRef, true), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser), WithSpace(toSpace(ev.FileRef))) + vars, err = s.GetVars(ctx, WithResource(ev.FileRef, true), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser)) case events.FileTouched: message = MessageResourceCreated ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref))) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case events.ContainerCreated: message = MessageResourceCreated ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref))) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case events.ItemTrashed: message = MessageResourceTrashed ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithTrashedResource(ev.Ref, ev.ID), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref))) + vars, err = s.GetVars(ctx, WithTrashedResource(ev.Ref, ev.ID), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case events.ItemMoved: switch isRename(ev.OldReference, ev.Ref) { case true: @@ -154,7 +154,7 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithOldResource(ev.OldReference), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case false: message = MessageResourceMoved - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref))) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) } ts = utils.TSToTime(ev.Timestamp) case events.ShareCreated: diff --git a/services/activitylog/pkg/service/response.go b/services/activitylog/pkg/service/response.go index 72838bd29a..587b1ff7dc 100644 --- a/services/activitylog/pkg/service/response.go +++ b/services/activitylog/pkg/service/response.go @@ -80,6 +80,18 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption { vars["resource"] = Resource{ Name: filepath.Base(ref.GetPath()), } + n := filepath.Base(filepath.Dir(ref.GetPath())) + if n == "." || n == "/" { + s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc) + if err == nil { + n = s.GetName() + } else { + n = "root" + } + } + vars["folder"] = Resource{ + Name: n, + } return err } @@ -88,16 +100,6 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption { Name: info.GetName(), } - parent, err := utils.GetResourceByID(ctx, info.GetParentId(), gwc) - if err != nil { - return err - } - - vars["folder"] = Resource{ - ID: info.GetParentId().GetOpaqueId(), - Name: parent.GetName(), - } - if addSpace { vars["space"] = Resource{ ID: info.GetSpace().GetId().GetOpaqueId(), @@ -105,6 +107,15 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption { } } + parent, err := utils.GetResourceByID(ctx, info.GetParentId(), gwc) + if err != nil { + return err + } + vars["folder"] = Resource{ + ID: info.GetParentId().GetOpaqueId(), + Name: parent.GetName(), + } + return nil } } @@ -126,6 +137,18 @@ func WithTrashedResource(ref *provider.Reference, rid *provider.ResourceId) Acti vars["resource"] = Resource{ Name: filepath.Base(ref.GetPath()), } + n := filepath.Base(filepath.Dir(ref.GetPath())) + if n == "." || n == "/" { + s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc) + if err == nil { + n = s.GetName() + } else { + n = "root" + } + } + vars["folder"] = Resource{ + Name: n, + } resp, err := gwc.ListRecycle(ctx, &provider.ListRecycleRequest{ Ref: ref, @@ -145,6 +168,12 @@ func WithTrashedResource(ref *provider.Reference, rid *provider.ResourceId) Acti ID: storagespace.FormatResourceID(rid), Name: filepath.Base(item.GetRef().GetPath()), } + in := filepath.Base(filepath.Dir(item.GetRef().GetPath())) + if in != "." && in != "/" { + vars["folder"] = Resource{ + Name: in, + } + } return nil } @@ -231,11 +260,6 @@ func WithSharee(uid *user.UserId, gid *group.GroupId) ActivityOption { // WithSpace sets the space variable for an activity func WithSpace(spaceid *provider.StorageSpaceId) ActivityOption { return func(ctx context.Context, gwc gateway.GatewayAPIClient, vars map[string]interface{}) error { - if _, ok := vars["space"]; ok { - // do not override space if already set - return nil - } - s, err := utils.GetSpace(ctx, spaceid.GetOpaqueId(), gwc) if err != nil { vars["space"] = Resource{ From 204e9df249c99b2e854958d3ff9274d6b54233b2 Mon Sep 17 00:00:00 2001 From: Roman Perekhod Date: Wed, 25 Sep 2024 18:54:57 +0200 Subject: [PATCH 2/3] tests updated --- services/activitylog/pkg/service/http.go | 8 +- .../features/apiActivities/activities.feature | 659 ++++++++++++++---- .../apiActivities/shareActivities.feature | 96 ++- 3 files changed, 565 insertions(+), 198 deletions(-) diff --git a/services/activitylog/pkg/service/http.go b/services/activitylog/pkg/service/http.go index 2d8522ba13..6a0f5200b6 100644 --- a/services/activitylog/pkg/service/http.go +++ b/services/activitylog/pkg/service/http.go @@ -134,15 +134,15 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h message = MessageResourceUpdated } ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.FileRef, true), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser)) + vars, err = s.GetVars(ctx, WithResource(ev.FileRef, false), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser)) case events.FileTouched: message = MessageResourceCreated ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case events.ContainerCreated: message = MessageResourceCreated ts = utils.TSToTime(ev.Timestamp) - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case events.ItemTrashed: message = MessageResourceTrashed ts = utils.TSToTime(ev.Timestamp) @@ -154,7 +154,7 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithOldResource(ev.OldReference), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) case false: message = MessageResourceMoved - vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) + vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser)) } ts = utils.TSToTime(ev.Timestamp) case events.ShareCreated: diff --git a/tests/acceptance/features/apiActivities/activities.feature b/tests/acceptance/features/apiActivities/activities.feature index 29cc288334..4092a37aec 100644 --- a/tests/acceptance/features/apiActivities/activities.feature +++ b/tests/acceptance/features/apiActivities/activities.feature @@ -39,8 +39,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -54,19 +63,6 @@ Feature: check activities } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%user_id_pattern%!%user_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -129,8 +125,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder","resource","user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -144,19 +149,6 @@ Feature: check activities } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%user_id_pattern%!%user_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -225,7 +217,7 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["resource", "folder", "user"], "properties": { "resource": { "type": "object", @@ -255,7 +247,7 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["resource", "folder", "user"], "properties": { "resource": { "type": "object", @@ -289,7 +281,7 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["resource","folder","user"], "properties": { "resource": { "type": "object", @@ -304,14 +296,10 @@ Feature: check activities } } }, - "space": { + "folder": { "type": "object", - "required": ["id","name"], + "required": ["name"], "properties": { - "id": { - "type": "string", - "pattern": "^%file_id_pattern%$" - }, "name": { "const": "Alice Hansen" } @@ -363,7 +351,7 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["resource","folder","user"], "properties": { "resource": { "type": "object", @@ -378,14 +366,10 @@ Feature: check activities } } }, - "space": { + "folder": { "type": "object", - "required": ["id","name"], + "required": ["name"], "properties": { - "id": { - "type": "string", - "pattern": "^%file_id_pattern%$" - }, "name": { "const": "Alice Hansen" } @@ -459,6 +443,43 @@ Feature: check activities "properties": { "message": { "const": "{user} added {resource} to {folder}" + }, + "variables": { + "type": "object", + "required": ["folder", "resource", "user"], + "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, + "resource": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "textfile.txt" + } + } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } + } + } } } } @@ -481,8 +502,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -496,19 +526,6 @@ Feature: check activities } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%user_id_pattern%!%user_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -569,6 +586,43 @@ Feature: check activities "properties": { "message": { "const": "{user} added {resource} to {folder}" + }, + "variables": { + "type": "object", + "required": ["folder", "resource", "user"], + "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, + "resource": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "FOLDER" + } + } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } + } + } } } } @@ -591,8 +645,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -606,19 +669,6 @@ Feature: check activities } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%user_id_pattern%!%user_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -920,46 +970,93 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], + "properties": { + "id": { + "type": "string" + }, + "name": { + "const": "New Folder" + } + } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } + } + } + } + } + } + } + }, + { + "type": "object", + "required": ["id", "template", "times"], + "properties": { + "template": { + "type": "object", + "required": ["message", "variables"], + "properties": { + "message": { + "const": "{user} added {resource} to {folder}" + }, + "variables": { + "type": "object", + "required": ["resource", "folder", "user"], + "properties": { + "folder": { + "type": "object", + "required": ["name"], "properties": { "name": { "const": "New Folder" } } - } - } - } - } - } - } - }, - { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {folder}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { + }, "resource": { "type": "object", - "required": ["id", "name"], + "required": ["name"], "properties": { "name": { "const": "Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -980,8 +1077,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -990,6 +1096,19 @@ Feature: check activities "const": "Sub Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1010,8 +1129,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1020,6 +1148,19 @@ Feature: check activities "const": "textfile.txt" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1040,8 +1181,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1050,6 +1200,19 @@ Feature: check activities "const": "textfile.txt" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1070,8 +1233,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1080,6 +1252,19 @@ Feature: check activities "const": "Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1178,8 +1363,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1188,6 +1382,19 @@ Feature: check activities "const": "renamed.txt" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1208,8 +1415,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1218,6 +1434,19 @@ Feature: check activities "const": "Renamed Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1360,8 +1589,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1370,38 +1608,17 @@ Feature: check activities "const": "New Folder" } } - } - } - } - } - }, - "times": { - "type": "object", - "required": ["recordedTime"] - } - } - }, - { - "type": "object", - "required": ["id", "template", "times"], - "properties": { - "template": { - "type": "object", - "required": ["message", "variables"], - "properties": { - "message": { - "const": "{user} added {resource} to {folder}" - }, - "variables": { - "type": "object", - "required": ["resource", "space", "user"], - "properties": { - "resource": { + }, + "user": { "type": "object", - "required": ["id", "name"], + "required": ["id","displayName"], "properties": { - "name": { - "const": "Sub Folder" + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" } } } @@ -1428,8 +1645,73 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, + "resource": { + "type": "object", + "required": ["id", "name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } + } + } + } + } + }, + "times": { + "type": "object", + "required": ["recordedTime"] + } + } + }, + { + "type": "object", + "required": ["id", "template", "times"], + "properties": { + "template": { + "type": "object", + "required": ["message", "variables"], + "properties": { + "message": { + "const": "{user} added {resource} to {folder}" + }, + "variables": { + "type": "object", + "required": ["folder", "resource", "user"], + "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Sub Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1438,6 +1720,19 @@ Feature: check activities "const": "textfile.txt" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1489,8 +1784,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1499,6 +1803,19 @@ Feature: check activities "const": "New Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1523,8 +1840,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1533,6 +1859,19 @@ Feature: check activities "const": "Sub Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1584,8 +1923,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1594,6 +1942,19 @@ Feature: check activities "const": "New Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } @@ -1618,8 +1979,17 @@ Feature: check activities }, "variables": { "type": "object", - "required": ["resource", "space", "user"], + "required": ["folder", "resource", "user"], "properties": { + "folder": { + "type": "object", + "required": ["name"], + "properties": { + "name": { + "const": "New Folder" + } + } + }, "resource": { "type": "object", "required": ["id", "name"], @@ -1628,6 +1998,19 @@ Feature: check activities "const": "Sub Folder" } } + }, + "user": { + "type": "object", + "required": ["id","displayName"], + "properties": { + "id": { + "type": "string", + "pattern": "%user_id_pattern%" + }, + "displayName": { + "const": "Alice Hansen" + } + } } } } diff --git a/tests/acceptance/features/apiActivities/shareActivities.feature b/tests/acceptance/features/apiActivities/shareActivities.feature index 7637bc9d2c..8510cc059f 100644 --- a/tests/acceptance/features/apiActivities/shareActivities.feature +++ b/tests/acceptance/features/apiActivities/shareActivities.feature @@ -543,8 +543,17 @@ Feature: check share activity }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder","resource","user"], "properties": { + "folder": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -554,19 +563,6 @@ Feature: check share activity } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%user_id_pattern%!%user_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -622,8 +618,17 @@ Feature: check share activity }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder","resource","user"], "properties": { + "folder": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "FOLDER" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -633,19 +638,6 @@ Feature: check share activity } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%file_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -682,8 +674,17 @@ Feature: check share activity }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder","resource","user"], "properties": { + "folder": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "FOLDER" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -693,19 +694,6 @@ Feature: check share activity } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%file_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], @@ -742,8 +730,17 @@ Feature: check share activity }, "variables": { "type": "object", - "required": ["resource","space","user"], + "required": ["folder","resource","user"], "properties": { + "folder": { + "type": "object", + "required": ["id","name"], + "properties": { + "name": { + "const": "Alice Hansen" + } + } + }, "resource": { "type": "object", "required": ["id","name"], @@ -753,19 +750,6 @@ Feature: check share activity } } }, - "space": { - "type": "object", - "required": ["id","name"], - "properties": { - "id": { - "type": "string", - "pattern": "^%file_id_pattern%$" - }, - "name": { - "const": "Alice Hansen" - } - } - }, "user": { "type": "object", "required": ["id","displayName"], From c30b4aeb54eb38280f1ffbdd42dba6160e73fa3b Mon Sep 17 00:00:00 2001 From: Roman Perekhod Date: Thu, 26 Sep 2024 12:26:03 +0200 Subject: [PATCH 3/3] the code duplication was reduced --- services/activitylog/pkg/service/response.go | 33 +++++++++----------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/services/activitylog/pkg/service/response.go b/services/activitylog/pkg/service/response.go index 587b1ff7dc..2dfdd67d32 100644 --- a/services/activitylog/pkg/service/response.go +++ b/services/activitylog/pkg/service/response.go @@ -80,15 +80,7 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption { vars["resource"] = Resource{ Name: filepath.Base(ref.GetPath()), } - n := filepath.Base(filepath.Dir(ref.GetPath())) - if n == "." || n == "/" { - s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc) - if err == nil { - n = s.GetName() - } else { - n = "root" - } - } + n := getFolderName(ctx, gwc, ref) vars["folder"] = Resource{ Name: n, } @@ -137,15 +129,7 @@ func WithTrashedResource(ref *provider.Reference, rid *provider.ResourceId) Acti vars["resource"] = Resource{ Name: filepath.Base(ref.GetPath()), } - n := filepath.Base(filepath.Dir(ref.GetPath())) - if n == "." || n == "/" { - s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc) - if err == nil { - n = s.GetName() - } else { - n = "root" - } - } + n := getFolderName(ctx, gwc, ref) vars["folder"] = Resource{ Name: n, } @@ -334,6 +318,19 @@ func (s *ActivitylogService) GetVars(ctx context.Context, opts ...ActivityOption return vars, nil } +func getFolderName(ctx context.Context, gwc gateway.GatewayAPIClient, ref *provider.Reference) string { + n := filepath.Base(filepath.Dir(ref.GetPath())) + if n == "." || n == "/" { + s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc) + if err == nil { + n = s.GetName() + } else { + n = "root" + } + } + return n +} + func mapField(val string) string { switch val { case "TYPE_PERMISSIONS", "permission":