From b2b036148fe607ada9fcfec357c05d738856756a Mon Sep 17 00:00:00 2001 From: Eric Cornelissen Date: Tue, 6 Apr 2021 16:53:46 +0200 Subject: [PATCH] Update NPM test suite (#5370) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Test if icons have "guidelines" when they should ... and don't when they shouldn't. * Update paht test in icons.test.js * Improve test names and test conditions * Test if icons have a "license" when they should ... and don't when they shouldn't. * Test value of guidelines Co-authored-by: Álvaro Mondéjar * Test if SPDX license URL is a URL indeed Using the same regular expression as we use for URLs in the JSON data (see .jsonschema.json#url). --- tests/icons.test.js | 44 ++++++++++++++++++++++++++++++++++++-------- tests/index.test.js | 43 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 71 insertions(+), 16 deletions(-) diff --git a/tests/icons.test.js b/tests/icons.test.js index b7b7a2c94..760ee1037 100644 --- a/tests/icons.test.js +++ b/tests/icons.test.js @@ -5,28 +5,56 @@ icons.forEach(icon => { const filename = getIconSlug(icon); const subject = require(`../icons/${filename}.js`); - test(`${icon.title} has a "title"`, () => { + test(`${icon.title} has the correct "title"`, () => { expect(typeof subject.title).toBe('string'); + expect(subject.title).toEqual(icon.title); }); - test(`${icon.title} has a "hex" value`, () => { + test(`${icon.title} has the correct "slug"`, () => { + expect(typeof subject.slug).toBe('string'); + expect(subject.slug).toEqual(getIconSlug(icon)); + }); + + test(`${icon.title} has the correct "hex" value`, () => { expect(typeof subject.hex).toBe('string'); - expect(subject.hex).toHaveLength(6); + expect(subject.hex).toEqual(icon.hex); }); - test(`${icon.title} has a "source"`, () => { + test(`${icon.title} has the correct "source"`, () => { expect(typeof subject.source).toBe('string'); + expect(subject.source).toEqual(icon.source); }); - test(`${icon.title} has an "svg"`, () => { + test(`${icon.title} has an "svg" value`, () => { expect(typeof subject.svg).toBe('string'); }); - test(`${icon.title} has a "path"`, () => { + test(`${icon.title} has a valid "path" value`, () => { expect(typeof subject.path).toBe('string'); + expect(subject.path).toMatch(/^[MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/g); }); - test(`${icon.title} has a "slug"`, () => { - expect(typeof subject.slug).toBe('string'); + test(`${icon.title} has ${icon.guidelines ? "the correct" : "no"} "guidelines"`, () => { + if (icon.guidelines) { + expect(typeof subject.guidelines).toBe('string'); + expect(subject.guidelines).toEqual(icon.guidelines); + } else { + expect(subject.guidelines).toBeUndefined(); + } + }); + + test(`${icon.title} has ${icon.license ? "the correct" : "no"} "license"`, () => { + if (icon.license) { + expect(typeof subject.license).toBe('object'); + expect(subject.license).toHaveProperty('type', icon.license.type); + if (icon.license.type === "custom") { + expect(subject.license).toHaveProperty('url', icon.license.url); + } else { + expect(typeof subject.license.url).toBe('string'); + expect(subject.license.url).toMatch(/^https?:\/\/[^\s]+$/); + } + } else { + expect(subject.license).toBeUndefined(); + } }); }); diff --git a/tests/index.test.js b/tests/index.test.js index 0264d9516..03e5bcf30 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -6,30 +6,57 @@ icons.forEach(icon => { const name = icon.slug || icon.title; const subject = simpleIcons[name]; - test(`${icon.title} has a "title"`, () => { + test(`${icon.title} has the correct "title"`, () => { expect(typeof subject.title).toBe('string'); + expect(subject.title).toEqual(icon.title); }); - test(`${icon.title} has a "hex" value`, () => { + test(`${icon.title} has the correct "slug"`, () => { + expect(typeof subject.slug).toBe('string'); + expect(subject.slug).toEqual(getIconSlug(icon)); + }); + + test(`${icon.title} has the correct "hex" value`, () => { expect(typeof subject.hex).toBe('string'); - expect(subject.hex).toHaveLength(6); + expect(subject.hex).toEqual(icon.hex); }); - test(`${icon.title} has a "source"`, () => { + test(`${icon.title} has the correct "source"`, () => { expect(typeof subject.source).toBe('string'); + expect(subject.source).toEqual(icon.source); }); - test(`${icon.title} has an "svg"`, () => { + test(`${icon.title} has an "svg" value`, () => { expect(typeof subject.svg).toBe('string'); }); - test(`${icon.title} has a "path"`, () => { + test(`${icon.title} has a valid "path" value`, () => { expect(typeof subject.path).toBe('string'); expect(subject.path).toMatch(/^[MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/g); }); - test(`${icon.title} has a "slug"`, () => { - expect(typeof subject.slug).toBe('string'); + test(`${icon.title} has ${icon.guidelines ? "the correct" : "no"} "guidelines"`, () => { + if (icon.guidelines) { + expect(typeof subject.guidelines).toBe('string'); + expect(subject.guidelines).toEqual(icon.guidelines); + } else { + expect(subject.guidelines).toBeUndefined(); + } + }); + + test(`${icon.title} has ${icon.license ? "the correct" : "no"} "license"`, () => { + if (icon.license) { + expect(typeof subject.license).toBe('object'); + expect(subject.license).toHaveProperty('type', icon.license.type); + if (icon.license.type === "custom") { + expect(subject.license).toHaveProperty('url', icon.license.url); + } else { + expect(typeof subject.license.url).toBe('string'); + expect(subject.license.url).toMatch(/^https?:\/\/[^\s]+$/); + } + } else { + expect(subject.license).toBeUndefined(); + } }); // NOTE: Icons with custom slugs have a custom slug because their title is