diff --git a/services/chrome-web-store/chrome-web-store-size.service.js b/services/chrome-web-store/chrome-web-store-size.service.js index 040fc9a1a6d53..0a63adae19b39 100644 --- a/services/chrome-web-store/chrome-web-store-size.service.js +++ b/services/chrome-web-store/chrome-web-store-size.service.js @@ -22,8 +22,8 @@ export default class ChromeWebStoreSize extends BaseChromeWebStoreService { color: 'blue', } - transform(sizeStr) { - const match = sizeStr.match(/^(\d+)([a-zA-Z]+)$/) + static transform(sizeStr) { + const match = sizeStr.match(/^(\d+(?:\.\d+)?)([a-zA-Z]+)$/) if (!match) { throw new InvalidResponse({ prettyMessage: 'size does not match expected format', @@ -41,6 +41,6 @@ export default class ChromeWebStoreSize extends BaseChromeWebStoreService { throw new NotFound({ prettyMessage: 'not found' }) } - return { message: this.transform(size) } + return { message: this.constructor.transform(size) } } } diff --git a/services/chrome-web-store/chrome-web-store-size.spec.js b/services/chrome-web-store/chrome-web-store-size.spec.js new file mode 100644 index 0000000000000..e7d940ca75732 --- /dev/null +++ b/services/chrome-web-store/chrome-web-store-size.spec.js @@ -0,0 +1,28 @@ +import { expect } from 'chai' +import { test, given } from 'sazerac' +import { InvalidResponse } from '../index.js' +import ChromeWebStoreSize from './chrome-web-store-size.service.js' + +describe('transform function', function () { + it('formats size correctly', function () { + test(ChromeWebStoreSize.transform, () => { + given('0.55KiB').expect('0.55 KiB') + given('19.86KiB').expect('19.86 KiB') + given('432KiB').expect('432 KiB') + }) + }) + + it('throws when the format is unexpected', function () { + expect(() => ChromeWebStoreSize.transform('432 KiB')).to.throw( + InvalidResponse, + ) + expect(() => ChromeWebStoreSize.transform('432')).to.throw(InvalidResponse) + expect(() => ChromeWebStoreSize.transform('KiB')).to.throw(InvalidResponse) + expect(() => ChromeWebStoreSize.transform('foobar')).to.throw( + InvalidResponse, + ) + expect(() => ChromeWebStoreSize.transform('4.4.4 KiB')).to.throw( + InvalidResponse, + ) + }) +})