-
Notifications
You must be signed in to change notification settings - Fork 2k
Expand file tree
/
Copy pathintegration.test.js
More file actions
112 lines (92 loc) · 3.23 KB
/
integration.test.js
File metadata and controls
112 lines (92 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
'use strict';
const assert = require('assert');
const crypto = require('crypto');
const supertest = require('supertest');
const functionsFramework = require('@google-cloud/functions-framework/testing');
process.env.SLACK_SECRET = 'testsecret';
const SLACK_TIMESTAMP = Date.now();
require('../index');
const generateSignature = query => {
const body = JSON.stringify({text: query});
const buf = Buffer.from(body);
const plaintext = `v0:${SLACK_TIMESTAMP}:${buf}`;
const hmac = crypto.createHmac('sha256', process.env.SLACK_SECRET);
hmac.update(plaintext);
const ciphertext = hmac.digest('hex');
return `v0=${ciphertext}`;
};
describe('functions_slack_format functions_slack_request functions_slack_search functions_verify_webhook', () => {
it('returns search results', async () => {
const query = 'kolach';
const server = functionsFramework.getTestServer('kgSearch');
const response = await supertest(server)
.post('/')
.set({
'x-slack-signature': generateSignature(query),
'x-slack-request-timestamp': SLACK_TIMESTAMP,
})
.send({text: query})
.expect(200);
const results = response.body && response.body.attachments;
assert.ok(results);
const result = results[0];
assert.ok(result);
assert.ok(result.text);
assert.ok(result.title);
assert.ok(result.title.toLowerCase().includes('kolach'));
});
it('handles non-existent query', async () => {
const query = 'g1bb3r1shhhhhhh';
const server = functionsFramework.getTestServer('kgSearch');
const response = await supertest(server)
.post('/')
.set({
'x-slack-signature': generateSignature(query),
'x-slack-request-timestamp': SLACK_TIMESTAMP,
})
.send({text: query})
.expect(200);
const results = response.body && response.body.attachments;
assert.ok(results);
const result = results[0];
assert.ok(result);
assert.ok(result.text);
assert.ok(result.text.includes('No results'));
});
it('handles empty query', async () => {
const query = '';
const server = functionsFramework.getTestServer('kgSearch');
await supertest(server)
.post('/')
.set({
'x-slack-signature': generateSignature(query),
'x-slack-request-timestamp': SLACK_TIMESTAMP,
})
.send({text: query})
.expect(400);
});
it('fails on missing signature', async () => {
const query = 'kolach';
const server = functionsFramework.getTestServer('kgSearch');
await supertest(server)
.post('/')
.set({
'x-slack-request-timestamp': Date.now().toString(),
})
.send({text: query})
.expect(401);
});
});