@ingeno/pipedream-services 1.0.74 → 1.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/slack/example.d.ts +3 -0
- package/dist/slack/example.d.ts.map +1 -0
- package/dist/slack/example.js +49 -0
- package/dist/slack/example.js.map +1 -0
- package/dist/slack/index.d.ts +2 -0
- package/dist/slack/index.d.ts.map +1 -0
- package/dist/slack/index.js +2 -0
- package/dist/slack/index.js.map +1 -0
- package/dist/slack/slack-service.d.ts +72 -0
- package/dist/slack/slack-service.d.ts.map +1 -0
- package/dist/slack/slack-service.js +138 -0
- package/dist/slack/slack-service.js.map +1 -0
- package/dist/zoho-crm/zoho-crm-fetcher.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-fetcher.js +27 -44
- package/dist/zoho-crm/zoho-crm-fetcher.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.js +21 -2
- package/dist/zoho-crm/zoho-crm-to-database-collection-converter.js.map +1 -1
- package/package.json +7 -2
- package/dist/aws/apn/partner-central-client.test.d.ts +0 -2
- package/dist/aws/apn/partner-central-client.test.d.ts.map +0 -1
- package/dist/aws/apn/partner-central-client.test.js +0 -38
- package/dist/aws/apn/partner-central-client.test.js.map +0 -1
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.d.ts +0 -2
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.d.ts.map +0 -1
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.js +0 -34
- package/dist/aws/apn/zoho-crm/apn-opportunities-sync-step.test.js.map +0 -1
- package/dist/aws/aws-list-stream.test.d.ts +0 -3
- package/dist/aws/aws-list-stream.test.d.ts.map +0 -1
- package/dist/aws/aws-list-stream.test.js +0 -50
- package/dist/aws/aws-list-stream.test.js.map +0 -1
- package/dist/collections/collections-to-table-stream.test.d.ts +0 -2
- package/dist/collections/collections-to-table-stream.test.d.ts.map +0 -1
- package/dist/collections/collections-to-table-stream.test.js +0 -70
- package/dist/collections/collections-to-table-stream.test.js.map +0 -1
- package/dist/collections/collections-to-table.test.d.ts +0 -2
- package/dist/collections/collections-to-table.test.d.ts.map +0 -1
- package/dist/collections/collections-to-table.test.js +0 -105
- package/dist/collections/collections-to-table.test.js.map +0 -1
- package/dist/collections/converter.test.d.ts +0 -2
- package/dist/collections/converter.test.d.ts.map +0 -1
- package/dist/collections/converter.test.js +0 -304
- package/dist/collections/converter.test.js.map +0 -1
- package/dist/postgres/postgres-test-connection.test.d.ts +0 -2
- package/dist/postgres/postgres-test-connection.test.d.ts.map +0 -1
- package/dist/postgres/postgres-test-connection.test.js +0 -68
- package/dist/postgres/postgres-test-connection.test.js.map +0 -1
- package/dist/postgres/postgres.test.d.ts +0 -2
- package/dist/postgres/postgres.test.d.ts.map +0 -1
- package/dist/postgres/postgres.test.js +0 -497
- package/dist/postgres/postgres.test.js.map +0 -1
- package/dist/streams/list-stream.test.d.ts +0 -2
- package/dist/streams/list-stream.test.d.ts.map +0 -1
- package/dist/streams/list-stream.test.js +0 -169
- package/dist/streams/list-stream.test.js.map +0 -1
- package/dist/zoho-crm/zoho-crm-client.test.d.ts +0 -2
- package/dist/zoho-crm/zoho-crm-client.test.d.ts.map +0 -1
- package/dist/zoho-crm/zoho-crm-client.test.js +0 -341
- package/dist/zoho-crm/zoho-crm-client.test.js.map +0 -1
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { convert } from './converter.js';
|
|
3
|
-
describe('convert function', () => {
|
|
4
|
-
describe('null and undefined handling', () => {
|
|
5
|
-
it('should preserve null and undefined values for all types', () => {
|
|
6
|
-
const types = ['string', 'number', 'currency', 'bool', 'date', 'datetime', 'json', 'id'];
|
|
7
|
-
types.forEach(type => {
|
|
8
|
-
const column = { name: 'test', type };
|
|
9
|
-
expect(convert(column, null)).toBe(null);
|
|
10
|
-
expect(convert(column, undefined)).toBe(undefined);
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
describe('string type conversion', () => {
|
|
15
|
-
it('should return strings as-is for string type', () => {
|
|
16
|
-
const column = { name: 'test', type: 'string' };
|
|
17
|
-
expect(convert(column, 'hello')).toBe('hello');
|
|
18
|
-
expect(convert(column, ' hello ')).toBe(' hello ');
|
|
19
|
-
expect(convert(column, '')).toBe('');
|
|
20
|
-
expect(convert(column, '123')).toBe('123');
|
|
21
|
-
});
|
|
22
|
-
it('should handle empty strings for string type', () => {
|
|
23
|
-
const column = { name: 'test', type: 'string' };
|
|
24
|
-
expect(convert(column, '')).toBe('');
|
|
25
|
-
expect(convert(column, ' ')).toBe(' ');
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('number type conversion', () => {
|
|
29
|
-
it('should convert valid number strings', () => {
|
|
30
|
-
const column = { name: 'test', type: 'number' };
|
|
31
|
-
expect(convert(column, '123')).toBe(123);
|
|
32
|
-
expect(convert(column, '123.45')).toBe(123.45);
|
|
33
|
-
expect(convert(column, ' 456 ')).toBe(456);
|
|
34
|
-
expect(convert(column, '0')).toBe(0);
|
|
35
|
-
expect(convert(column, '-123')).toBe(-123);
|
|
36
|
-
});
|
|
37
|
-
it('should handle invalid number strings', () => {
|
|
38
|
-
const column = { name: 'test', type: 'number' };
|
|
39
|
-
expect(convert(column, 'not a number')).toBeNaN();
|
|
40
|
-
expect(convert(column, '')).toBe(undefined);
|
|
41
|
-
expect(convert(column, ' ')).toBe(undefined);
|
|
42
|
-
});
|
|
43
|
-
it('should return numbers as-is', () => {
|
|
44
|
-
const column = { name: 'test', type: 'number' };
|
|
45
|
-
expect(convert(column, 123)).toBe(123);
|
|
46
|
-
expect(convert(column, 123.45)).toBe(123.45);
|
|
47
|
-
expect(convert(column, 0)).toBe(0);
|
|
48
|
-
expect(convert(column, -123)).toBe(-123);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe('currency type conversion', () => {
|
|
52
|
-
it('should convert valid currency strings', () => {
|
|
53
|
-
const column = { name: 'amount', type: 'currency' };
|
|
54
|
-
expect(convert(column, '50000')).toBe(50000);
|
|
55
|
-
expect(convert(column, '123.45')).toBe(123.45);
|
|
56
|
-
expect(convert(column, ' 1000 ')).toBe(1000);
|
|
57
|
-
expect(convert(column, '0.99')).toBe(0.99);
|
|
58
|
-
});
|
|
59
|
-
it('should handle invalid currency strings', () => {
|
|
60
|
-
const column = { name: 'amount', type: 'currency' };
|
|
61
|
-
expect(convert(column, 'not a number')).toBeNaN();
|
|
62
|
-
expect(convert(column, '')).toBe(undefined);
|
|
63
|
-
expect(convert(column, ' ')).toBe(undefined);
|
|
64
|
-
});
|
|
65
|
-
it('should return numbers as-is for currency type', () => {
|
|
66
|
-
const column = { name: 'amount', type: 'currency' };
|
|
67
|
-
expect(convert(column, 50000)).toBe(50000);
|
|
68
|
-
expect(convert(column, 123.45)).toBe(123.45);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe('boolean type conversion', () => {
|
|
72
|
-
it('should convert truthy boolean strings', () => {
|
|
73
|
-
const column = { name: 'is_active', type: 'bool' };
|
|
74
|
-
expect(convert(column, 'true')).toBe(true);
|
|
75
|
-
expect(convert(column, 'TRUE')).toBe(true);
|
|
76
|
-
expect(convert(column, 'yes')).toBe(true);
|
|
77
|
-
expect(convert(column, 'YES')).toBe(true);
|
|
78
|
-
expect(convert(column, 'Yes')).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
it('should convert falsy boolean strings', () => {
|
|
81
|
-
const column = { name: 'is_active', type: 'bool' };
|
|
82
|
-
expect(convert(column, 'false')).toBe(false);
|
|
83
|
-
expect(convert(column, 'FALSE')).toBe(false);
|
|
84
|
-
expect(convert(column, 'no')).toBe(false);
|
|
85
|
-
expect(convert(column, 'NO')).toBe(false);
|
|
86
|
-
expect(convert(column, 'No')).toBe(false);
|
|
87
|
-
expect(convert(column, 'other')).toBe(false);
|
|
88
|
-
expect(convert(column, '0')).toBe(false);
|
|
89
|
-
});
|
|
90
|
-
it('should handle empty strings for boolean type', () => {
|
|
91
|
-
const column = { name: 'is_active', type: 'bool' };
|
|
92
|
-
expect(convert(column, '')).toBe(undefined);
|
|
93
|
-
expect(convert(column, ' ')).toBe(undefined);
|
|
94
|
-
});
|
|
95
|
-
it('should return booleans as-is', () => {
|
|
96
|
-
const column = { name: 'is_active', type: 'bool' };
|
|
97
|
-
expect(convert(column, true)).toBe(true);
|
|
98
|
-
expect(convert(column, false)).toBe(false);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('date type conversion', () => {
|
|
102
|
-
it('should convert valid date strings', () => {
|
|
103
|
-
const column = { name: 'test_date', type: 'date' };
|
|
104
|
-
expect(convert(column, '2023-01-01')).toEqual(new Date('2023-01-01'));
|
|
105
|
-
expect(convert(column, '2023-12-31T23:59:59Z')).toEqual(new Date('2023-12-31T23:59:59Z'));
|
|
106
|
-
expect(convert(column, 'Jan 1, 2023')).toEqual(new Date('Jan 1, 2023'));
|
|
107
|
-
});
|
|
108
|
-
it('should handle invalid date strings', () => {
|
|
109
|
-
const column = { name: 'test_date', type: 'date' };
|
|
110
|
-
expect(convert(column, 'invalid date')).toBe(null);
|
|
111
|
-
expect(convert(column, '')).toBe(undefined);
|
|
112
|
-
expect(convert(column, ' ')).toBe(undefined);
|
|
113
|
-
expect(convert(column, '2023-13-01')).toBe(null); // Invalid month
|
|
114
|
-
});
|
|
115
|
-
it('should return Date objects as-is', () => {
|
|
116
|
-
const column = { name: 'test_date', type: 'date' };
|
|
117
|
-
const date = new Date('2023-01-01');
|
|
118
|
-
expect(convert(column, date)).toBe(date);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
describe('datetime type conversion', () => {
|
|
122
|
-
it('should convert Zoho CRM timestamp format to Date object', () => {
|
|
123
|
-
const column = { name: 'test_date', type: 'datetime' };
|
|
124
|
-
const zohoTimestamp = 'Mon Jul 07 2025 21:12:49 GMT+0000 (GMT)';
|
|
125
|
-
const result = convert(column, zohoTimestamp);
|
|
126
|
-
expect(result).toBeInstanceOf(Date);
|
|
127
|
-
expect(result).toEqual(new Date('2025-07-07T21:12:49.000Z'));
|
|
128
|
-
});
|
|
129
|
-
it('should convert various datetime formats', () => {
|
|
130
|
-
const column = { name: 'test_date', type: 'datetime' };
|
|
131
|
-
expect(convert(column, '2023-01-01T12:00:00Z')).toEqual(new Date('2023-01-01T12:00:00Z'));
|
|
132
|
-
expect(convert(column, '2023-12-31 23:59:59')).toEqual(new Date('2023-12-31 23:59:59'));
|
|
133
|
-
});
|
|
134
|
-
it('should handle invalid datetime strings', () => {
|
|
135
|
-
const column = { name: 'test_date', type: 'datetime' };
|
|
136
|
-
expect(convert(column, 'invalid date')).toBe(null);
|
|
137
|
-
expect(convert(column, '')).toBe(undefined);
|
|
138
|
-
expect(convert(column, ' ')).toBe(undefined);
|
|
139
|
-
});
|
|
140
|
-
it('should return Date objects as-is for datetime type', () => {
|
|
141
|
-
const column = { name: 'test_date', type: 'datetime' };
|
|
142
|
-
const date = new Date('2023-01-01T12:00:00Z');
|
|
143
|
-
expect(convert(column, date)).toBe(date);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
describe('json type conversion', () => {
|
|
147
|
-
it('should serialize objects to JSON strings', () => {
|
|
148
|
-
const column = { name: 'metadata', type: 'json' };
|
|
149
|
-
expect(convert(column, { id: 123, name: 'test' })).toBe('{"id":123,"name":"test"}');
|
|
150
|
-
expect(convert(column, [1, 2, 3])).toBe('[1,2,3]');
|
|
151
|
-
expect(convert(column, { nested: { value: 'test' } })).toBe('{"nested":{"value":"test"}}');
|
|
152
|
-
});
|
|
153
|
-
it('should validate and return valid JSON strings', () => {
|
|
154
|
-
const column = { name: 'metadata', type: 'json' };
|
|
155
|
-
expect(convert(column, '{"valid":"json"}')).toBe('{"valid":"json"}');
|
|
156
|
-
expect(convert(column, '[1,2,3]')).toBe('[1,2,3]');
|
|
157
|
-
expect(convert(column, '"simple string"')).toBe('"simple string"');
|
|
158
|
-
});
|
|
159
|
-
it('should handle invalid JSON strings', () => {
|
|
160
|
-
const column = { name: 'metadata', type: 'json' };
|
|
161
|
-
expect(convert(column, 'invalid json')).toBe(null);
|
|
162
|
-
expect(convert(column, '{"incomplete":')).toBe(null);
|
|
163
|
-
expect(convert(column, '')).toBe(null); // Empty string gets validated as invalid JSON
|
|
164
|
-
expect(convert(column, ' ')).toBe(null); // Whitespace gets validated as invalid JSON
|
|
165
|
-
});
|
|
166
|
-
it('should handle primitive values for JSON type', () => {
|
|
167
|
-
const column = { name: 'metadata', type: 'json' };
|
|
168
|
-
expect(convert(column, 123)).toBe('123');
|
|
169
|
-
expect(convert(column, true)).toBe('true');
|
|
170
|
-
expect(convert(column, false)).toBe('false');
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
describe('id type conversion', () => {
|
|
174
|
-
it('should handle id type like string by default', () => {
|
|
175
|
-
const column = { name: 'record_id', type: 'id' };
|
|
176
|
-
expect(convert(column, 'abc123')).toBe('abc123');
|
|
177
|
-
expect(convert(column, 123)).toBe(123);
|
|
178
|
-
expect(convert(column, ' 123 ')).toBe('123'); // String gets trimmed for non-string types
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('text type conversion', () => {
|
|
182
|
-
it('should handle text type like string by default', () => {
|
|
183
|
-
const column = { name: 'description', type: 'text' };
|
|
184
|
-
expect(convert(column, 'some text')).toBe('some text');
|
|
185
|
-
expect(convert(column, ' padded ')).toBe('padded'); // String gets trimmed for non-string types
|
|
186
|
-
expect(convert(column, 123)).toBe(123);
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('unknown type conversion', () => {
|
|
190
|
-
it('should handle unknown types as strings', () => {
|
|
191
|
-
const column = { name: 'unknown', type: 'unknown' };
|
|
192
|
-
expect(convert(column, 'test')).toBe('test');
|
|
193
|
-
expect(convert(column, 123)).toBe(123);
|
|
194
|
-
expect(convert(column, true)).toBe(true);
|
|
195
|
-
});
|
|
196
|
-
it('should handle columns without type specified', () => {
|
|
197
|
-
const column = { name: 'no_type' };
|
|
198
|
-
expect(convert(column, 'test')).toBe('test');
|
|
199
|
-
expect(convert(column, 123)).toBe(123);
|
|
200
|
-
expect(convert(column, true)).toBe(true);
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
describe('edge cases', () => {
|
|
204
|
-
it('should handle whitespace-only strings correctly', () => {
|
|
205
|
-
const stringColumn = { name: 'test', type: 'string' };
|
|
206
|
-
const numberColumn = { name: 'test', type: 'number' };
|
|
207
|
-
const boolColumn = { name: 'test', type: 'bool' };
|
|
208
|
-
expect(convert(stringColumn, ' ')).toBe(' ');
|
|
209
|
-
expect(convert(numberColumn, ' ')).toBe(undefined);
|
|
210
|
-
expect(convert(boolColumn, ' ')).toBe(undefined);
|
|
211
|
-
});
|
|
212
|
-
it('should handle zero values correctly', () => {
|
|
213
|
-
const numberColumn = { name: 'test', type: 'number' };
|
|
214
|
-
const currencyColumn = { name: 'test', type: 'currency' };
|
|
215
|
-
const boolColumn = { name: 'test', type: 'bool' };
|
|
216
|
-
expect(convert(numberColumn, 0)).toBe(0);
|
|
217
|
-
expect(convert(numberColumn, '0')).toBe(0);
|
|
218
|
-
expect(convert(currencyColumn, 0)).toBe(0);
|
|
219
|
-
expect(convert(currencyColumn, '0')).toBe(0);
|
|
220
|
-
expect(convert(boolColumn, '0')).toBe(false);
|
|
221
|
-
});
|
|
222
|
-
it('should handle very large numbers', () => {
|
|
223
|
-
const numberColumn = { name: 'test', type: 'number' };
|
|
224
|
-
expect(convert(numberColumn, '999999999999999')).toBe(999999999999999);
|
|
225
|
-
expect(convert(numberColumn, '1.23456789012345')).toBe(1.23456789012345);
|
|
226
|
-
});
|
|
227
|
-
it('should handle special float values', () => {
|
|
228
|
-
const numberColumn = { name: 'test', type: 'number' };
|
|
229
|
-
expect(convert(numberColumn, 'Infinity')).toBe(Infinity);
|
|
230
|
-
expect(convert(numberColumn, '-Infinity')).toBe(-Infinity);
|
|
231
|
-
expect(convert(numberColumn, 'NaN')).toBeNaN();
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
describe('error handling', () => {
|
|
235
|
-
it('should handle circular references in JSON conversion', () => {
|
|
236
|
-
const column = { name: 'metadata', type: 'json' };
|
|
237
|
-
const circular = { name: 'test' };
|
|
238
|
-
circular.self = circular;
|
|
239
|
-
expect(convert(column, circular)).toBe(null);
|
|
240
|
-
});
|
|
241
|
-
it('should handle functions in JSON conversion', () => {
|
|
242
|
-
const column = { name: 'metadata', type: 'json' };
|
|
243
|
-
const objWithFunction = {
|
|
244
|
-
name: 'test',
|
|
245
|
-
fn: () => 'hello'
|
|
246
|
-
};
|
|
247
|
-
expect(convert(column, objWithFunction)).toBe('{"name":"test"}');
|
|
248
|
-
});
|
|
249
|
-
it('should handle Date constructor exceptions', () => {
|
|
250
|
-
const column = { name: 'test_date', type: 'datetime' };
|
|
251
|
-
// Create a mock Date constructor that throws an error
|
|
252
|
-
const originalDate = Date;
|
|
253
|
-
const mockDate = function (value) {
|
|
254
|
-
throw new Error('Date constructor error');
|
|
255
|
-
};
|
|
256
|
-
mockDate.prototype = originalDate.prototype;
|
|
257
|
-
// Replace the global Date constructor
|
|
258
|
-
global.Date = mockDate;
|
|
259
|
-
try {
|
|
260
|
-
const result = convert(column, 'some date string');
|
|
261
|
-
expect(result).toBe(null);
|
|
262
|
-
}
|
|
263
|
-
finally {
|
|
264
|
-
// Restore the original Date constructor
|
|
265
|
-
global.Date = originalDate;
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
it('should handle exceptions in main convert function', () => {
|
|
269
|
-
const column = { name: 'test', type: 'number' };
|
|
270
|
-
// Create a String object that will be treated as a string but throws during processing
|
|
271
|
-
const problematicString = new String('123');
|
|
272
|
-
// Override isString type check behavior by making it throw
|
|
273
|
-
Object.defineProperty(problematicString, 'trim', {
|
|
274
|
-
value: () => {
|
|
275
|
-
throw new Error('trim error during processing');
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
const result = convert(column, problematicString);
|
|
279
|
-
expect(result).toBe(undefined);
|
|
280
|
-
});
|
|
281
|
-
it('should handle malformed string objects that throw during preprocessing', () => {
|
|
282
|
-
const column = { name: 'test', type: 'datetime' };
|
|
283
|
-
// Create a String object that throws when trim() is called
|
|
284
|
-
const malformedString = new String('test date');
|
|
285
|
-
malformedString.trim = () => {
|
|
286
|
-
throw new Error('trim error');
|
|
287
|
-
};
|
|
288
|
-
const result = convert(column, malformedString);
|
|
289
|
-
expect(result).toBe(undefined);
|
|
290
|
-
});
|
|
291
|
-
it('should handle objects with getters that throw errors', () => {
|
|
292
|
-
const column = { name: 'test', type: 'json' };
|
|
293
|
-
// Create an object with a getter that throws
|
|
294
|
-
const objectWithThrowingGetter = {
|
|
295
|
-
get badProperty() {
|
|
296
|
-
throw new Error('Getter error');
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
const result = convert(column, objectWithThrowingGetter);
|
|
300
|
-
expect(result).toBe(null);
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
//# sourceMappingURL=converter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converter.test.js","sourceRoot":"","sources":["../../src/collections/converter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-test-connection.test.d.ts","sourceRoot":"","sources":["../../src/postgres/postgres-test-connection.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
2
|
-
import pg from 'pg';
|
|
3
|
-
import { getTestCredentials } from './test-config.js';
|
|
4
|
-
const { Client } = pg;
|
|
5
|
-
describe('PostgreSQL Test Database Connection', () => {
|
|
6
|
-
let client;
|
|
7
|
-
beforeAll(async () => {
|
|
8
|
-
const credentials = getTestCredentials();
|
|
9
|
-
client = new Client(credentials);
|
|
10
|
-
// Wait for database to be ready (retry logic)
|
|
11
|
-
let attempts = 0;
|
|
12
|
-
const maxAttempts = 30;
|
|
13
|
-
while (attempts < maxAttempts) {
|
|
14
|
-
try {
|
|
15
|
-
await client.connect();
|
|
16
|
-
break;
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
attempts++;
|
|
20
|
-
if (attempts >= maxAttempts) {
|
|
21
|
-
throw new Error(`Failed to connect to test database after ${maxAttempts} attempts: ${error}`);
|
|
22
|
-
}
|
|
23
|
-
// Wait 1 second before retrying
|
|
24
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
afterAll(async () => {
|
|
29
|
-
if (client) {
|
|
30
|
-
await client.end();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
it('should connect to the test database', async () => {
|
|
34
|
-
const result = await client.query('SELECT NOW() as current_time');
|
|
35
|
-
expect(result.rows).toHaveLength(1);
|
|
36
|
-
expect(result.rows[0].current_time).toBeInstanceOf(Date);
|
|
37
|
-
});
|
|
38
|
-
it('should be able to create and drop a test table', async () => {
|
|
39
|
-
const tableName = 'test_connection_table';
|
|
40
|
-
// Create table
|
|
41
|
-
await client.query(`
|
|
42
|
-
CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
43
|
-
id SERIAL PRIMARY KEY,
|
|
44
|
-
name TEXT NOT NULL,
|
|
45
|
-
created_at TIMESTAMP DEFAULT NOW()
|
|
46
|
-
)
|
|
47
|
-
`);
|
|
48
|
-
// Insert test data
|
|
49
|
-
const insertResult = await client.query(`INSERT INTO ${tableName} (name) VALUES ($1) RETURNING id`, ['test_record']);
|
|
50
|
-
expect(insertResult.rows).toHaveLength(1);
|
|
51
|
-
expect(insertResult.rows[0].id).toBeDefined();
|
|
52
|
-
// Query test data
|
|
53
|
-
const selectResult = await client.query(`SELECT * FROM ${tableName} WHERE name = $1`, ['test_record']);
|
|
54
|
-
expect(selectResult.rows).toHaveLength(1);
|
|
55
|
-
expect(selectResult.rows[0].name).toBe('test_record');
|
|
56
|
-
// Clean up
|
|
57
|
-
await client.query(`DROP TABLE ${tableName}`);
|
|
58
|
-
});
|
|
59
|
-
it('should have the correct database name', async () => {
|
|
60
|
-
const result = await client.query('SELECT current_database()');
|
|
61
|
-
expect(result.rows[0].current_database).toBe('clarity_test');
|
|
62
|
-
});
|
|
63
|
-
it('should have the correct user permissions', async () => {
|
|
64
|
-
const result = await client.query('SELECT current_user');
|
|
65
|
-
expect(result.rows[0].current_user).toBe('test_user');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=postgres-test-connection.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-test-connection.test.js","sourceRoot":"","sources":["../../src/postgres/postgres-test-connection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;AAErB,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,MAAiB,CAAA;IAErB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAA;QACxC,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAA;QAEhC,8CAA8C;QAC9C,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,MAAM,WAAW,GAAG,EAAE,CAAA;QAEtB,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;gBACtB,MAAK;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAA;gBACV,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,WAAW,cAAc,KAAK,EAAE,CAAC,CAAA;gBAC/F,CAAC;gBACD,gCAAgC;gBAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,SAAS,GAAG,uBAAuB,CAAA;QAEzC,eAAe;QACf,MAAM,MAAM,CAAC,KAAK,CAAC;mCACY,SAAS;;;;;KAKvC,CAAC,CAAA;QAEF,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CACrC,eAAe,SAAS,kCAAkC,EAC1D,CAAC,aAAa,CAAC,CAChB,CAAA;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAE7C,kBAAkB;QAClB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CACrC,iBAAiB,SAAS,kBAAkB,EAC5C,CAAC,aAAa,CAAC,CAChB,CAAA;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAErD,WAAW;QACX,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,SAAS,EAAE,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.test.d.ts","sourceRoot":"","sources":["../../src/postgres/postgres.test.ts"],"names":[],"mappings":""}
|