Skip to content

Commit

Permalink
a few more unit test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
filmaj committed Oct 17, 2024
1 parent c3261cc commit a5ab2d5
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 18 deletions.
8 changes: 4 additions & 4 deletions src/Assistant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,14 @@ export type AssistantMiddlewareArgs =
// TODO: revisit Omit of `say`, as it's added on as part of the enrichment step
export interface AssistantThreadStartedMiddlewareArgs
extends Omit<SlackEventMiddlewareArgs<'assistant_thread_started'>, 'say'>,
AssistantUtilityArgs {}
AssistantUtilityArgs { }
export interface AssistantThreadContextChangedMiddlewareArgs
extends Omit<SlackEventMiddlewareArgs<'assistant_thread_context_changed'>, 'say'>,
AssistantUtilityArgs {}
AssistantUtilityArgs { }
// TODO: extending from SlackEventMiddlewareArgs<'message'> likely insufficient as not all message event payloads contain thread_ts - whereas assistant user message events do. Likely need to narrow this down further.
export interface AssistantUserMessageMiddlewareArgs
extends Omit<SlackEventMiddlewareArgs<'message'>, 'say'>,
AssistantUtilityArgs {}
AssistantUtilityArgs { }

export type AllAssistantMiddlewareArgs<T extends AssistantMiddlewareArgs = AssistantMiddlewareArgs> = T &
AllMiddlewareArgs;
Expand Down Expand Up @@ -203,7 +203,7 @@ export function isAssistantMessage(payload: AnyMiddlewareArgs['payload']): boole
const inAssistantContainer =
'channel_type' in payload &&
payload.channel_type === 'im' &&
(!('subtype' in payload) || payload.subtype === 'file_share');
(!('subtype' in payload) || payload.subtype === 'file_share' || payload.subtype === undefined); // TODO: undefined subtype is a limitation of message event, needs fixing (see https://github.com/slackapi/node-slack-sdk/issues/1904)
return isThreadMessage && inAssistantContainer;
}

Expand Down
22 changes: 10 additions & 12 deletions test/unit/Assistant.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@ import {
type AssistantConfig,
type AssistantMiddleware,
type AssistantMiddlewareArgs,
type AssistantThreadContextChangedMiddlewareArgs,
type AssistantThreadStartedMiddlewareArgs,
type AssistantUserMessageMiddlewareArgs,
} from '../../src/Assistant';
import type { AssistantThreadContext, AssistantThreadContextStore } from '../../src/AssistantThreadContextStore';
import { AssistantInitializationError, AssistantMissingPropertyError } from '../../src/errors';
import type { AllMiddlewareArgs, AnyMiddlewareArgs, Middleware, SlackEventMiddlewareArgs } from '../../src/types';
import type { Middleware } from '../../src/types';
import {
type Override,
createDummyAppMentionEventMiddlewareArgs,
createDummyAssistantThreadContextChangedEventMiddlewareArgs,
createDummyAssistantThreadStartedEventMiddlewareArgs,
createDummyAssistantUserMessageEventMiddlewareArgs,
Expand All @@ -29,7 +27,7 @@ async function importAssistant(overrides: Override = {}): Promise<typeof import(
return rewiremock.module(() => import('../../src/Assistant'), overrides);
}

const MOCK_FN = async () => {};
const MOCK_FN = async () => { };

const MOCK_CONFIG_SINGLE = {
threadStarted: MOCK_FN,
Expand Down Expand Up @@ -72,7 +70,7 @@ describe('Assistant class', () => {

// intentionally casting to AssistantConfig to trigger failure
const badConfig = {
threadStarted: async () => {},
threadStarted: async () => { },
} as unknown as AssistantConfig;

const validationFn = () => validate(badConfig);
Expand All @@ -85,9 +83,9 @@ describe('Assistant class', () => {

// intentionally casting to AssistantConfig to trigger failure
const badConfig = {
threadStarted: async () => {},
threadStarted: async () => { },
threadContextChanged: {},
userMessage: async () => {},
userMessage: async () => { },
} as unknown as AssistantConfig;

const validationFn = () => validate(badConfig);
Expand Down Expand Up @@ -130,7 +128,7 @@ describe('Assistant class', () => {
});

it('should return false if not a recognized assistant event', async () => {
const fakeMessageArgs = wrapMiddleware(createDummyMessageEventMiddlewareArgs());
const fakeMessageArgs = wrapMiddleware(createDummyAppMentionEventMiddlewareArgs());
const { isAssistantEvent } = await importAssistant();
assert.isFalse(isAssistantEvent(fakeMessageArgs));
});
Expand All @@ -140,7 +138,7 @@ describe('Assistant class', () => {
it('should return true if recognized assistant message', async () => {
const mockUserMessageArgs = wrapMiddleware(createDummyAssistantUserMessageEventMiddlewareArgs());
const { matchesConstraints } = await importAssistant();
assert(matchesConstraints(mockUserMessageArgs));
assert.ok(matchesConstraints(mockUserMessageArgs));
});

it('should return false if not supported message subtype', async () => {
Expand Down Expand Up @@ -365,7 +363,7 @@ describe('Assistant class', () => {
const fn1 = sinon.spy((async ({ next: continuation }) => {
await continuation();
}) as Middleware<AssistantThreadStartedEvent>);
const fn2 = sinon.spy(async () => {});
const fn2 = sinon.spy(async () => { });
const fakeMiddleware = [fn1, fn2] as AssistantMiddleware;

await processAssistantMiddleware(mockThreadContextChangedArgs, fakeMiddleware);
Expand All @@ -382,6 +380,6 @@ function createMockThreadContextStore(): AssistantThreadContextStore {
async get(_: AllAssistantMiddlewareArgs): Promise<AssistantThreadContext> {
return {};
},
async save(_: AllAssistantMiddlewareArgs): Promise<void> {},
async save(_: AllAssistantMiddlewareArgs): Promise<void> { },
};
}
2 changes: 1 addition & 1 deletion test/unit/AssistantThreadContextStore.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { WebClient } from '@slack/web-api';
import { assert } from 'chai';
import sinon from 'sinon';
import { type AllAssistantMiddlewareArgs, extractThreadInfo } from '../../src/Assistant';
import { extractThreadInfo } from '../../src/Assistant';
import { DefaultThreadContextStore } from '../../src/AssistantThreadContextStore';
import { createDummyAssistantThreadStartedEventMiddlewareArgs, wrapMiddleware } from './helpers';

Expand Down
3 changes: 2 additions & 1 deletion test/unit/helpers/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ interface DummyMessageOverrides {
blocks?: (KnownBlock | Block)[];
channel_type?: GenericMessageEvent['channel_type'];
thread_ts?: string;
subtype?: GenericMessageEvent['subtype'];
}
export function createDummyMessageEventMiddlewareArgs(
msgOverrides?: DummyMessageOverrides,
Expand All @@ -165,7 +166,7 @@ export function createDummyMessageEventMiddlewareArgs(
): SlackEventMiddlewareArgs<'message'> {
const payload: MessageEvent = msgOverrides?.message || {
type: 'message',
subtype: undefined,
subtype: msgOverrides?.subtype || undefined,
event_ts: ts,
channel,
channel_type: msgOverrides?.channel_type || 'channel',
Expand Down

0 comments on commit a5ab2d5

Please sign in to comment.