version: 2

references:
  default_docker_ruby_executor: &default_docker_ruby_executor
    image: circleci/ruby:2.6.5-buster-node-browsers
    environment:
      BUNDLE_JOBS: '3'
      BUNDLE_RETRY: '3'
      BUNDLE_PATH: vendor/bundle
      RACK_ENV: test
      RAILS_ENV: test
      MYSQL_HOST: '127.0.0.1'
  mariadb: &mariadb
    image: circleci/mariadb:10.1.44
    environment:
      MYSQL_DATABASE: ensl_test
      MYSQL_USER: ensl
      MYSQL_PASSWORD: ensl
      MYSQL_ROOT_PASSWORD: ensl
      MYSQL_ROOT_HOST: "%"

jobs:
  build:
    environment:
      CC_TEST_REPORTER_ID: b3db5b7df9a0a1d0fd3503e72d7431ffbfa172492c2840d590ccb2fafd9172d3
      RAILS_ENV: test
      RACK_ENV: test
    docker:
      - *default_docker_ruby_executor
    steps:
      - checkout
      - run:
          name: Bundle Update
          command: gem update --system && gem install bundler
      # Which version of bundler?
      - run:
          name: Which bundler?
          command: bundle -v
      # bundle cache
      - restore_cache:
          keys:
            - rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }}
            - rails-demo-bundle-v2-
      - run:
          name: Bundle Install
          command: bundle check || bundle install
      # Store bundle cache
      - save_cache:
          key: rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle
#      - run:
#          name: Setup dependencies
#          command: |
#            sudo composer self-update
#            composer install -n --prefer-dist
      # download test reporter as a static binary
#      - run:
#          name: Setup Code Climate test-reporter
#          command: |
#            curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
#            chmod +x ./cc-test-reporter
      # Only necessary if app uses webpacker or yarn in some other way
      #- restore_cache:
      #    keys:
      #      - rails-demo-yarn-{{ checksum "yarn.lock" }}
      #      - rails-demo-yarn-
      #- run:
      #    name: Yarn Install
      #    command: yarn install --cache-folder ~/.cache/yarn
      # Store yarn / webpacker cache
      #- save_cache:
      #    key: rails-demo-yarn-{{ checksum "yarn.lock" }}
      #    paths:
      #      - ~/.cache/yarn
  test:
    parallelism: 3
    docker:
      - *default_docker_ruby_executor
      - *mariadb
    steps:
      - add_ssh_keys:
          fingerprints:
            - "b7:35:a6:4e:9b:0d:6d:d4:78:1e:9a:97:2a:66:6b:be"
      - checkout
      - run:
          name: Bundle Update
          command: gem update --system && gem install bundler 
      - restore_cache:
          keys:
            - rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }}
            - rails-demo-bundle-v2-
      - run:
          name: Bundle Install
          command: bundle check || bundle install
      #- restore_cache:
      #    keys:
      #      - rails-demo-yarn-{{ checksum "yarn.lock" }}
      #      - rails-demo-yarn-
      - run:
          name: Wait for DB
          command: dockerize -wait tcp://localhost:3306 -timeout 1m
      - run:
          name: Database setup
          command: bundle exec rake db:test:prepare --trace
      # Run rspec in parallel
      #            ./cc-test-reporter before-build
      #            ./cc-test-reporter after-build --coverage-input-type clover --exit-code $?
      - run:
          command: |
            mkdir /tmp/test-results
            TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
            bundle exec rspec $TESTFILES --profile 10 -r rspec_junit_formatter --format RspecJunitFormatter --out /tmp/test-results/rspec.xml --format progress
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results

workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - test:
          requires:
            - build