volumes:
  data:

services:

  test_unit:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    logging:
      driver: local
    user: node
    volumes:
      - ../../bin/shared/wait_for_it:/overleaf/bin/shared/wait_for_it
      - ./data/reports:/overleaf/services/web/data/reports
    entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 --
    command: npm run test:unit:app
    working_dir: /overleaf/services/web
    env_file: docker-compose.common.env
    environment:
      CI:
      MODULE_NAME:
      MOCHA_ROOT_SUITE_NAME:
      BASE_CONFIG:
      OVERLEAF_CONFIG:
      NODE_ENV: test
      NODE_OPTIONS: "--unhandled-rejections=strict"
      REDIS_HOST: redis_test
      VITEST_NO_CACHE: true
    depends_on:
      - redis_test
      - mongo

  test_acceptance:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    logging:
      driver: local
    working_dir: /overleaf/services/web
    env_file: docker-compose.common.env
    environment:
      CI:
      MODULE_NAME:
      MOCHA_ROOT_SUITE_NAME:
      BASE_CONFIG:
      OVERLEAF_CONFIG:
      REDIS_HOST: redis_test
    extra_hosts:
      - 'www.overleaf.test:127.0.0.1'
    volumes:
      - ../../bin/shared/wait_for_it:/overleaf/bin/shared/wait_for_it
      - ./data/reports:/overleaf/services/web/data/reports
    entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 --
    command: npm run test:acceptance:app
    user: root
    depends_on:
      - redis_test
      - mongo
      - saml
      - ldap
    tmpfs:
      - /overleaf/services/web/data

  test_frontend:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    volumes:
      - ./data/reports:/overleaf/services/web/data/reports
    logging:
      driver: local
    user: node
    working_dir: /overleaf/services/web
    command: npm run test:frontend
    environment:
      NODE_OPTIONS: "--unhandled-rejections=strict"
      CI:
      MOCHA_ROOT_SUITE_NAME:

  test_frontend_ct:
    image: cypress/included:13.13.2
    logging:
      driver: local
    working_dir: /overleaf/services/web
    user: "${DOCKER_USER:-1000:1000}"
    environment:
      CI:
      CYPRESS_RESULTS:
      CYPRESS_SPEC_PATTERN:
      CYPRESS_EXCLUDE_SPEC_PATTERN:
    volumes:
      - /dev/shm/overleaf:/overleaf
      - ./data/reports:/overleaf/services/web/data/reports
    entrypoint: npm
    command:
      - "run"
      - "cypress:run-ct"

  test_writefull:
    build:
      context: ../..
      dockerfile: services/web/Dockerfile
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER
    logging:
      driver: local
    user: node
    working_dir: /overleaf/services/web
    command: npm run test:writefull
    volumes:
      - ./data/reports:/overleaf/services/web/data/reports
    environment:
      CI:
      MOCHA_ROOT_SUITE_NAME:
      NODE_OPTIONS: "--unhandled-rejections=strict"

  tar:
    image: ci/$PROJECT_NAME:$BRANCH_NAME-$BUILD_NUMBER-webpack
    volumes:
      - ./:/tmp/build/
    command: tar -cf /tmp/build/build.tar public/
    user: root

  redis_test:
    image: redis:7.4.3

  mongo:
    image: mongo:8.0.11
    command: --replSet overleaf
    volumes:
      - ../../bin/shared/mongodb-init-replica-set.js:/docker-entrypoint-initdb.d/mongodb-init-replica-set.js
      - ../../bin/shared/mongodb-docker-entrypoint-wait.sh:/mongodb-docker-entrypoint-wait.sh
    entrypoint: /mongodb-docker-entrypoint-wait.sh
    environment:
      MONGO_INITDB_DATABASE: sharelatex
    extra_hosts:
      # Required when using the automatic database setup for initializing the
      # replica set. This override is not needed when running the setup after
      # starting up mongo.
      - mongo:127.0.0.1

  ldap:
    image: rroemhild/test-openldap:1.1
    logging:
      driver: none
    # Workaround large memory allocation (using the max-open-files-limit as socket buffer scale).
    # REF: https://github.com/moby/moby/issues/8231#issuecomment-63877553
    # REF: https://github.com/moby/moby/issues/8231#issuecomment-63871343
    command:
      - 'bash'
      - '-c'
      - 'ulimit -n 1024 && exec bash /run.sh'

  saml:
      image: us-east1-docker.pkg.dev/overleaf-ops/ol-docker/saml-test
      logging:
        driver: none
      environment:
          SAML_BASE_URL_PATH: 'http://saml/simplesaml/'
          SAML_TEST_SP_ENTITY_ID: 'overleaf-test-saml'
          SAML_TEST_SP_LOCATION: 'http://www.overleaf.test:23000/saml/callback'
