diff --git a/.gitignore b/.gitignore index 1af676ca..6288c091 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ */.idea/* .tmp target +e2e/node_modules +e2e/db_cleanup_service/node_modules diff --git a/.travis.yml b/.travis.yml index 77fd820b..b7c04a77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,62 @@ -language: java -jdk: openjdk8 -before_install: -- openssl aes-256-cbc -K $encrypted_c5f977eaf718_key -iv $encrypted_c5f977eaf718_iv -in .deploy_key.enc -out /tmp/deploy_key -d -- eval "$(ssh-agent -s)" -- chmod 600 /tmp/deploy_key -- ssh-add /tmp/deploy_key -- cd report-testing-framework -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin -- sh start_mysql_test_db.sh -addons: - ssh_known_hosts: - - cmr-dev.jembi.org - - cmr-staging.jembi.org -script: - - cd report-testing - - mvn test - - cd ../.. -deploy: -- provider: script - script: bash scripts/travis/deploy.sh dev $mysql_password - on: - branch: dev -- provider: script - script: bash scripts/travis/deploy.sh staging $mysql_password - on: - branch: staging \ No newline at end of file +jobs: + include: + - language: java + jdk: openjdk8 + before_install: + - openssl aes-256-cbc -K $encrypted_c5f977eaf718_key -iv $encrypted_c5f977eaf718_iv -in .deploy_key.enc -out /tmp/deploy_key -d + - eval "$(ssh-agent -s)" + - chmod 600 /tmp/deploy_key + - ssh-add /tmp/deploy_key + - cd report-testing-framework + - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - sh start_mysql_test_db.sh + addons: + ssh_known_hosts: + - cmr-dev.jembi.org + - cmr-staging.jembi.org + script: + - cd report-testing + - mvn test + - cd ../.. + deploy: + - provider: script + script: bash scripts/travis/deploy.sh dev $mysql_password + on: + branch: dev + - provider: script + script: bash scripts/travis/deploy.sh staging $mysql_password + on: + branch: staging + + - language: node_js + node_js: + # Node 10.3+ includes npm@6 which has good "npm ci" command + - 10.8 + + # if using Ubuntu 16 need this library + # https://github.com/cypress-io/cypress-documentation/pull/1647 + addons: + apt: + packages: + - libgconf-2-4 + + cache: + # cache both npm modules and Cypress binary + directories: + - ~/.npm + - ~/.cache + # install dependencies and check that Cypress can run + override: + - npm ci + - npm run cy:verify + + script: + # run e2e tests + - cd e2e + - npm test + # run all Cypress tests and record on the dashboard + # - npm run cy:run -- --record + # after all tests finish running we need + # to kill all background jobs (like "npm start &") + # this avoids flake in Travis jobs + - kill $(jobs -p) || true \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..0e14d8e2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "disabled" +} \ No newline at end of file diff --git a/e2e/cypress.json b/e2e/cypress.json new file mode 100644 index 00000000..97587d15 --- /dev/null +++ b/e2e/cypress.json @@ -0,0 +1,4 @@ +{ + "testFiles": "**/*.feature", + "baseUrl": "https://192.168.56.11" +} \ No newline at end of file diff --git a/e2e/cypress/fixtures/example.json b/e2e/cypress/fixtures/example.json new file mode 100644 index 00000000..02e42543 --- /dev/null +++ b/e2e/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/e2e/cypress/integration/1-getting-started/todo.spec.js b/e2e/cypress/integration/1-getting-started/todo.spec.js new file mode 100644 index 00000000..4768ff92 --- /dev/null +++ b/e2e/cypress/integration/1-getting-started/todo.spec.js @@ -0,0 +1,143 @@ +/// + +// Welcome to Cypress! +// +// This spec file contains a variety of sample tests +// for a todo list app that are designed to demonstrate +// the power of writing tests in Cypress. +// +// To learn more about how Cypress works and +// what makes it such an awesome testing tool, +// please read our getting started guide: +// https://on.cypress.io/introduction-to-cypress + +describe('example to-do app', () => { + beforeEach(() => { + // Cypress starts out with a blank slate for each test + // so we must tell it to visit our website with the `cy.visit()` command. + // Since we want to visit the same URL at the start of all our tests, + // we include it in our beforeEach function so that it runs before each test + cy.visit('https://example.cypress.io/todo') + }) + + it('displays two todo items by default', () => { + // We use the `cy.get()` command to get all elements that match the selector. + // Then, we use `should` to assert that there are two matched items, + // which are the two default items. + cy.get('.todo-list li').should('have.length', 2) + + // We can go even further and check that the default todos each contain + // the correct text. We use the `first` and `last` functions + // to get just the first and last matched elements individually, + // and then perform an assertion with `should`. + cy.get('.todo-list li').first().should('have.text', 'Pay electric bill') + cy.get('.todo-list li').last().should('have.text', 'Walk the dog') + }) + + it('can add new todo items', () => { + // We'll store our item text in a variable so we can reuse it + const newItem = 'Feed the cat' + + // Let's get the input element and use the `type` command to + // input our new list item. After typing the content of our item, + // we need to type the enter key as well in order to submit the input. + // This input has a data-test attribute so we'll use that to select the + // element in accordance with best practices: + // https://on.cypress.io/selecting-elements + cy.get('[data-test=new-todo]').type(`${newItem}{enter}`) + + // Now that we've typed our new item, let's check that it actually was added to the list. + // Since it's the newest item, it should exist as the last element in the list. + // In addition, with the two default items, we should have a total of 3 elements in the list. + // Since assertions yield the element that was asserted on, + // we can chain both of these assertions together into a single statement. + cy.get('.todo-list li') + .should('have.length', 3) + .last() + .should('have.text', newItem) + }) + + it('can check off an item as completed', () => { + // In addition to using the `get` command to get an element by selector, + // we can also use the `contains` command to get an element by its contents. + // However, this will yield the