Skip to content

Commit 20eb313

Browse files
committed
Add tests for trigger source reflection
1 parent 5782fc3 commit 20eb313

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { UnparsedTriggerBundle } from 'src/core/shared/types';
2+
import { assertEither } from '../../../test-helpers/assert-either';
3+
import { TriggerBuilder } from '../../../test-helpers/test-data-builders/trigger-builder';
4+
import { reflectTriggerSource } from '../reflect-trigger-source';
5+
import { isInSource } from '../../../shared/utils';
6+
7+
describe('when parsing Triggers', () => {
8+
test('the resulting type contains the file path', async () => {
9+
const unparsed: UnparsedTriggerBundle = {
10+
type: 'trigger',
11+
name: 'MyFirstTrigger',
12+
filePath: 'src/triggers/MyFirstTrigger.trigger',
13+
content: new TriggerBuilder().build(),
14+
};
15+
16+
const result = await reflectTriggerSource([unparsed])();
17+
18+
assertEither(result, (data) => {
19+
if (isInSource(data[0].source)) {
20+
expect(data[0].source.filePath).toBe('src/triggers/MyFirstTrigger.trigger');
21+
} else {
22+
fail('Expected the source to be in the source');
23+
}
24+
});
25+
});
26+
27+
test('the resulting type contains the correct name', async () => {
28+
const unparsed: UnparsedTriggerBundle = {
29+
type: 'trigger',
30+
name: 'MyFirstTrigger',
31+
filePath: 'src/triggers/MyFirstTrigger.trigger',
32+
content: new TriggerBuilder().build(),
33+
};
34+
35+
const result = await reflectTriggerSource([unparsed])();
36+
37+
assertEither(result, (data) => {
38+
expect(data[0].type.name).toBe('MyFirstTrigger');
39+
});
40+
});
41+
42+
test('the resulting type contains the object name', async () => {
43+
const unparsed: UnparsedTriggerBundle = {
44+
type: 'trigger',
45+
name: 'MyFirstTrigger',
46+
filePath: 'src/triggers/MyFirstTrigger.trigger',
47+
content: new TriggerBuilder().withObjectName('Account').build(),
48+
};
49+
50+
const result = await reflectTriggerSource([unparsed])();
51+
52+
assertEither(result, (data) => {
53+
expect(data[0].type.object_name).toBe('Account');
54+
});
55+
});
56+
57+
test('the resulting type contains the correct events', async () => {
58+
const unparsed: UnparsedTriggerBundle = {
59+
type: 'trigger',
60+
name: 'MyFirstTrigger',
61+
filePath: 'src/triggers/MyFirstTrigger.trigger',
62+
content: new TriggerBuilder().withEvents(['before insert']).build(),
63+
};
64+
65+
const result = await reflectTriggerSource([unparsed])();
66+
67+
assertEither(result, (data) => {
68+
expect(data[0].type.events).toEqual(['beforeinsert']);
69+
});
70+
});
71+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export class TriggerBuilder {
2+
name: string = 'MyFirstTrigger';
3+
objectName: string = 'Account';
4+
events: string[] = ['before insert'];
5+
6+
withName(name: string): TriggerBuilder {
7+
this.name = name;
8+
return this;
9+
}
10+
11+
withObjectName(objectName: string): TriggerBuilder {
12+
this.objectName = objectName;
13+
return this;
14+
}
15+
16+
withEvents(events: string[]): TriggerBuilder {
17+
this.events = events;
18+
return this;
19+
}
20+
21+
build(): string {
22+
return `
23+
trigger ${this.name} on ${this.objectName} (${this.events.join(', ')}) {}`;
24+
}
25+
}

0 commit comments

Comments
 (0)