From 260c319a3397ee7079a32a25d91eb05cc9102936 Mon Sep 17 00:00:00 2001
From: Tom Robinson <tlrobinson@gmail.com>
Date: Thu, 8 Dec 2016 14:55:49 -0800
Subject: [PATCH] Lint frontend tests, including checking for accidental
 fdescribe/fit

---
 frontend/test/.eslintrc                            | 13 +++++++++++++
 frontend/test/e2e/admin/datamodel.spec.js          |  7 -------
 frontend/test/e2e/admin/people.spec.js             |  4 ----
 frontend/test/e2e/auth/login.spec.js               |  9 +--------
 .../test/e2e/query_builder/query_builder.spec.js   |  7 -------
 frontend/test/e2e/query_builder/tutorial.spec.js   |  5 -----
 frontend/test/e2e/setup/signup.spec.js             |  5 -----
 frontend/test/e2e/support/shared-resource.js       |  2 +-
 frontend/test/e2e/support/utils.js                 |  2 --
 frontend/test/karma.conf.js                        |  3 ---
 frontend/test/unit/lib/expressions.spec.js         | 14 +++++++-------
 package.json                                       |  3 ++-
 yarn.lock                                          |  4 ++++
 13 files changed, 28 insertions(+), 50 deletions(-)
 create mode 100644 frontend/test/.eslintrc

diff --git a/frontend/test/.eslintrc b/frontend/test/.eslintrc
new file mode 100644
index 00000000000..820d4aa1ab1
--- /dev/null
+++ b/frontend/test/.eslintrc
@@ -0,0 +1,13 @@
+{
+    "rules": {
+        "jasmine/no-focused-tests": 2,
+        "jasmine/no-suite-dupes": [2, "branch"]
+    },
+    "env": {
+        "jasmine": true,
+        "node": true
+    },
+    "plugins": [
+        "jasmine"
+    ]
+}
diff --git a/frontend/test/e2e/admin/datamodel.spec.js b/frontend/test/e2e/admin/datamodel.spec.js
index 5bb160930a6..fc129af68e2 100644
--- a/frontend/test/e2e/admin/datamodel.spec.js
+++ b/frontend/test/e2e/admin/datamodel.spec.js
@@ -1,16 +1,9 @@
-
-import { By, until } from "selenium-webdriver";
-
 import {
-    waitForElement,
     waitForElementText,
-    waitForElementRemoved,
     findElement,
     waitForElementAndClick,
     waitForElementAndSendKeys,
-    waitForUrl,
     screenshot,
-    loginMetabase,
     ensureLoggedIn,
     describeE2E
 } from "../support/utils";
