version: 2.1
commands:
  install:
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-deps-{{ .Branch }}-{{ checksum "package.json" }}
            - v1-deps-{{ .Branch }}
            - v1-deps
      - run: yarn install --frozen-lockfile
      - save_cache:
          key: v1-deps-{{ .Branch }}-{{ checksum "package.json" }}
          paths:
            - ~/.cache
  cypress:
    parameters:
      language:
        type: enum
        enum: [fr, en]
        default: fr
      integration_folder:
        type: enum
        enum: [mon-entreprise, external]
        default: mon-entreprise
      base_url:
        type: string
        default: https://mon-entreprise.fr
    steps:
      - run: CYPRESS_baseUrl=<< parameters.base_url >> yarn run cypress run --record --key 21660df5-36a5-4c49-b23d-801799b0c759 --env language=<< parameters.language >> --config integrationFolder=cypress/integration/<< parameters.integration_folder >>

jobs:
  unit-test:
    docker:
      - image: node
    steps:
      - install
      - run: |
          yarn run flow-typed install
          git config --global core.quotepath false
          yarn test

  end-to-end-test:
    docker:
      - image: cypress/base:8
        environment:
          TERM: xterm
    steps:
      - install
      - run: yarn run compile-dev
      - run:
          command: yarn run serve-dev
          background: true
      - cypress:
          base_url: http://localhost:5000
      - cypress:
          base_url: http://localhost:5001
          language: en

  production-end-to-end-test:
    docker:
      - image: cypress/base:8
        environment:
          TERM: xterm
    parameters:
    steps:
      - checkout
      - run: npm install --save-dev cypress
      - run: sleep 200
      - cypress:
          base_url: https://mon-entreprise.fr
      - cypress:
          base_url: https://mycompanyinfrance.fr
          language: en
      - cypress:
          integration_folder: external
      - run:
          name: Send email if test failed
          when: on_fail
          command: >
            curl -H 'Content-Type: application/json' --request POST -d '{"success": false}' https://hooks.zapier.com/hooks/catch/3746650/qsp818/;

workflows:
  version: 2
  test:
    jobs:
      - unit-test
      - end-to-end-test
      - production-end-to-end-test:
          filters:
            branches:
              only: master