name: Unit test(Flutter)

on:
  push:
    branches:
      - 'main'
      
  pull_request:
    branches:
      - 'main'

env:
  CARGO_TERM_COLOR: always

jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: 'stable-2022-01-20'
      
      - uses: subosito/flutter-action@v2
        with:
          channel: 'stable'
          cache: true

      - name: Cache Cargo
        uses: actions/cache@v2
        with: 
          path: |
            ~/.cargo
          key: ${{ runner.os }}-cargo-${{ steps.rust_toolchain.outputs.rustc_hash }}-${{ hashFiles('./frontend/rust-lib/Cargo.toml') }}

      - name: Cache Rust
        uses: actions/cache@v2
        with: 
          path: |
            frontend/rust-lib/target
            shared-lib/target
          key: ${{ runner.os }}-rust-rust-lib-share-lib-${{ steps.rust_toolchain.outputs.rustc_hash }}-${{ hashFiles('./frontend/rust-lib/Cargo.toml') }}    

      - name: Deps Flutter
        working-directory: frontend/app_flowy
        run: |
          flutter config --enable-linux-desktop
        
      - name: Deps Rust
        working-directory: frontend
        run: |
          cargo install cargo-make
          cargo install duckscript_cli
          cargo make flowy_dev
      
      - name: Code Generation
        working-directory: frontend/app_flowy
        run: |
          flutter packages pub get
          flutter packages pub run easy_localization:generate -S ./assets/translations -f keys -O lib/generated -o locale_keys.g.dart
          flutter packages pub run build_runner build --delete-conflicting-outputs
      
      - name: Build FlowySDK
        working-directory: frontend
        run: |
          cargo make --profile development-linux-x86 flowy-sdk-dev
      
      - name: Run bloc tests
        working-directory: frontend/app_flowy
        run: |
          flutter pub get
          flutter test