diff --git a/frontend/test/e2e/admin/people.spec.js b/frontend/test/e2e/admin/people.spec.js
index 38d2af293bc..328088ed86e 100644
--- a/frontend/test/e2e/admin/people.spec.js
+++ b/frontend/test/e2e/admin/people.spec.js
@@ -1,10 +1,6 @@
-
-import { By, until } from "selenium-webdriver";
-
 import {
     waitForElement,
     waitForElementText,
-    waitForElementRemoved,
     findElement,
     waitForElementAndClick,
     waitForElementAndSendKeys,
diff --git a/frontend/test/e2e/auth/login.spec.js b/frontend/test/e2e/auth/login.spec.js
index 9416af4f9d0..d67f0476d4a 100644
--- a/frontend/test/e2e/auth/login.spec.js
+++ b/frontend/test/e2e/auth/login.spec.js
@@ -1,13 +1,6 @@
 
-import { By, until } from "selenium-webdriver";
-
+import { By } from "selenium-webdriver";
 import {
-    waitForElement,
-    waitForElementText,
-    waitForElementRemoved,
-    findElement,
-    waitForElementAndClick,
-    waitForElementAndSendKeys,
     waitForUrl,
     screenshot,
     loginMetabase,
diff --git a/frontend/test/e2e/query_builder/query_builder.spec.js b/frontend/test/e2e/query_builder/query_builder.spec.js
index 51131f377dc..98f8ad03932 100644
--- a/frontend/test/e2e/query_builder/query_builder.spec.js
+++ b/frontend/test/e2e/query_builder/query_builder.spec.js
@@ -1,16 +1,9 @@
 
-import { By, until } from "selenium-webdriver";
-
 import {
-    waitForElement,
-    waitForElementText,
     waitForElementRemoved,
-    findElement,
     waitForElementAndClick,
     waitForElementAndSendKeys,
-    waitForUrl,
     screenshot,
-    loginMetabase,
     describeE2E,
     ensureLoggedIn
 } from "../support/utils";
diff --git a/frontend/test/e2e/query_builder/tutorial.spec.js b/frontend/test/e2e/query_builder/tutorial.spec.js
index e21619af931..8b6b31f589a 100644
--- a/frontend/test/e2e/query_builder/tutorial.spec.js
+++ b/frontend/test/e2e/query_builder/tutorial.spec.js
@@ -1,15 +1,10 @@
-import { By, until } from "selenium-webdriver";
-
 import {
     waitForElement,
-    waitForElementText,
     waitForElementRemoved,
-    findElement,
     waitForElementAndClick,
     waitForElementAndSendKeys,
     waitForUrl,
     screenshot,
-    loginMetabase,
     describeE2E,
     ensureLoggedIn
 } from "../support/utils";
diff --git a/frontend/test/e2e/setup/signup.spec.js b/frontend/test/e2e/setup/signup.spec.js
index 57c74606bce..3303d7d5831 100644
--- a/frontend/test/e2e/setup/signup.spec.js
+++ b/frontend/test/e2e/setup/signup.spec.js
@@ -1,17 +1,12 @@
 import path from "path";
 
-import { By, until } from "selenium-webdriver";
-
 import {
     waitForElement,
-    waitForElementText,
-    waitForElementRemoved,
     findElement,
     waitForElementAndClick,
     waitForElementAndSendKeys,
     waitForUrl,
     screenshot,
-    loginMetabase,
     describeE2E
 } from "../support/utils";
 
diff --git a/frontend/test/e2e/support/shared-resource.js b/frontend/test/e2e/support/shared-resource.js
index 6d3ec98fedc..efb639af73f 100644
--- a/frontend/test/e2e/support/shared-resource.js
+++ b/frontend/test/e2e/support/shared-resource.js
@@ -22,7 +22,7 @@ export default function createSharedResource(resourceName, {
         return Promise.all(exitPromises);
     })
 
-    async function kill(entry) {
+    function kill(entry) {
         if (entriesByKey.has(entry.key)) {
             entriesByKey.delete(entry.key);
             entriesByResource.delete(entry.resource);
diff --git a/frontend/test/e2e/support/utils.js b/frontend/test/e2e/support/utils.js
index 92c460d5abe..feb21b0e491 100644
--- a/frontend/test/e2e/support/utils.js
+++ b/frontend/test/e2e/support/utils.js
@@ -7,8 +7,6 @@ import { Driver } from "webchauffeur";
 
 const DEFAULT_TIMEOUT = 50000;
 
-const delay = (timeout = 0) => new Promise((resolve) => setTimeout(resolve, timeout));
-
 const log = (message) => {
     console.log(message);
 };
diff --git a/frontend/test/karma.conf.js b/frontend/test/karma.conf.js
index 80e628aeee1..93c9bb6f7aa 100644
--- a/frontend/test/karma.conf.js
+++ b/frontend/test/karma.conf.js
@@ -36,9 +36,6 @@ module.exports = function(config) {
         webpackMiddleware: {
             stats: "errors-only"
         },
-        webpackMiddleware: {
-            stats: "errors-only",
-        },
         coverageReporter: {
             dir: '../coverage/',
             subdir: function(browser) {
diff --git a/frontend/test/unit/lib/expressions.spec.js b/frontend/test/unit/lib/expressions.spec.js
index e15ae023e1b..3f95f396762 100644
--- a/frontend/test/unit/lib/expressions.spec.js
+++ b/frontend/test/unit/lib/expressions.spec.js
@@ -1,5 +1,5 @@
 import _ from "underscore";
-import { formatExpression, parseExpressionString, tokenAtPosition, tokensToExpression } from "metabase/lib/expressions";
+import { formatExpression, parseExpressionString } from "metabase/lib/expressions";
 
 const mockFields = [
     {id: 1, display_name: "A"},
@@ -10,12 +10,12 @@ const mockFields = [
 
 const mathOperators = new Set(['+', '-', '*', '/']);
 
-const parsedMathOperators = {
-    "+": { value: '+', start: 2, end: 3, parsedValue: '+' },
-    "-": { value: '-', start: 2, end: 3, parsedValue: '-' },
-    "*": { value: '*', start: 2, end: 3, parsedValue: '*' },
-    "/": { value: '/', start: 2, end: 3, parsedValue: '/' }
-}
+// const parsedMathOperators = {
+//     "+": { value: '+', start: 2, end: 3, parsedValue: '+' },
+//     "-": { value: '-', start: 2, end: 3, parsedValue: '-' },
+//     "*": { value: '*', start: 2, end: 3, parsedValue: '*' },
+//     "/": { value: '/', start: 2, end: 3, parsedValue: '/' }
+// }
 
 function stripStartEnd(list) {
     return list.map(i => {
diff --git a/package.json b/package.json
index c549711f9dd..f0503f83fc4 100644
--- a/package.json
+++ b/package.json
@@ -78,6 +78,7 @@
     "eslint": "^3.5.0",
     "eslint-loader": "^1.6.0",
     "eslint-plugin-flowtype": "^2.22.0",
+    "eslint-plugin-jasmine": "^2.2.0",
     "eslint-plugin-react": "^6.3.0",
     "exports-loader": "^0.6.3",
     "extract-text-webpack-plugin": "^1.0.1",
@@ -123,7 +124,7 @@
   },
   "scripts": {
     "dev": "yarn && concurrently --kill-others -p name -n 'backend,frontend' -c 'blue,green' 'lein ring server' 'yarn run build-hot'",
-    "lint": "eslint --ext .js --ext .jsx --max-warnings 0 frontend/src",
+    "lint": "eslint --ext .js --ext .jsx --max-warnings 0 frontend/src frontend/test",
     "flow": "flow check",
     "test": "karma start frontend/test/karma.conf.js --single-run",
     "test-watch": "karma start frontend/test/karma.conf.js --auto-watch --reporters nyan",
diff --git a/yarn.lock b/yarn.lock
index 96befc4141c..d906d221ba9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2368,6 +2368,10 @@ eslint-plugin-flowtype:
   dependencies:
     lodash "^4.15.0"
 
+eslint-plugin-jasmine@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.2.0.tgz#7135879383c39a667c721d302b9f20f0389543de"
+
 eslint-plugin-react@^6.3.0:
   version "6.4.1"
   resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz#7d1aade747db15892f71eee1fea4addf97bcfa2b"
-- 
GitLab