From d0831d0f90e7cbfdc65daebf3c64e4fb2f2289ef Mon Sep 17 00:00:00 2001 From: Lukas Oppermann Date: Mon, 9 Oct 2023 11:08:19 +0200 Subject: [PATCH] test for typography schema (#761) --- src/schemas/typographyToken.ts | 4 +- src/schemas/typographyTokenSchema.test.ts | 58 +++++++++++++++++++ ...a.test.ts => validTokenTypeSchema.test.ts} | 0 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/schemas/typographyTokenSchema.test.ts rename src/schemas/{tokenTypeSchema.test.ts => validTokenTypeSchema.test.ts} (100%) diff --git a/src/schemas/typographyToken.ts b/src/schemas/typographyToken.ts index 8a01018cc..bdfcbf3d4 100644 --- a/src/schemas/typographyToken.ts +++ b/src/schemas/typographyToken.ts @@ -5,11 +5,11 @@ import {baseToken} from './baseToken' import {fontWeightValue} from './fontWeightValue' import {tokenType} from './tokenType' -const typographyValue = z.object({ +export const typographyValue = z.object({ fontSize: z.union([dimensionValue, referenceValue]), lineHeight: z.union([dimensionValue, referenceValue]).optional(), fontWeight: z.union([fontWeightValue, referenceValue]), - fontFamily: z.union([z.string(), referenceValue]), + fontFamily: z.union([z.string().min(1), referenceValue]), }) export const typographyToken = baseToken diff --git a/src/schemas/typographyTokenSchema.test.ts b/src/schemas/typographyTokenSchema.test.ts new file mode 100644 index 000000000..c2752bcc4 --- /dev/null +++ b/src/schemas/typographyTokenSchema.test.ts @@ -0,0 +1,58 @@ +import {typographyToken, typographyValue} from './typographyToken' + +describe('Schema: typographyToken', () => { + const validValue = { + fontSize: '16px', + lineHeight: '24px', + fontWeight: 600, + fontFamily: 'Helvetica', + } + + const validToken = { + $value: validValue, + $type: 'typography', + $description: 'a typography token', + } + + it('parses valid tokens', () => { + expect(typographyToken.safeParse(validToken).success).toStrictEqual(true) + }) + + it('parses valid value', () => { + expect(typographyValue.safeParse(validValue).success).toStrictEqual(true) + // lineHeight is optional + expect(typographyValue.safeParse({...validValue, lineHeight: undefined}).success).toStrictEqual(true) + }) + + it('it fails on missing property', () => { + expect(typographyValue.safeParse({...validValue, fontSize: undefined}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontWeight: undefined}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontFamily: undefined}).success).toStrictEqual(false) + }) + + it('it fails on invalid fontSize values', () => { + expect(typographyValue.safeParse({...validValue, fontSize: '100%'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontSize: '100'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontSize: ''}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontSize: 10}).success).toStrictEqual(false) + }) + + it('it fails on invalid lineHeight values', () => { + expect(typographyValue.safeParse({...validValue, lineHeight: '100%'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, lineHeight: '100'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, lineHeight: ''}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, lineHeight: 10}).success).toStrictEqual(false) + }) + + it('it fails on invalid fontWeight values', () => { + expect(typographyValue.safeParse({...validValue, fontWeight: '600'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontWeight: 'bold'}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontWeight: ''}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontWeight: 10}).success).toStrictEqual(false) + }) + + it('it fails on invalid fontFamily values', () => { + expect(typographyValue.safeParse({...validValue, fontFamily: ''}).success).toStrictEqual(false) + expect(typographyValue.safeParse({...validValue, fontFamily: 10}).success).toStrictEqual(false) + }) +}) diff --git a/src/schemas/tokenTypeSchema.test.ts b/src/schemas/validTokenTypeSchema.test.ts similarity index 100% rename from src/schemas/tokenTypeSchema.test.ts rename to src/schemas/validTokenTypeSchema.test.ts