remote-jobs/test/functions.js
James Nylen 2682009c9f
Parse profile content into a JSON+HTML data structure (#445)
* A few minor tweaks

* Add toIdentifierCase function

* Use toIdentifierCase function to make profile content more code-friendly

* Improve "incomplete profile" indicator checks

In order to properly check the "incomplete profile" indicators, the
"Company blurb" section should exist.

* Return parsed HTML content for each company

* Test parsing of invisible "variation selector" character

* Strip out invisible "variation selector" character
2018-06-25 02:16:13 -05:00

134 lines
3.2 KiB
JavaScript

const { assert } = require( 'chai' );
const {
companyNameToProfileFilename,
jsonStringifyUnicodeEscaped,
toIdentifierCase,
stripExtraChars,
} = require( '../lib' );
describe( 'companyNameToProfileFilename function', () => {
it( 'should lowercase and convert spaces to dashes', () => {
assert.strictEqual(
companyNameToProfileFilename( 'My Company-Name' ),
'my-company-name'
);
} );
it( 'should expand ampersands', () => {
assert.strictEqual(
companyNameToProfileFilename( '&text&stuff&' ),
'and-text-and-stuff-and'
);
} );
it( 'should remove apostrophes', () => {
assert.strictEqual(
companyNameToProfileFilename( 'Let\'s Encrypt' ),
'lets-encrypt'
);
} );
it( 'should lowercase and strip non-alphanumeric characters', () => {
assert.strictEqual(
companyNameToProfileFilename( 'My@123 *Markdown* _Company@Name_' ),
'my-123-markdown-company-name'
);
} );
it( 'should trim leading and trailing whitespace etc', () => {
assert.strictEqual(
companyNameToProfileFilename( ' My WEIRD company name \'$$$$' ),
'my-weird-company-name'
);
} );
} );
describe( 'jsonStringifyUnicodeEscaped function', () => {
it( 'should equal JSON.stringify for non-Unicode-expanded inputs', () => {
assert.strictEqual(
jsonStringifyUnicodeEscaped( 'abc def' ),
'"abc def"'
);
assert.strictEqual(
jsonStringifyUnicodeEscaped( '\'\\"\nabc\ndef@#$\'' ),
'"\'\\\\\\"\\nabc\\ndef@#$\'"'
);
} );
it( 'should escape Unicode-expanded characters', () => {
assert.strictEqual(
jsonStringifyUnicodeEscaped( '\u26a0\ufe0f*' ),
'"\\u26a0\\ufe0f*"'
);
assert.strictEqual(
jsonStringifyUnicodeEscaped( '\u26a0 Emoji \u26a0\ufe0f and\nother \\text' ),
'"\\u26a0 Emoji \\u26a0\\ufe0f and\\nother \\\\text"'
);
} );
} );
describe( 'toIdentifierCase function', () => {
it( 'should convert all valid headings to the correct identifiers', () => {
assert.strictEqual(
toIdentifierCase( 'Company blurb' ),
'companyBlurb'
);
assert.strictEqual(
toIdentifierCase( 'Company size' ),
'companySize'
);
assert.strictEqual(
toIdentifierCase( 'Remote status' ),
'remoteStatus'
);
assert.strictEqual(
toIdentifierCase( 'Region' ),
'region'
);
assert.strictEqual(
toIdentifierCase( 'Company technologies' ),
'companyTechnologies'
);
assert.strictEqual(
toIdentifierCase( 'Office locations' ),
'officeLocations'
);
assert.strictEqual(
toIdentifierCase( 'How to apply' ),
'howToApply'
);
} );
it( 'should behave reasonably for other input values', () => {
assert.strictEqual(
toIdentifierCase( ' With Whitespace ' ),
'withWhitespace'
);
assert.strictEqual(
toIdentifierCase( 'with <extra> chars 123.' ),
'withExtraChars123'
);
assert.strictEqual(
toIdentifierCase( 'Let\'s Encrypt' ),
'letsEncrypt'
);
} );
} );
describe( 'stripExtraChars function', () => {
it( 'should strip unwanted invisible characters', () => {
assert.strictEqual(
stripExtraChars( 'abc\ufe0f def' ),
'abc def'
);
assert.strictEqual(
stripExtraChars( '\u26a0\ufe0f' ),
'\u26a0'
);
assert.strictEqual(
stripExtraChars( '\u26a0\ufe0f\ufe0f \u26a0\ufe0f\ufe0f' ),
'\u26a0 \u26a0'
);
} );
} );