From 76dbd8905a749167a1f90ded069db2f86bb5ad22 Mon Sep 17 00:00:00 2001 From: Katerina Pilatova Date: Fri, 12 Jan 2024 12:27:05 +0100 Subject: [PATCH] chore(models): require slug for organization and project, better descriptions --- packages/models/src/lib/audit.ts | 2 +- packages/models/src/lib/group.ts | 4 +++- packages/models/src/lib/plugin-config.ts | 2 +- packages/models/src/lib/upload-config.ts | 10 +++------ .../models/src/lib/upload-config.unit.test.ts | 22 +++++++++++++++++++ 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/packages/models/src/lib/audit.ts b/packages/models/src/lib/audit.ts index 5ed08bbaf..050c5d8ae 100644 --- a/packages/models/src/lib/audit.ts +++ b/packages/models/src/lib/audit.ts @@ -33,7 +33,7 @@ export const pluginAuditsSchema = z // helper for validator: audit slugs are unique function duplicateSlugsInAuditsErrorMsg(audits: Audit[]) { const duplicateRefs = getDuplicateSlugsInAudits(audits); - return `In plugin audits the slugs are not unique: ${errorItems( + return `In plugin audits the following slugs are not unique: ${errorItems( duplicateRefs, )}`; } diff --git a/packages/models/src/lib/group.ts b/packages/models/src/lib/group.ts index d999a8129..ee549f059 100644 --- a/packages/models/src/lib/group.ts +++ b/packages/models/src/lib/group.ts @@ -63,7 +63,9 @@ function getDuplicateRefsInGroups(groups: WeightedRef[]) { // helper for validator: group refs are unique function duplicateSlugsInGroupsErrorMsg(groups: Group[] | undefined) { const duplicateRefs = getDuplicateSlugsInGroups(groups); - return `In groups the slugs are not unique: ${errorItems(duplicateRefs)}`; + return `In groups the following slugs are not unique: ${errorItems( + duplicateRefs, + )}`; } function getDuplicateSlugsInGroups(groups: Group[] | undefined) { diff --git a/packages/models/src/lib/plugin-config.ts b/packages/models/src/lib/plugin-config.ts index 98ce92414..7feb60edc 100644 --- a/packages/models/src/lib/plugin-config.ts +++ b/packages/models/src/lib/plugin-config.ts @@ -21,7 +21,7 @@ export const pluginMetaSchema = packageVersionSchema() ) .merge( z.object({ - slug: slugSchema('References plugin. ID (unique within core config)'), + slug: slugSchema('Unique plugin slug within core config'), icon: materialIconSchema, }), ); diff --git a/packages/models/src/lib/upload-config.ts b/packages/models/src/lib/upload-config.ts index 8c56aed56..d875d1b48 100644 --- a/packages/models/src/lib/upload-config.ts +++ b/packages/models/src/lib/upload-config.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { urlSchema } from './implementation/schemas'; +import { slugSchema, urlSchema } from './implementation/schemas'; export const uploadConfigSchema = z.object({ server: urlSchema('URL of deployed portal API'), @@ -7,12 +7,8 @@ export const uploadConfigSchema = z.object({ description: 'API key with write access to portal (use `process.env` for security)', }), - organization: z.string({ - description: 'Organization in code versioning system', - }), - project: z.string({ - description: 'Project in code versioning system', - }), + organization: slugSchema('Organization slug from Code PushUp portal'), + project: slugSchema('Project slug from Code PushUp portal'), }); export type UploadConfig = z.infer; diff --git a/packages/models/src/lib/upload-config.unit.test.ts b/packages/models/src/lib/upload-config.unit.test.ts index 1283839ab..ac00f28d7 100644 --- a/packages/models/src/lib/upload-config.unit.test.ts +++ b/packages/models/src/lib/upload-config.unit.test.ts @@ -23,4 +23,26 @@ describe('uploadConfigSchema', () => { } satisfies UploadConfig), ).toThrow('Invalid url'); }); + + it('should throw for a PascalCase organization name', () => { + expect(() => + uploadConfigSchema.parse({ + apiKey: 'API-K3Y', + organization: 'CodePushUp', + project: 'cli', + server: '-invalid-/url', + } satisfies UploadConfig), + ).toThrow('slug has to follow the pattern'); + }); + + it('should throw for a project with uppercase letters', () => { + expect(() => + uploadConfigSchema.parse({ + apiKey: 'API-K3Y', + organization: 'code-pushup', + project: 'Code-PushUp-CLI', + server: '-invalid-/url', + } satisfies UploadConfig), + ).toThrow('slug has to follow the pattern'); + }); });