From a6015aff3b95fef594225a0b4dc89f51456064fe Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 03:09:10 +0000 Subject: [PATCH 1/3] implement basic linting with eslint, fix linting errors in testenv module Signed-off-by: Arthur Lu --- .eslintrc.json | 33 +++++++++ package.json | 11 ++- testenv/testenv.js | 54 +++++++------- testenv/testenv.test.js | 159 ++++++++++++++++++++-------------------- 4 files changed, 149 insertions(+), 108 deletions(-) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..b3a4079 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": "eslint:recommended", + "overrides": [ + ], + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + "tab" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ], + "no-global-assign": 0 + } +} diff --git a/package.json b/package.json index c845db1..2ee115b 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,16 @@ "name": "food-journal", "version": "1.0.0", "scripts": { - "test": "mocha --recursive **/*.test.js" + "test": "mocha --recursive **/*.test.js", + "lint": "eslint **/*.js", + "fix-style": "eslint --fix **/*.js" }, - "dependencies": { + "devDependencies": { + "eslint": "^8.27.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.5.0", + "eslint-plugin-promise": "^6.1.1", "mocha": "10" } } diff --git a/testenv/testenv.js b/testenv/testenv.js index e62cfc3..01b6e4c 100644 --- a/testenv/testenv.js +++ b/testenv/testenv.js @@ -1,28 +1,28 @@ -module.exports = {environment}; - -function environment () { - const localStorageMock = (function () { - let store = {}; - return { - getItem(key) { - return store[key]; - }, - setItem(key, value) { - store[key] = value; - }, - clear() { - store = {}; - }, - removeItem(key) { - delete store[key]; - }, - getAll() { - return store; - }, - }; - })(); - - let window = {}; - Object.defineProperty(window, "localStorage", { value: localStorageMock }); - return window; +module.exports = {environment}; + +function environment () { + const localStorageMock = (function () { + let store = {}; + return { + getItem(key) { + return store[key]; + }, + setItem(key, value) { + store[key] = value; + }, + clear() { + store = {}; + }, + removeItem(key) { + delete store[key]; + }, + getAll() { + return store; + }, + }; + })(); + + let window = {}; + Object.defineProperty(window, "localStorage", { value: localStorageMock }); + return window; } \ No newline at end of file diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js index d274fb8..91bf30b 100644 --- a/testenv/testenv.test.js +++ b/testenv/testenv.test.js @@ -1,80 +1,81 @@ -const {environment} = require("./testenv.js"); -var assert = require('assert'); -var {saveToLocal, getFromLocal, removeFromLocal, clearLocal} = require('./testenv_helpers'); - -beforeEach(() => { - window = environment(); -}); - -describe("test localStorage mock", () => { - it("test save and fetch", () => { - saveToLocal("testkey1", "testvalue1"); - saveToLocal("testkey2", "testvalue2"); - saveToLocal("testkey3", "testvalue3"); - saveToLocal("testkey4", "testvalue4"); - - assert.equal(getFromLocal("testkey1"), "testvalue1"); - assert.equal(getFromLocal("testkey2"), "testvalue2"); - assert.equal(getFromLocal("testkey3"), "testvalue3"); - assert.equal(getFromLocal("testkey4"), "testvalue4"); - - saveToLocal("testkey6", "testvalue5"); - assert.equal(getFromLocal("testkey6"), "testvalue5"); - }); - - it("test window locality", () => { - assert.equal(getFromLocal("testkey1"), null); - assert.equal(getFromLocal("testkey2"), null); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), null); - }); - - it("test delete and fetch", () => { - saveToLocal("testkey1", "testvalue1"); - saveToLocal("testkey2", "testvalue2"); - saveToLocal("testkey3", "testvalue3"); - saveToLocal("testkey4", "testvalue4"); - - removeFromLocal("testkey3"); - - assert.equal(getFromLocal("testkey1"), "testvalue1"); - assert.equal(getFromLocal("testkey2"), "testvalue2"); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), "testvalue4"); - - removeFromLocal("testkey1"); - - assert.equal(getFromLocal("testkey1"), null); - assert.equal(getFromLocal("testkey2"), "testvalue2"); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), "testvalue4"); - - removeFromLocal("testkey4"); - - assert.equal(getFromLocal("testkey1"), null); - assert.equal(getFromLocal("testkey2"), "testvalue2"); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), null); - - removeFromLocal("testkey2"); - - assert.equal(getFromLocal("testkey1"), null); - assert.equal(getFromLocal("testkey2"), null); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), null); - }); - - it("test clear and fetch", () => { - saveToLocal("testkey1", "testvalue1"); - saveToLocal("testkey2", "testvalue2"); - saveToLocal("testkey3", "testvalue3"); - saveToLocal("testkey4", "testvalue4"); - - clearLocal(); - - assert.equal(getFromLocal("testkey1"), null); - assert.equal(getFromLocal("testkey2"), null); - assert.equal(getFromLocal("testkey3"), null); - assert.equal(getFromLocal("testkey4"), null); - }); +const {environment} = require("./testenv.js"); +var assert = require("assert"); +var {describe, it, beforeEach} = require("mocha"); +var {saveToLocal, getFromLocal, removeFromLocal, clearLocal} = require("./testenv_helpers"); + +beforeEach(() => { + window = environment(); +}); + +describe("test localStorage mock", () => { + it("test save and fetch", () => { + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + assert.equal(getFromLocal("testkey1"), "testvalue1"); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), "testvalue3"); + assert.equal(getFromLocal("testkey4"), "testvalue4"); + + saveToLocal("testkey6", "testvalue5"); + assert.equal(getFromLocal("testkey6"), "testvalue5"); + }); + + it("test window locality", () => { + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); + }); + + it("test delete and fetch", () => { + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + removeFromLocal("testkey3"); + + assert.equal(getFromLocal("testkey1"), "testvalue1"); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), "testvalue4"); + + removeFromLocal("testkey1"); + + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), "testvalue4"); + + removeFromLocal("testkey4"); + + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); + + removeFromLocal("testkey2"); + + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); + }); + + it("test clear and fetch", () => { + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + clearLocal(); + + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); + }); }); \ No newline at end of file From 7392d25c4286a0e927b7660faaac09fcbfb892ee Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 04:09:15 +0000 Subject: [PATCH 2/3] implement linting action, fix action naming issue Signed-off-by: Arthur Lu --- .github/workflows/js-linting.yml | 25 +++++++++++++++++++++++++ .github/workflows/js-unittest.yml | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/js-linting.yml diff --git a/.github/workflows/js-linting.yml b/.github/workflows/js-linting.yml new file mode 100644 index 0000000..10afcd7 --- /dev/null +++ b/.github/workflows/js-linting.yml @@ -0,0 +1,25 @@ +name: JS Linting + +on: + pull_request: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # Single deploy job since we're just deploying + test: + runs-on: ubuntu-latest + steps: + - name: Install apt updates + run: sudo apt -y update; sudo apt -y upgrade; + - name: Install prerequisites + run: sudo apt install -y nodejs npm; + - name: Checkout + uses: actions/checkout@v3 + - name: Install dependencies + run: sudo npm install + - name: Run tests + run: sudo npm run lint \ No newline at end of file diff --git a/.github/workflows/js-unittest.yml b/.github/workflows/js-unittest.yml index 327f27f..d4fc26d 100644 --- a/.github/workflows/js-unittest.yml +++ b/.github/workflows/js-unittest.yml @@ -1,4 +1,4 @@ -name: Jest JS Unit Test +name: JS Unit Test on: pull_request: From aa69ef1ab75393d48e19a9331997156faa87317f Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 17:53:55 +0000 Subject: [PATCH 3/3] fix devDependencies list in package.json Signed-off-by: Arthur Lu --- package.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/package.json b/package.json index 2ee115b..c21fbe9 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,6 @@ }, "devDependencies": { "eslint": "^8.27.0", - "eslint-config-standard": "^17.0.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.5.0", - "eslint-plugin-promise": "^6.1.1", "mocha": "10" } }