mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat: Handle scheduled request events in addons (#5403)
- Create 2 new events to replace the SCHEDULED_CHANGE_REQUEST_EXECUTED event - Handle the 3 events in slack-app and webhook addon definitions 3 events handled: - CHANGE_REQUEST_SCHEDULED - CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS - CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE Closes # [1-1555](https://linear.app/unleash/issue/1-1555/update-change-request-scheduled-and-scheduled-change-request-executed) Note: SCHEDULED_CHANGE_REQUEST_EXECUTED will be removed in follow up PR not to break current enterprise build --------- Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
		
							parent
							
								
									916e4c99b1
								
							
						
					
					
						commit
						2e1790985c
					
				| @ -7,6 +7,13 @@ exports[`Should format specialised text for events when IPs changed 1`] = ` | ||||
| } | ||||
| `; | ||||
| 
 | ||||
| exports[`Should format specialised text for events when change request is scheduled 1`] = ` | ||||
| { | ||||
|   "text": "*user@company.com* scheduled change request *[#1](unleashUrl/projects/my-other-project/change-requests/1)* for feature toggle *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in *production* environment in project *[my-other-project](unleashUrl/projects/my-other-project)* to be applied at  in project *my-other-project*", | ||||
|   "url": "unleashUrl/projects/my-other-project/change-requests/1", | ||||
| } | ||||
| `; | ||||
| 
 | ||||
| exports[`Should format specialised text for events when constraints and rollout percentage and stickiness changed 1`] = ` | ||||
| { | ||||
|   "text": "*user@company.com* updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *[my-other-project](unleashUrl/projects/my-other-project)* by updating strategy *flexibleRollout* in *production* stickiness from default to random; rollout from 67% to 32%; constraints from empty set of constraints to [appName is one of (x,y)]", | ||||
| @ -154,6 +161,20 @@ exports[`Should format specialised text for events when rollout percentage chang | ||||
| } | ||||
| `; | ||||
| 
 | ||||
| exports[`Should format specialised text for events when scheduled change request fails  1`] = ` | ||||
| { | ||||
|   "text": "*Failed* to apply the scheduled change request *[#1](unleashUrl/projects/my-other-project/change-requests/1)* for feature toggle *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in *production* environment in project *[my-other-project](unleashUrl/projects/my-other-project)* by *user@company.com* in project *my-other-project*.", | ||||
|   "url": "unleashUrl/projects/my-other-project/change-requests/1", | ||||
| } | ||||
| `; | ||||
| 
 | ||||
| exports[`Should format specialised text for events when scheduled change request succeeds  1`] = ` | ||||
| { | ||||
|   "text": "*Successfully* applied the scheduled change request *[#1](unleashUrl/projects/my-other-project/change-requests/1)* for feature toggle *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in *production* environment in project *[my-other-project](unleashUrl/projects/my-other-project)* by *user@company.com* in project *my-other-project*.", | ||||
|   "url": "unleashUrl/projects/my-other-project/change-requests/1", | ||||
| } | ||||
| `; | ||||
| 
 | ||||
| exports[`Should format specialised text for events when stickiness changed 1`] = ` | ||||
| { | ||||
|   "text": "*user@company.com* updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *[my-other-project](unleashUrl/projects/my-other-project)* by updating strategy *flexibleRollout* in *production* stickiness from default to random", | ||||
|  | ||||
| @ -1,4 +1,7 @@ | ||||
| import { | ||||
|     CHANGE_REQUEST_SCHEDULED, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|     FEATURE_STRATEGY_ADD, | ||||
|     FEATURE_STRATEGY_REMOVE, | ||||
|     FEATURE_STRATEGY_UPDATE, | ||||
| @ -481,6 +484,57 @@ const testCases: [string, IEvent][] = [ | ||||
|             environment: 'production', | ||||
|         }, | ||||
|     ], | ||||
|     [ | ||||
|         'when change request is scheduled', | ||||
|         { | ||||
|             id: 920, | ||||
|             type: CHANGE_REQUEST_SCHEDULED, | ||||
|             createdBy: 'user@company.com', | ||||
|             createdAt: new Date('2022-06-01T10:03:11.549Z'), | ||||
|             data: { | ||||
|                 changeRequestId: 1, | ||||
|             }, | ||||
|             preData: {}, | ||||
|             tags: [], | ||||
|             featureName: 'new-feature', | ||||
|             project: 'my-other-project', | ||||
|             environment: 'production', | ||||
|         }, | ||||
|     ], | ||||
|     [ | ||||
|         'when scheduled change request succeeds ', | ||||
|         { | ||||
|             id: 920, | ||||
|             type: CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|             createdBy: 'user@company.com', | ||||
|             createdAt: new Date('2022-06-01T10:03:11.549Z'), | ||||
|             data: { | ||||
|                 changeRequestId: 1, | ||||
|             }, | ||||
|             preData: {}, | ||||
|             tags: [], | ||||
|             featureName: 'new-feature', | ||||
|             project: 'my-other-project', | ||||
|             environment: 'production', | ||||
|         }, | ||||
|     ], | ||||
|     [ | ||||
|         'when scheduled change request fails ', | ||||
|         { | ||||
|             id: 920, | ||||
|             type: CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|             createdBy: 'user@company.com', | ||||
|             createdAt: new Date('2022-06-01T10:03:11.549Z'), | ||||
|             data: { | ||||
|                 changeRequestId: 1, | ||||
|             }, | ||||
|             preData: {}, | ||||
|             tags: [], | ||||
|             featureName: 'new-feature', | ||||
|             project: 'my-other-project', | ||||
|             environment: 'production', | ||||
|         }, | ||||
|     ], | ||||
| ]; | ||||
| 
 | ||||
