version: 2
jobs:
  test-backend:
    docker:
      - image: circleci/node:14
      - image: circleci/mariadb:latest
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: "true"
          MYSQL_DATABASE: photos_test
          MYSQL_USER: photos
          MYSQL_PASSWORD: photos
          MYSQL_HOST: "localhost"
          
    working_directory: ~/photos

    steps:
      - checkout

      - restore_cache:
          keys:
            - backend-dependencies-{{ checksum "package.json" }}

      - run: 
          name: install backend deps
          command: npm i

      - save_cache:
          paths:
            - node_modules
          key: backend-dependencies-{{ checksum "package.json" }}

      - run: 
          name: test backend
          command: npm test
  
  test-frontend:
    docker:
      - image: circleci/node:14
          
    working_directory: ~/photos/frontend

    steps:
      - checkout:

      - restore_cache:
          keys:
            - backend-dependencies-{{ checksum "package.json" }}

      - run: 
          name: install backend deps
          command: npm i

      - save_cache:
          paths:
            - node_modules
          key: backend-dependencies-{{ checksum "package.json" }}

      - restore_cache:
          keys:
            - frontend-dependencies-{{ checksum "package.json" }}

      - run: 
          name: install frontend deps
          command: cd frontend && npm i

      - save_cache:
          paths:
            - frontend/node_modules
          key: frontend-dependencies-{{ checksum "package.json" }}

      - run: 
          name: test frontend
          command: cd frontend && npm test

workflows:
  version: 2
  test:
    jobs:
      - test-backend
      - test-frontend
