@@ -3,30 +3,57 @@ import { BaseSlackAPIClient } from "./base-client.ts";
3
3
import { SlackAPIMethodArgs } from "./types.ts" ;
4
4
import { assertSpyCall , spy } from "./dev_deps.ts" ;
5
5
6
- Deno . test ( "APIProxy" , async ( ) => {
6
+ Deno . test ( "APIProxy" , async ( t ) => {
7
7
const baseClient = new BaseSlackAPIClient ( "test-token" ) ;
8
- const clientToProxy = {
9
- apiCall : baseClient . apiCall . bind ( baseClient ) ,
10
- response : baseClient . response . bind ( baseClient ) ,
11
- } ;
8
+ const generateClientProxy = ( client : BaseSlackAPIClient ) => ( {
9
+ apiCall : client . apiCall . bind ( client ) ,
10
+ response : client . response . bind ( client ) ,
11
+ } ) ;
12
+
13
+ await t . step ( "should proxy legit Slack API calls" , async ( ) => {
14
+ const clientToProxy = generateClientProxy ( baseClient ) ;
15
+
16
+ const apiCallHandler = ( _method : string , _payload ?: SlackAPIMethodArgs ) => {
17
+ return Promise . resolve ( {
18
+ ok : true ,
19
+ toFetchResponse : ( ) => new Response ( ) ,
20
+ } ) ;
21
+ } ;
22
+ const apiCallHandlerSpy = spy ( apiCallHandler ) ;
12
23
13
- const apiCallHandler = ( _method : string , _payload ?: SlackAPIMethodArgs ) => {
14
- return Promise . resolve ( { ok : true , toFetchResponse : ( ) => new Response ( ) } ) ;
15
- } ;
16
- const apiCallHandlerSpy = spy ( apiCallHandler ) ;
24
+ const client = APIProxy ( clientToProxy , apiCallHandlerSpy ) ;
17
25
18
- const client = APIProxy ( clientToProxy , apiCallHandlerSpy ) ;
26
+ const payload = { text : "proxied call" , channel : "" } ;
27
+ await client . chat . postMessage ( payload ) ;
19
28
20
- const payload = { text : "proxied call" , channel : "" } ;
21
- await client . chat . postMessage ( payload ) ;
29
+ assertSpyCall ( apiCallHandlerSpy , 0 , {
30
+ args : [ "chat.postMessage" , payload ] ,
31
+ } ) ;
22
32
23
- assertSpyCall ( apiCallHandlerSpy , 0 , {
24
- args : [ "chat.postMessage" , payload ] ,
33
+ await client . admin . apps . approved . list ( ) ;
34
+
35
+ assertSpyCall ( apiCallHandlerSpy , 1 , {
36
+ args : [ "admin.apps.approved.list" , undefined ] ,
37
+ } ) ;
25
38
} ) ;
26
39
27
- await client . admin . apps . approved . list ( ) ;
40
+ await t . step ( "should not proxy Promise methods like `then`" , ( ) => {
41
+ const clientToProxy = generateClientProxy ( baseClient ) ;
42
+
43
+ const apiCallHandler = ( _method : string , _payload ?: SlackAPIMethodArgs ) => {
44
+ return Promise . resolve ( {
45
+ ok : true ,
46
+ toFetchResponse : ( ) => new Response ( ) ,
47
+ } ) ;
48
+ } ;
49
+ const apiCallHandlerSpy = spy ( apiCallHandler ) ;
50
+
51
+ const client = APIProxy ( clientToProxy , apiCallHandlerSpy ) ;
28
52
29
- assertSpyCall ( apiCallHandlerSpy , 1 , {
30
- args : [ "admin.apps.approved.list" , undefined ] ,
53
+ // re: https://github.com/slackapi/deno-slack-api/issues/107
54
+ // @ts -expect-error client does not have `then` but thenable feature detection at runtime may invoke or test for the method
55
+ if ( client . then ) {
56
+ throw new Error ( "APIProxy should have no `then`!" ) ;
57
+ }
31
58
} ) ;
32
59
} ) ;
0 commit comments