| testCases.forEach(([description, event]) => | ||||
|  | ||||
| @ -55,6 +55,9 @@ import { | ||||
|     USER_CREATED, | ||||
|     USER_DELETED, | ||||
|     USER_UPDATED, | ||||
|     CHANGE_REQUEST_SCHEDULED, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
| } from '../types'; | ||||
| 
 | ||||
| interface IEventData { | ||||
| @ -140,6 +143,18 @@ const EVENT_MAP: Record<string, IEventData> = { | ||||
|         action: '*{{user}}* sent to review change request {{changeRequest}}', | ||||
|         path: '/projects/{{event.project}}/change-requests/{{event.data.changeRequestId}}', | ||||
|     }, | ||||
|     [CHANGE_REQUEST_SCHEDULED]: { | ||||
|         action: '*{{user}}* scheduled change request {{changeRequest}} to be applied at {{event.data.scheduledDate}} in project *{{event.project}}*', | ||||
|         path: '/projects/{{event.project}}/change-requests/{{event.data.changeRequestId}}', | ||||
|     }, | ||||
|     [CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS]: { | ||||
|         action: '*Successfully* applied the scheduled change request {{changeRequest}} by *{{user}}* in project *{{event.project}}*.', | ||||
|         path: '/projects/{{event.project}}/change-requests/{{event.data.changeRequestId}}', | ||||
|     }, | ||||
|     [CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE]: { | ||||
|         action: '*Failed* to apply the scheduled change request {{changeRequest}} by *{{user}}* in project *{{event.project}}*.', | ||||
|         path: '/projects/{{event.project}}/change-requests/{{event.data.changeRequestId}}', | ||||
|     }, | ||||
|     [CONTEXT_FIELD_CREATED]: { | ||||
|         action: '*{{user}}* created context field *{{event.data.name}}*', | ||||
|         path: '/context', | ||||
|  | ||||
| @ -52,6 +52,9 @@ import { | ||||
|     BANNER_CREATED, | ||||
|     BANNER_UPDATED, | ||||
|     BANNER_DELETED, | ||||
|     CHANGE_REQUEST_SCHEDULED, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
| } from '../types/events'; | ||||
| import { IAddonDefinition } from '../types/model'; | ||||
| 
 | ||||
| @ -104,6 +107,9 @@ const slackAppDefinition: IAddonDefinition = { | ||||
|         CHANGE_REQUEST_DISCARDED, | ||||
|         CHANGE_REQUEST_REJECTED, | ||||
|         CHANGE_REQUEST_SENT_TO_REVIEW, | ||||
|         CHANGE_REQUEST_SCHEDULED, | ||||
|         CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|         CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|         CONTEXT_FIELD_CREATED, | ||||
|         CONTEXT_FIELD_DELETED, | ||||
|         CONTEXT_FIELD_UPDATED, | ||||
|  | ||||
| @ -25,6 +25,9 @@ import { | ||||
|     CHANGE_REQUEST_SENT_TO_REVIEW, | ||||
|     CHANGE_REQUEST_APPLIED, | ||||
|     FEATURE_POTENTIALLY_STALE_ON, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|     CHANGE_REQUEST_SCHEDULED, | ||||
| } from '../types/events'; | ||||
| import { IAddonDefinition } from '../types/model'; | ||||
| 
 | ||||
| @ -117,6 +120,9 @@ const webhookDefinition: IAddonDefinition = { | ||||
|         CHANGE_REQUEST_CANCELLED, | ||||
|         CHANGE_REQUEST_SENT_TO_REVIEW, | ||||
|         CHANGE_REQUEST_APPLIED, | ||||
|         CHANGE_REQUEST_SCHEDULED, | ||||
|         CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|         CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|         FEATURE_POTENTIALLY_STALE_ON, | ||||
|     ], | ||||
| }; | ||||
|  | ||||
| @ -128,8 +128,12 @@ export const CHANGE_REQUEST_SENT_TO_REVIEW = | ||||
|     'change-request-sent-to-review' as const; | ||||
| export const CHANGE_REQUEST_APPLIED = 'change-request-applied' as const; | ||||
| export const SCHEDULED_CHANGE_REQUEST_EXECUTED = | ||||
|     'scheduled-change-request-executed' as const; | ||||
|     'scheduled-change-request-executed' as const; //This will be removed in follow up PR
 | ||||
| export const CHANGE_REQUEST_SCHEDULED = 'change-request-scheduled' as const; | ||||
| export const CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS = | ||||
|     'change-request-scheduled-application-success' as const; | ||||
| export const CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE = | ||||
|     'change-request-scheduled-application-failure' as const; | ||||
| 
 | ||||
| export const API_TOKEN_CREATED = 'api-token-created' as const; | ||||
| export const API_TOKEN_UPDATED = 'api-token-updated' as const; | ||||
| @ -252,6 +256,8 @@ export const IEventTypes = [ | ||||
|     SCHEDULED_CHANGE_REQUEST_EXECUTED, | ||||
|     CHANGE_REQUEST_APPLIED, | ||||
|     CHANGE_REQUEST_SCHEDULED, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_SUCCESS, | ||||
|     CHANGE_REQUEST_SCHEDULED_APPLICATION_FAILURE, | ||||
|     API_TOKEN_CREATED, | ||||
|     API_TOKEN_UPDATED, | ||||
|     API_TOKEN_DELETED, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user