mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	test: add some basic tests to the new slack app (#4259)
https://linear.app/unleash/issue/2-1244/write-some-tests-for-the-new-slack-app-addon Pretty self-explanatory. These are based on the tests we have for the other addons. If you're reading this and have any suggestions of tests we could add at this stage, please let me know. Thanks!
This commit is contained in:
		
							parent
							
								
									593f83d5d3
								
							
						
					
					
						commit
						3b20978eb2
					
				
							
								
								
									
										85
									
								
								src/lib/addons/__snapshots__/slack-app.test.ts.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								src/lib/addons/__snapshots__/slack-app.test.ts.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					// Jest Snapshot v1, https://goo.gl/fbAQLP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`Should not post to unexisting tagged channels 1`] = `
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "attachments": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "actions": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "featureToggle",
 | 
				
			||||||
 | 
					          "style": "primary",
 | 
				
			||||||
 | 
					          "text": "Open in Unleash",
 | 
				
			||||||
 | 
					          "type": "button",
 | 
				
			||||||
 | 
					          "url": "http://some-url.com/projects/default/features/some-toggle",
 | 
				
			||||||
 | 
					          "value": "featureToggle",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "channel": 2,
 | 
				
			||||||
 | 
					  "text": "some@user.com *enabled* <http://some-url.com/projects/default/features/some-toggle|some-toggle> in *development* environment in project *default*",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`Should post message when feature is toggled 1`] = `
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "attachments": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "actions": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "featureToggle",
 | 
				
			||||||
 | 
					          "style": "primary",
 | 
				
			||||||
 | 
					          "text": "Open in Unleash",
 | 
				
			||||||
 | 
					          "type": "button",
 | 
				
			||||||
 | 
					          "url": "http://some-url.com/projects/default/features/some-toggle",
 | 
				
			||||||
 | 
					          "value": "featureToggle",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "channel": 1,
 | 
				
			||||||
 | 
					  "text": "some@user.com *enabled* <http://some-url.com/projects/default/features/some-toggle|some-toggle> in *development* environment in project *default*",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`Should post to all channels in tags 1`] = `
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "attachments": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "actions": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "featureToggle",
 | 
				
			||||||
 | 
					          "style": "primary",
 | 
				
			||||||
 | 
					          "text": "Open in Unleash",
 | 
				
			||||||
 | 
					          "type": "button",
 | 
				
			||||||
 | 
					          "url": "http://some-url.com/projects/default/features/some-toggle",
 | 
				
			||||||
 | 
					          "value": "featureToggle",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "channel": 1,
 | 
				
			||||||
 | 
					  "text": "some@user.com *enabled* <http://some-url.com/projects/default/features/some-toggle|some-toggle> in *development* environment in project *default*",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`Should post to all channels in tags 2`] = `
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "attachments": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "actions": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "featureToggle",
 | 
				
			||||||
 | 
					          "style": "primary",
 | 
				
			||||||
 | 
					          "text": "Open in Unleash",
 | 
				
			||||||
 | 
					          "type": "button",
 | 
				
			||||||
 | 
					          "url": "http://some-url.com/projects/default/features/some-toggle",
 | 
				
			||||||
 | 
					          "value": "featureToggle",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "channel": 2,
 | 
				
			||||||
 | 
					  "text": "some@user.com *enabled* <http://some-url.com/projects/default/features/some-toggle|some-toggle> in *development* environment in project *default*",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
							
								
								
									
										123
									
								
								src/lib/addons/slack-app.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								src/lib/addons/slack-app.test.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					import { IEvent, FEATURE_ENVIRONMENT_ENABLED } from '../types/events';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import SlackAppAddon from './slack-app';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import noLogger from '../../test/fixtures/no-logger';
 | 
				
			||||||
 | 
					import { ChatPostMessageArguments } from '@slack/web-api';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const accessToken = 'test-access-token';
 | 
				
			||||||
 | 
					const slackApiCalls: ChatPostMessageArguments[] = [];
 | 
				
			||||||
 | 
					jest.mock('@slack/web-api', () => ({
 | 
				
			||||||
 | 
					    WebClient: jest.fn().mockImplementation(() => ({
 | 
				
			||||||
 | 
					        conversations: {
 | 
				
			||||||
 | 
					            list: () => ({
 | 
				
			||||||
 | 
					                channels: [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        id: 1,
 | 
				
			||||||
 | 
					                        name: 'general',
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        id: 2,
 | 
				
			||||||
 | 
					                        name: 'another-channel-1',
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        chat: {
 | 
				
			||||||
 | 
					            postMessage: jest.fn().mockImplementation((options) => {
 | 
				
			||||||
 | 
					                slackApiCalls.push(options);
 | 
				
			||||||
 | 
					                return Promise.resolve();
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    })),
 | 
				
			||||||
 | 
					}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					beforeEach(() => {
 | 
				
			||||||
 | 
					    slackApiCalls.length = 0;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('Should post message when feature is toggled', async () => {
 | 
				
			||||||
 | 
					    const addon = new SlackAppAddon({
 | 
				
			||||||
 | 
					        getLogger: noLogger,
 | 
				
			||||||
 | 
					        unleashUrl: 'http://some-url.com',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    const event: IEvent = {
 | 
				
			||||||
 | 
					        id: 1,
 | 
				
			||||||
 | 
					        createdAt: new Date(),
 | 
				
			||||||
 | 
					        type: FEATURE_ENVIRONMENT_ENABLED,
 | 
				
			||||||
 | 
					        createdBy: 'some@user.com',
 | 
				
			||||||
 | 
					        project: 'default',
 | 
				
			||||||
 | 
					        featureName: 'some-toggle',
 | 
				
			||||||
 | 
					        environment: 'development',
 | 
				
			||||||
 | 
					        data: {
 | 
				
			||||||
 | 
					            name: 'some-toggle',
 | 
				
			||||||
 | 
					            enabled: false,
 | 
				
			||||||
 | 
					            type: 'release',
 | 
				
			||||||
 | 
					            strategies: [{ name: 'default' }],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tags: [{ type: 'slack', value: 'general' }],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await addon.handleEvent(event, { accessToken });
 | 
				
			||||||
 | 
					    expect(slackApiCalls.length).toBe(1);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0].channel).toBe(1);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0]).toMatchSnapshot();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('Should post to all channels in tags', async () => {
 | 
				
			||||||
 | 
					    const addon = new SlackAppAddon({
 | 
				
			||||||
 | 
					        getLogger: noLogger,
 | 
				
			||||||
 | 
					        unleashUrl: 'http://some-url.com',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    const event: IEvent = {
 | 
				
			||||||
 | 
					        id: 2,
 | 
				
			||||||
 | 
					        createdAt: new Date(),
 | 
				
			||||||
 | 
					        type: FEATURE_ENVIRONMENT_ENABLED,
 | 
				
			||||||
 | 
					        createdBy: 'some@user.com',
 | 
				
			||||||
 | 
					        project: 'default',
 | 
				
			||||||
 | 
					        featureName: 'some-toggle',
 | 
				
			||||||
 | 
					        environment: 'development',
 | 
				
			||||||
 | 
					        data: {
 | 
				
			||||||
 | 
					            name: 'some-toggle',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tags: [
 | 
				
			||||||
 | 
					            { type: 'slack', value: 'general' },
 | 
				
			||||||
 | 
					            { type: 'slack', value: 'another-channel-1' },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await addon.handleEvent(event, { accessToken });
 | 
				
			||||||
 | 
					    expect(slackApiCalls.length).toBe(2);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0].channel).toBe(1);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0]).toMatchSnapshot();
 | 
				
			||||||
 | 
					    expect(slackApiCalls[1].channel).toBe(2);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[1]).toMatchSnapshot();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('Should not post to unexisting tagged channels', async () => {
 | 
				
			||||||
 | 
					    const addon = new SlackAppAddon({
 | 
				
			||||||
 | 
					        getLogger: noLogger,
 | 
				
			||||||
 | 
					        unleashUrl: 'http://some-url.com',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    const event: IEvent = {
 | 
				
			||||||
 | 
					        id: 3,
 | 
				
			||||||
 | 
					        createdAt: new Date(),
 | 
				
			||||||
 | 
					        type: FEATURE_ENVIRONMENT_ENABLED,
 | 
				
			||||||
 | 
					        createdBy: 'some@user.com',
 | 
				
			||||||
 | 
					        project: 'default',
 | 
				
			||||||
 | 
					        featureName: 'some-toggle',
 | 
				
			||||||
 | 
					        environment: 'development',
 | 
				
			||||||
 | 
					        data: {
 | 
				
			||||||
 | 
					            name: 'some-toggle',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tags: [
 | 
				
			||||||
 | 
					            { type: 'slack', value: 'random' },
 | 
				
			||||||
 | 
					            { type: 'slack', value: 'another-channel-1' },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await addon.handleEvent(event, { accessToken });
 | 
				
			||||||
 | 
					    expect(slackApiCalls.length).toBe(1);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0].channel).toBe(2);
 | 
				
			||||||
 | 
					    expect(slackApiCalls[0]).toMatchSnapshot();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user