From 0c68b38f53c2d9a656cd00d8899b9e715a3d3674 Mon Sep 17 00:00:00 2001
From: Ivan Sebastian <ivantedja@gmail.com>
Date: Mon, 8 Apr 2024 16:54:09 +0000
Subject: [PATCH] Add "member_events" group hook to be set via REST API

---
 doc/api/groups.md                                          | 3 +++
 ee/lib/api/group_hooks.rb                                  | 1 +
 ee/lib/ee/api/entities/group_hook.rb                       | 1 +
 ee/spec/factories/group_hooks.rb                           | 1 +
 ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json | 4 ++++
 ee/spec/requests/api/group_hooks_spec.rb                   | 1 +
 6 files changed, 11 insertions(+)

diff --git a/doc/api/groups.md b/doc/api/groups.md
index 1454946eb2fed..0c7914b7362f9 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -1597,6 +1597,7 @@ GET /groups/:id/hooks/:hook_id
   "deployment_events": true,
   "releases_events": true,
   "subgroup_events": true,
+  "member_events": true,
   "enable_ssl_verification": true,
   "repository_update_events": false,
   "alert_status": "executable",
@@ -1634,6 +1635,7 @@ POST /groups/:id/hooks
 | `deployment_events`          | boolean        | no       | Trigger hook on deployment events |
 | `releases_events`            | boolean        | no       | Trigger hook on release events |
 | `subgroup_events`            | boolean        | no       | Trigger hook on subgroup events |
+| `member_events`              | boolean        | no       | Trigger hook on member events |
 | `enable_ssl_verification`    | boolean        | no       | Do SSL verification when triggering the hook |
 | `token`                      | string         | no       | Secret token to validate received payloads; not returned in the response |
 | `resource_access_token_events` | boolean         | no       | Trigger hook on project access token expiry events. |
@@ -1666,6 +1668,7 @@ PUT /groups/:id/hooks/:hook_id
 | `deployment_events`          | boolean        | no       | Trigger hook on deployment events. |
 | `releases_events`            | boolean        | no       | Trigger hook on release events. |
 | `subgroup_events`            | boolean        | no       | Trigger hook on subgroup events. |
+| `member_events`              | boolean        | no       | Trigger hook on member events. |
 | `enable_ssl_verification`    | boolean        | no       | Do SSL verification when triggering the hook. |
 | `service_access_tokens_expiration_enforced` | boolean | no | Require service account access tokens to have an expiration date. |
 | `token`                      | string         | no       | Secret token to validate received payloads. Not returned in the response. When you change the webhook URL, the secret token is reset and not retained. |
diff --git a/ee/lib/api/group_hooks.rb b/ee/lib/api/group_hooks.rb
index 7f7c68b6f0938..d087489608da5 100644
--- a/ee/lib/api/group_hooks.rb
+++ b/ee/lib/api/group_hooks.rb
@@ -35,6 +35,7 @@ def hook_scope
         optional :subgroup_events, type: Boolean, desc: "Trigger hook on subgroup events"
         optional :emoji_events, type: Boolean, desc: "Trigger hook on emoji events"
         optional :resource_access_token_events, type: Boolean, desc: "Trigger hook on group access token expiry events"
+        optional :member_events, type: Boolean, desc: "Trigger hook on member events"
         optional :enable_ssl_verification, type: Boolean, desc: "Do SSL verification when triggering the hook"
         optional :token, type: String, desc: "Secret token to validate received payloads; this will not be returned in the response"
         optional :custom_webhook_template, type: String, desc: "Custom template for the request payload"
diff --git a/ee/lib/ee/api/entities/group_hook.rb b/ee/lib/ee/api/entities/group_hook.rb
index 0bb3776890ebd..b4810b83d039f 100644
--- a/ee/lib/ee/api/entities/group_hook.rb
+++ b/ee/lib/ee/api/entities/group_hook.rb
@@ -18,6 +18,7 @@ class GroupHook < ::API::Entities::Hook
         expose :push_events_branch_filter, documentation: { type: 'string', example: 'my-branch-*' }
         expose :emoji_events, documentation: { type: 'boolean' }
         expose :resource_access_token_events, documentation: { type: 'boolean' }
+        expose :member_events, documentation: { type: 'boolean' }
       end
     end
   end
diff --git a/ee/spec/factories/group_hooks.rb b/ee/spec/factories/group_hooks.rb
index ceb297ba7d3dc..6b3a482596757 100644
--- a/ee/spec/factories/group_hooks.rb
+++ b/ee/spec/factories/group_hooks.rb
@@ -21,6 +21,7 @@
       subgroup_events { true }
       emoji_events { true }
       resource_access_token_events { true }
+      member_events { true }
     end
   end
 end
diff --git a/ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json b/ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json
index f953ffc353977..befb98d647763 100644
--- a/ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json
+++ b/ee/spec/fixtures/api/schemas/public_api/v4/group_hook.json
@@ -22,6 +22,7 @@
     "releases_events",
     "subgroup_events",
     "emoji_events",
+    "member_events",
     "alert_status",
     "disabled_until",
     "url_variables",
@@ -105,6 +106,9 @@
     "resource_access_token_events": {
       "type": "boolean"
     },
+    "member_events": {
+      "type": "boolean"
+    },
     "alert_status": {
       "type": "string",
       "enum": [
diff --git a/ee/spec/requests/api/group_hooks_spec.rb b/ee/spec/requests/api/group_hooks_spec.rb
index eea739a19f355..42edb8f2f3990 100644
--- a/ee/spec/requests/api/group_hooks_spec.rb
+++ b/ee/spec/requests/api/group_hooks_spec.rb
@@ -59,6 +59,7 @@ def event_names
         subgroup_events
         emoji_events
         resource_access_token_events
+        member_events
       ]
     end
 
-- 
GitLab