Skip to content

Commit e0a7f17

Browse files
ASAS
authored andcommitted
feat(models): extend artifcationGenerationCommand schema with single string, add more test cases
1 parent 591bf37 commit e0a7f17

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

packages/models/src/lib/configuration.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ export const artifactGenerationCommand = z.object({
1212
.optional(),
1313
});
1414

15-
export type ArtifactGenerationCommand = z.infer<
16-
typeof artifactGenerationCommand
17-
>;
15+
export const artifactGenerationCommandSchema = z.union([
16+
z.string({ description: 'Command as a single string' }).min(1),
17+
z.object({
18+
command: z.string({ description: 'Generate artifact files' }).min(1),
19+
args: z.array(z.string()).optional(),
20+
}),
21+
]);
1822

1923
export const pluginArtifactOptionsSchema = z.object({
20-
generateArtifacts: artifactGenerationCommand.optional(),
24+
generateArtifacts: artifactGenerationCommandSchema.optional(),
2125
artifactsPaths: z.union([z.string(), z.array(z.string()).min(1)]),
2226
});
2327

packages/models/src/lib/configuration.unit.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,34 @@ describe('pluginArtifactOptionsSchema', () => {
9494
};
9595
expect(pluginArtifactOptionsSchema.safeParse(data).success).toBe(false);
9696
});
97+
98+
it('should validate with generateArtifacts as a string', () => {
99+
const data = {
100+
generateArtifacts: 'yarn test --coverage',
101+
artifactsPaths: 'coverage/lcov.info',
102+
};
103+
expect(pluginArtifactOptionsSchema.safeParse(data)).toStrictEqual({
104+
success: true,
105+
data: {
106+
generateArtifacts: 'yarn test --coverage',
107+
artifactsPaths: 'coverage/lcov.info',
108+
},
109+
});
110+
});
111+
112+
it('should fail if generateArtifacts is an empty string', () => {
113+
const data = {
114+
generateArtifacts: '',
115+
artifactsPaths: 'coverage/lcov.info',
116+
};
117+
expect(pluginArtifactOptionsSchema.safeParse(data).success).toBe(false);
118+
});
119+
120+
it('should fail if generateArtifacts is a number', () => {
121+
const data = {
122+
generateArtifacts: 123,
123+
artifactsPaths: 'coverage/lcov.info',
124+
};
125+
expect(pluginArtifactOptionsSchema.safeParse(data).success).toBe(false);
126+
});
97127
});

0 commit comments

Comments
 (0)