diff --git a/bin/docker/run_metabase.sh b/bin/docker/run_metabase.sh index e8379056518fbc4e5d52046caca3df8ca5dff03f..db15436f991bed0bd370a3a8aa5926aca4087bbf 100755 --- a/bin/docker/run_metabase.sh +++ b/bin/docker/run_metabase.sh @@ -26,7 +26,7 @@ fi # Setup Java Options -JAVA_OPTS="-Dlogfile.path=target/log -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -server" +JAVA_OPTS="${JAVA_OPTS} -Dlogfile.path=target/log -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -server" if [ ! -z "$JAVA_TIMEZONE" ]; then JAVA_OPTS="${JAVA_OPTS} -Duser.timezone=${JAVA_TIMEZONE}" diff --git a/docs/contributing.md b/docs/contributing.md index 7965b1434e09e7cd778ba3e077216bfe0b299733..fc7f8ea400090107f433a0b5eac9887cd143a622 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -66,7 +66,7 @@ Let your friends know about Metabase. Start a user group in your area. [Tweet ab ### Fix bugs -By our definition, "Bugs" are situations where the program doesn't do what it was expected to according to the design or specification. These are typically scoped to issues where there is a clearly defined correct behaviour. It's usually safe to grab one of these, fix it, and submit a PR (with tests!). These will be merged without too much drama unless the PR touches a lot of code. Don't be offended if we ask you to make small modifications or add more tests. We're a bit OCD on code coverage and coding style. +By our definition, "Bugs" are situations where the program doesn't do what it was expected to according to the design or specification. These are typically scoped to issues where there is a clearly defined correct behavior. It's usually safe to grab one of these, fix it, and submit a PR (with tests!). These will be merged without too much drama unless the PR touches a lot of code. Don't be offended if we ask you to make small modifications or add more tests. We're a bit OCD on code coverage and coding style. ### Help with Documentation diff --git a/docs/developers-guide.md b/docs/developers-guide.md index 712d0b40a7a9777b041a97e15fa091000795d4c0..727827f31f282e8e9c1e8c529c34c4b01b00f86b 100644 --- a/docs/developers-guide.md +++ b/docs/developers-guide.md @@ -53,11 +53,9 @@ Both components are built and assembled together into a single jar file which ru ### 3rd party dependencies -Metabase depends on lots of other 3rd party libraries to run, so as you are developing you'll need to keep those up to date. These don't run automatically during development, so kick them off manually when needed. +Metabase depends on lots of other 3rd party libraries to run, so as you are developing you'll need to keep those up to date. Leiningen will automatically fetch Clojure dependencies when needed, but for JavaScript dependencies you'll need to kick off the installation process manually when needed. ```sh -# clojure dependencies -$ lein deps # javascript dependencies $ yarn ``` diff --git a/frontend/test/.eslintrc b/frontend/test/.eslintrc new file mode 100644 index 0000000000000000000000000000000000000000..820d4aa1ab191f221199a6affa7c6c4657de7175 --- /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 5bb160930a65796a32b19fc6f2014d58afdae1c9..fc129af68e27decc42573b81b1ea995b13340628 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 38d2af293bc0d13094edd98a97bcf8e2ed4be0ee..328088ed86e06abb0e91c7fb8a21ba56680096c7 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 9416af4f9d0f3d1a6be6838c1f289671ae231e9a..d67f0476d4aff0f55317f1b3a5c71743fda8e77e 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 51131f377dca5b00a0b4cc86b08204231875222e..98f8ad03932ea2b7242396b650303898f4c0fefd 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 e21619af931f45d28154811fc7de2b23b11ed12e..8b6b31f589a2becb8170a0bac563025c3ad08501 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 57c74606bce394f1ea92f2f6053ed3350f612fad..3303d7d58319dbe8e0c7045734c94e0e29a8ee31 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 6d3ec98fedc15b9909726104b39057480cf2af14..efb639af73f5b4805c4458c2a7cc24db356ae145 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 92c460d5abe84e1db6b13a2691f56a070f7e2bad..feb21b0e4911546ada35d4f3ce8e964e53f13179 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/unit/lib/expressions.spec.js b/frontend/test/unit/lib/expressions.spec.js deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/package.json b/package.json index 0a2efaf045f8d12ccdbe204a4196d8e4811fc926..02db1acd0e5a9f41a13b0af6c6fc34498d529fe1 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,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", @@ -124,7 +125,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 4162caf82343e3405bc3764763b87f0e17b98ccd..934c4aa8b036863b3f716cf8cc8b7898da90133d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2387,6 +2387,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"