Files
shields/lib/text-formatters.spec.js
T
PyvesandPaul Melnikow 7039e68018 Consistent version formatting (#1246)
Provide greater consistency for badges related to versions. Fix #1181.

- the `version` function in `color-formatters` was previously returning the colour of the badge, but also its text with a leading _v_. It was broken down into two separate functions and the text formatting part was moved to `text-formatters`, where it really belongs.

- unit tests were added for these two functions in `color-formatters.spec` and `text-formatters.spec`, using Sazerac.

- as discussed in #1181, the leading _v_ was omitted  for _xxxx-yy-zz_ date patterns. Any future exceptions can easily be added to the `ignoredVersionPatterns` pattern.

- the badge colour was previously switched to orange if a hyphen was found in the version string. This didn't seem ideal, instead pattern matching is done to find keywords such as `beta`, `alpha` or `snapshot`. Of course, this list can easily be extended.

- all badges related to versions now use the `versionText` and `versionColor` functions. There are a few rare exceptions, for instance in cases where the data returned by the service's API allows to figure things out without relying on any parsing/pattern matching (eg. `badgeData.colorscheme = prerelease ? 'orange' : 'blue';`, where `prerelease` is determined from an API's response).
2017-11-11 17:54:38 -05:00

82 lines
2.2 KiB
JavaScript

'use strict';
const { test, given } = require('sazerac');
const moment = require('moment');
const {
starRating,
currencyFromCode,
ordinalNumber,
metric,
omitv,
addv,
maybePluralize,
formatDate
} = require('./text-formatters');
describe('Text formatters', function() {
test(starRating, () => {
given(4.9).expect('★★★★★');
given(3.7).expect('★★★¾☆');
given(2.566).expect('★★½☆☆');
given(2.2).expect('★★¼☆☆');
given(3).expect('★★★☆☆');
});
test(currencyFromCode, () => {
given('CNY').expect('¥');
given('EUR').expect('€');
given('GBP').expect('₤');
given('USD').expect('$');
given('AUD').expect('AUD');
});
test(ordinalNumber, () => {
given(2).expect('2ⁿᵈ');
given(11).expect('11ᵗʰ');
given(23).expect('23ʳᵈ');
given(131).expect('131ˢᵗ');
});
test(metric, () => {
given(999).expect('999');
given(1000).expect('1k');
given(999499).expect('999k');
given(999500).expect('1M');
given(1578896212).expect('2G');
given(80000000000000).expect('80T');
given(4000000000000001).expect('4P');
given(71007000100580002000).expect('71E');
given(1000000000000000000000).expect('1Z');
given(2222222222222222222222222).expect('2Y');
});
test(omitv, () => {
given('hello').expect('hello');
given('v1.0.1').expect('1.0.1');
});
test(addv, () => {
given('1.0.0').expect('v1.0.0');
given('v0.6').expect('v0.6');
given('hello').expect('hello');
given('2017-05-05-Release-2.3.17').expect('2017-05-05-Release-2.3.17');
});
test(maybePluralize, () => {
given('foo', []).expect('foos');
given('foo', [123]).expect('foo');
given('foo', [123, 456]).expect('foos');
given('foo', undefined).expect('foos');
given('box', [], 'boxes').expect('boxes');
given('box', [123], 'boxes').expect('box');
given('box', [123, 456], 'boxes').expect('boxes');
given('box', undefined, 'boxes').expect('boxes');
});
test(formatDate, () => {
given(1465513200000).describe('when given a timestamp in june 2016').expect('june 2016');
given(moment().startOf('year')).describe('when given the beginning of this year').expect('january');
});
});