# Okay so maybe everyone else already knows all this, but it took some time
# for Michael and I [Han] to really see how everything fits together.
#
# Basically, what we're doing here is automated browser testing, so CircleCI
# handles the automation, and Sauce Labs handles the browser testing.
# Specifically, Sauce Labs offers a REST API to run tests in browsers in VMs,
# and CircleCI can be configured to listen for git pushes and run local
# servers and call out to REST APIs to test against these local servers.
#
# The flow goes like this:
#   - CircleCI notices/is notified of a git push
#   - they pull and checkout and magically know to install dependencies and shit
#       + https://circleci.com/docs/manually/
#   - their magic works fine for MathQuill's dependencies but to run the tests,
#     it foolishly runs `make test`, what an inconceivable mistake
#   - that's where we come in: `circle.yml` lets us override the test script.
#       + https://circleci.com/docs/configuration/
#   - our `circle.yml` first installs and runs a tunnel to Sauce Labs
#   - and runs `make server`
#   - then it calls out to Sauce Labs' REST API to open a browser that reaches
#     back through the tunnel to access the unit test page on the local server
#       + > Sauce Connect allows you to run a test server within the CircleCI
#         > build container and expose it it (using a URL like `localhost:8080`)
#         > to Sauce Labs’ browsers.
#
#         https://circleci.com/docs/browser-testing-with-sauce-labs/
#
#   - boom testing boom


# this file is based on https://github.com/circleci/sauce-connect/blob/a65e41c91e02550ce56c75740a422bebc4acbf6f/circle.yml
# via https://circleci.com/docs/browser-testing-with-sauce-labs/

dependencies:
  cache_directories:
    - ~/sauce-connect
  pre:
    # imagemagick is installed to give us access to the
    # `convert` tool to stitch together the screenshots.
    - sudo apt-get update; sudo apt-get install imagemagick
    - "test $SAUCE_USERNAME && test $SAUCE_ACCESS_KEY
       # Sauce Labs credentials required. Sign up here: https://saucelabs.com/opensauce/"
    - ? |-
        {
          mkdir -p ~/sauce-connect
          cd ~/sauce-connect
          if [ -x sc-*-linux/bin/sc ]; then
            echo Using cached sc-*-linux/bin/sc
          else
            time wget https://saucelabs.com/downloads/sc-latest-linux.tar.gz
            time tar -xzf sc-latest-linux.tar.gz
          fi
          # Sauce Connect randomly fails so try twice
          time sc-*-linux/bin/sc --user $SAUCE_USERNAME --api-key $SAUCE_ACCESS_KEY --readyfile ~/sauce_is_ready \
            || time sc-*-linux/bin/sc --user $SAUCE_USERNAME --api-key $SAUCE_ACCESS_KEY --readyfile ~/sauce_is_ready \
            || echo ERROR > ~/sauce_is_ready
        } >$CIRCLE_ARTIFACTS/sauce-connect.log 2>&1
      :
        background: true

