From 3aa781ef1603a9e8421cf27077e6e334a70f6b48 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Thu, 20 Feb 2020 11:19:23 +0100
Subject: [PATCH] Add eslint support and fix all warnings

---
 packages/auth/.eslintignore    |  3 +++
 packages/auth/.eslintrc.json   | 25 +++++++++++++++++++++++++
 packages/auth/karma.conf.js    |  7 ++++++-
 packages/auth/package.json     |  6 +++++-
 packages/auth/rollup.config.js | 10 +++++++++-
 packages/auth/src/vpu-auth.js  |  2 +-
 packages/auth/test/unit.js     | 18 ++++++++++--------
 7 files changed, 59 insertions(+), 12 deletions(-)
 create mode 100644 packages/auth/.eslintignore
 create mode 100644 packages/auth/.eslintrc.json

diff --git a/packages/auth/.eslintignore b/packages/auth/.eslintignore
new file mode 100644
index 00000000..7b596da7
--- /dev/null
+++ b/packages/auth/.eslintignore
@@ -0,0 +1,3 @@
+/vendor/**
+/dist/**
+/*.js
\ No newline at end of file
diff --git a/packages/auth/.eslintrc.json b/packages/auth/.eslintrc.json
new file mode 100644
index 00000000..1ccd30a3
--- /dev/null
+++ b/packages/auth/.eslintrc.json
@@ -0,0 +1,25 @@
+{
+    "env": {
+        "browser": true,
+        "es6": true,
+        "mocha": true
+    },
+    "extends": ["eslint:recommended", "plugin:jsdoc/recommended"],
+    "globals": {
+        "Atomics": "readonly",
+        "SharedArrayBuffer": "readonly"
+    },
+    "parser": "babel-eslint",
+    "parserOptions": {
+        "ecmaVersion": 2018,
+        "sourceType": "module"
+    },
+    "rules": {
+        "no-unused-vars": ["error", { "args": "none" }],
+        "semi": [2, "always"],
+        "jsdoc/require-jsdoc": 0,
+        "jsdoc/require-param-description": 0,
+        "jsdoc/require-returns": 0,
+        "jsdoc/require-param-type": 0
+    }
+}
\ No newline at end of file
diff --git a/packages/auth/karma.conf.js b/packages/auth/karma.conf.js
index 6a646f5e..b6731e57 100644
--- a/packages/auth/karma.conf.js
+++ b/packages/auth/karma.conf.js
@@ -4,7 +4,12 @@ process.env.CHROME_BIN = require('puppeteer').executablePath();
 module.exports = function(config) {
   config.set({
     basePath: 'dist',
-    frameworks: ['mocha', 'chai'],
+    frameworks: ['mocha'],
+    client: {
+      mocha: {
+        ui: 'tdd',
+      },
+    },
     files: [
       {pattern: './*.js', included: true, watched: true, served: true, type: 'module'},
       {pattern: './**/*', included: false, watched: true, served: true},
diff --git a/packages/auth/package.json b/packages/auth/package.json
index e624b7d6..75f27bcf 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -10,6 +10,9 @@
     "karma-chai": "^0.1.0",
     "karma-chrome-launcher": "^3.0.0",
     "karma-mocha": "^1.3.0",
+    "babel-eslint": "^10.0.3",
+    "eslint": "^6.8.0",
+    "eslint-plugin-jsdoc": "^21.0.0",
     "mocha": "^6.2.0",
     "node-sass": "^4.12.0",
     "puppeteer": "^1.15.0",
@@ -44,6 +47,7 @@
     "watch": "npm run watch-local",
     "watch-local": "rollup -c --watch",
     "watch-dev": "rollup -c --watch --environment BUILD:development",
-    "test": "npm run build-test && karma start --singleRun"
+    "test": "npm run build-test && karma start --singleRun",
+    "lint": "eslint ."
   }
 }
diff --git a/packages/auth/rollup.config.js b/packages/auth/rollup.config.js
index 549369f1..5dec8e77 100644
--- a/packages/auth/rollup.config.js
+++ b/packages/auth/rollup.config.js
@@ -8,6 +8,7 @@ import json from 'rollup-plugin-json';
 import serve from 'rollup-plugin-serve';
 import consts from 'rollup-plugin-consts';
 import del from 'rollup-plugin-delete';
+import chai from 'chai';
 
 const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local';
 console.log("build: " + build);
@@ -27,6 +28,10 @@ export default {
         if (warning.code === 'EVAL') {
             return;
         }
+        // ignore chai warnings
+        if (warning.code === 'CIRCULAR_DEPENDENCY') {
+            return;
+        }
         warn(warning);
     },
     plugins: [
@@ -43,7 +48,10 @@ export default {
           }
         }),
         commonjs({
-            include: 'node_modules/**'
+            include: 'node_modules/**',
+            namedExports: {
+                'chai': Object.keys(chai),
+            }
         }),
         json(),
         (build !== 'local' && build !== 'test') ? terser() : false,
diff --git a/packages/auth/src/vpu-auth.js b/packages/auth/src/vpu-auth.js
index 8199007d..1bfeace9 100644
--- a/packages/auth/src/vpu-auth.js
+++ b/packages/auth/src/vpu-auth.js
@@ -65,7 +65,7 @@ class VPUAuth extends VPULitElement {
         this.keycloakDataUpdateEvent = new CustomEvent("vpu-auth-keycloak-data-update", { "detail": "KeyCloak data was updated", bubbles: true, composed: true });
 
         this.closeDropdown = this.closeDropdown.bind(this);
-        this._onKCChanged = this._onKCChanged.bind(this)
+        this._onKCChanged = this._onKCChanged.bind(this);
    }
 
     _onKCChanged(event) {
diff --git a/packages/auth/test/unit.js b/packages/auth/test/unit.js
index b73dd0ee..a2640cca 100644
--- a/packages/auth/test/unit.js
+++ b/packages/auth/test/unit.js
@@ -1,38 +1,40 @@
+import {expect} from 'chai';
+
 import '../src/vpu-auth';
 import '../src/vpu-auth-demo';
 
-describe('vpu-auth basics', () => {
+suite('vpu-auth basics', () => {
   let node;
 
-  beforeEach(async () => {
+  suiteSetup(async () => {
     node = document.createElement('vpu-auth');
     document.body.appendChild(node);
     await node.updateComplete;
   });
 
-  afterEach(() => {
+  suiteTeardown(() => {
     node.remove();
   });
 
-  it('should render', () => {
+  test('should render', () => {
       expect(node).to.have.property('shadowRoot');
   });
 });
 
-describe('vpu-auth-demo basics', () => {
+suite('vpu-auth-demo basics', () => {
   let node;
 
-  beforeEach(async () => {
+  suiteSetup(async () => {
     node = document.createElement('vpu-auth-demo');
     document.body.appendChild(node);
     await node.updateComplete;
   });
 
-  afterEach(() => {
+  suiteTeardown(() => {
     node.remove();
   });
 
-  it('should render', () => {
+  test('should render', () => {
       expect(node).to.have.property('shadowRoot');
   });
 });
-- 
GitLab