version: ~> 1.0
language: generic

services:
  - docker

stages:
  - unit
  - test

_before_script_reference: &before_script_reference
  - npm install
  - cd tests
  - docker-compose up -d node $SELENIUM_BROWSER
  - docker-compose exec node npm run $BUILD_ENV

_ignore_optional: &ignore_optional
  docker-compose exec node codeceptjs -c /repo/tests/codeceptjs/codecept.json run-multiple basic:$SELENIUM_BROWSER --invert --grep  '@optional'

_optional: &optional
  docker-compose exec node codeceptjs -c /repo/tests/codeceptjs/codecept.json run-multiple basic:$SELENIUM_BROWSER --grep '@optional'

jobs:
  include:

    - stage: unit
      name: "Unit"
      before_script:
        - npm install
      script: npm run test-headless

    - stage: test
      name: "E2E Chrome"
      env: SELENIUM_BROWSER=chrome BUILD_ENV=build.prod
      before_script: *before_script_reference
      script: *ignore_optional

    - stage: test
      name: "E2E Firefox"
      env: SELENIUM_BROWSER=firefox BUILD_ENV=build.prod
      before_script: *before_script_reference
      script: *ignore_optional

    - stage: test
      name: "E2E Chrome nonmin"
      env: SELENIUM_BROWSER=chrome BUILD_ENV=build.nonmin.travis
      before_script: *before_script_reference
      script: *ignore_optional

    - stage: test
      name: "E2E Firefox nonmin"
      env: SELENIUM_BROWSER=firefox BUILD_ENV=build.nonmin.travis
      before_script: *before_script_reference
      script: *ignore_optional

    - stage: test
      name: "E2E Chrome Optional"
      env: TEST_TYPE=optional SELENIUM_BROWSER=chrome BUILD_ENV=build.prod
      before_script: *before_script_reference
      script: *optional

    - stage: test
      name: "E2E Firefox Optional"
      env: TEST_TYPE=optional SELENIUM_BROWSER=firefox BUILD_ENV=build.prod
      before_script: *before_script_reference
      script: *optional

  allow_failures:
    - env: TEST_TYPE=optional SELENIUM_BROWSER=chrome BUILD_ENV=build.prod
    - env: TEST_TYPE=optional SELENIUM_BROWSER=firefox BUILD_ENV=build.prod