test:
  override:
    # Sauce can connect to Safari on ports 3000, 4000, 7000, and 8000. Edge needs port 7000 or 8000.
    # https://david263a.wordpress.com/2015/04/18/fixing-safari-cant-connect-to-localhost-issue-when-using-sauce-labs-connect-tunnel/
    # https://support.saucelabs.com/customer/portal/questions/14368823-requests-to-localhost-on-microsoft-edge-are-failing-over-sauce-connect
    - PORT=8000 make server >$CIRCLE_ARTIFACTS/make_server.log 2>&1:
        background: true

    # CircleCI expects test results to be reported in an JUnit/xUnit-style XML
    # file:
    #   https://circleci.com/docs/test-metadata/
    # Our unit tests are in a browser, so they can't write to a file, and Sauce
    # apparently truncates custom data in their test result reports, so instead
    # we POST to this trivial Node server on localhost:9000 that writes the
    # body of any POST request to $CIRCLE_TEST_REPORTS/mocha/xunit.xml
    - ? |-
        {
          mkdir -p $CIRCLE_TEST_REPORTS/mocha
          node << 'EOF'
          require('http').createServer(function(req, res) {
            res.setHeader('Access-Control-Allow-Origin', '*');
            req.pipe(process.stdout);
            req.on('end', res.end.bind(res));
          })
          .listen(9000);
          console.error('listening on http://0.0.0.0:9000/');
        EOF
        } >$CIRCLE_TEST_REPORTS/mocha/xunit.xml 2>$CIRCLE_ARTIFACTS/mocha-test-report.log
      :
        background: true

    # Wait for tunnel to be ready (`make server` and the trivial Node server
    # are much faster, no need to wait for them)
    - while [ ! -e ~/sauce_is_ready ]; do sleep 1; done; test "$(<~/sauce_is_ready)" != ERROR

    # Start taking screenshots in the background while the unit tests are running
    - ? |-
        {
          time { test -d node_modules/wd || npm install wd; }
          time node script/screenshots.js http://localhost:8000/test/visual.html \
            && touch ~/screenshots_are_ready || echo ERROR > ~/screenshots_are_ready:
        } >$CIRCLE_ARTIFACTS/screenshots.log 2>&1
      :
        background: true

    # Run in-browser unit tests, based on:
    #   https://wiki.saucelabs.com/display/DOCS/JavaScript+Unit+Testing+Methods
    # "build" and "tag" parameters from:
    #   https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options#TestConfigurationOptions-TestAnnotation
    - |-
      curl -i https://saucelabs.com/rest/v1/$SAUCE_USERNAME/js-tests \
           -X POST \
           -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY \
           -H 'Content-Type: application/json' \
           -d '{
                 "build": "'$(git rev-parse HEAD)'",
                 "tags": [
                   "after-v'$(node -p 'require("./package.json").version')'",
                   "circle-ci"
                 ],
                 "framework": "mocha",
                 "url": "http://localhost:8000/test/unit.html?post_xunit_to=http://localhost:9000",
                 "platforms": [["", "Chrome", ""]]
      }' | tee js-tests

    # Wait for tests to finish:
    #
    #   > Make the request multiple times as the tests run until the response
    #   > contains `completed: true` to the get the final results.
    #
    #   https://wiki.saucelabs.com/display/DOCS/JavaScript+Unit+Testing+Methods
    - |-
      while true  # Bash has no do...while >:(
      do
        sleep 5
        curl -i https://saucelabs.com/rest/v1/$SAUCE_USERNAME/js-tests/status \
             -X POST \
             -u $SAUCE_USERNAME:$SAUCE_ACCESS_KEY \
             -H 'Content-Type: application/json' \
             -d "$(tail -1 js-tests)" \
        | tee status
        tail -1 status > status.json
        # deliberately do `... != false` rather than `... == true`
        # because unexpected values should break rather than infinite loop
        [ "$(node -p 'require("./status.json").completed')" != false ] && break
      done

    # Wait for screenshots to be ready
    - while [ ! -e ~/screenshots_are_ready ]; do sleep 1; done; test "$(<~/screenshots_are_ready)" != ERROR:
        timeout: 300

    # Stitch together images
    # TODO: Split this into multiple yaml lines. I (Michael)
    #       niavely tried to split this into mutiple yaml lines
    #       but was unsucessful in doing do.
    - |-
      img_dir=$CIRCLE_ARTIFACTS/imgs/
      for x in $(ls $img_dir)
      do
        convert $img_dir/$x/*.png -append $img_dir/$x.png
      done

      # Remove all directories in $CIRCLE_ARTIFACTS/img
      # Currently the pieces aren't kept around. If it's
      # desirable to keep them around, we should use
      #    cp -r $dir $CIRCLE_ARTIFACTS/img_pieces
      # The reason the image pieces aren't currently kept
      # around is that it was leading to a problem. Specifically,
      # when we get the previous images, we niavely grab any *.png,
      # including the pieces images. This compounded so that each
      # iteration of a test run would have all of the images from
      # the previous test run plus whichever new images were generated.
      rm -R -- $img_dir/*/

      # Install utility we need
      npm install -g json

      # Download the latest mathquill artifacts.
      curl $(curl https://circleci.com/api/v1/project/mathquill/mathquill/latest/artifacts \
              | json -a url pretty_path -d '\n\t' \
              | grep '\.png$' \
              | grep -v 'PREV' \
              | sed "s:\$CIRCLE_ARTIFACTS/imgs/:-o $img_dir/PREV_:")

      # Generate image diffs.
      cd $img_dir
      for file in $(ls PINNED*); do
        prev=PREV_$file
        metric_diff=$(compare -metric AE -compose src $prev $file raw_diff.png)
        composite -alpha on raw_diff.png $prev DIFF_$file
      done

      for file in $(ls EVERGREEN*); do
        prev=$(ls PREV_$file*)
        metric_diff=$(compare -metric AE -compose src $prev $file raw_diff.png)
        composite -alpha on raw_diff.png $prev DIFF_$file
      done

      rm raw_diff.png

    # finally, complain to Circle CI if there were nonzero test failures
    - |-
      [ "$(node -p 'require("./status.json")["js tests"][0].result.failures')" == 0 ]
  post:
    - killall --wait sc; true  # wait for Sauce Connect to close the tunnel; ignore errors since it's just cleanup
