diff --git a/js/__tests__/.eslintrc b/js/__tests__/.eslintrc new file mode 100644 index 00000000..55f121d1 --- /dev/null +++ b/js/__tests__/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "jest": true + } +} diff --git a/js/__tests__/utils-test.js b/js/__tests__/utils-test.js new file mode 100644 index 00000000..31645d42 --- /dev/null +++ b/js/__tests__/utils-test.js @@ -0,0 +1,34 @@ +jest.unmock('../utils'); + +import {getTimeObj, getTimeStr} from '../utils'; + +describe('getTimeObj', () => { + it('expresses seconds as an object', () => { + const actual = getTimeObj(1234); + const expected = { + minutesFirstDigit: 2, + minutesSecondDigit: 0, + secondsFirstDigit: 3, + secondsSecondDigit: 4 + }; + expect(actual).toEqual(expected); + }); +}); + +describe('getTimeStr', () => { + it('expresses seconds as string', () => { + const actual = getTimeStr(1234); + const expected = '20:34'; + expect(actual).toEqual(expected); + }); + it('pads with zeros', () => { + const actual = getTimeStr(5); + const expected = '00:05'; + expect(actual).toEqual(expected); + }); + it('truncates extra minutes', () => { + const actual = getTimeStr(540000); + const expected = '9000:00'; + expect(actual).toEqual(expected); + }); +}); diff --git a/js/utils.js b/js/utils.js index 8c33a6d4..61bf5b1d 100644 --- a/js/utils.js +++ b/js/utils.js @@ -10,7 +10,19 @@ const getTimeObj = (time) => { }; }; -module.exports = { - getTimeObj +const getTimeStr = (time) => { + const timeObj = getTimeObj(time); + return [ + timeObj.minutesFirstDigit, + timeObj.minutesSecondDigit, + ':', + timeObj.secondsFirstDigit, + timeObj.secondsSecondDigit + ].join(''); +}; + +module.exports = { + getTimeObj, + getTimeStr }; diff --git a/package.json b/package.json index 0c45c44f..de6b4366 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "lint": "eslint js/*.js js/*.jsx", "build": "webpack --optimize-minimize", "serve": "webpack-dev-server", - "weight": "npm run build && gzip-size built/winamp.js | pretty-bytes" + "weight": "npm run build && gzip-size built/winamp.js | pretty-bytes", + "test": "jest" }, "repository": { "type": "git", @@ -28,7 +29,9 @@ "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.10.4", + "babel-jest": "^13.2.2", "babel-loader": "^6.2.4", + "babel-polyfill": "^6.9.1", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.11.1", "css-loader": "^0.23.1", @@ -36,6 +39,7 @@ "eslint-plugin-react": "^5.2.2", "file-loader": "^0.9.0", "gzip-size-cli": "^1.0.0", + "jest-cli": "^13.2.3", "pretty-bytes-cli": "^1.0.0", "style-loader": "^0.13.1", "url-loader": "^0.5.7",