name: OINT | Тестирование Notion

# Controls when the workflow will run
on:
  workflow_dispatch:

jobs:

  Decode:
    runs-on: ubuntu-latest
    if: ${{ always() }}
    steps:

      - uses: actions/checkout@v4 

      - name: Расшифровать тестовые данные
        run: gpg --quiet --batch --yes --decrypt --passphrase="$ENC_JSON" --output ./data.json ./data.json.gpg        
        env:
          ENC_JSON: ${{ secrets.ENC_JSON }}
      - name: Записать тестовые данные в кэш
        uses: actions/cache/save@v3
        with:
          key: test-data
          path: ./data.json

  Build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4             
      - uses: otymko/setup-onescript@v1.4
        with:
          version: 1.9.0 

      - name: Установить asserts и 1testrunner
        run: |
          opm install asserts
          opm install 1testrunner

      - name: Установить OInt
        run: |
          cd ./src/ru/OInt
          opm build
          opm install *.ospx    

      - name: Записать артефакт
        uses: actions/upload-artifact@v4
        with:
          name: oint
          path: ./src/ru/OInt/*.ospx


  Testing-Notion:
    runs-on: ubuntu-latest
    needs: [Decode, Build]
    steps:

      - uses: actions/checkout@v2 
      - uses: otymko/setup-onescript@v1.4
        with:
          version: 1.9.0 
      
      - name: Получить тестовые данные из кэша
        uses: actions/cache/restore@v3
        with:
          key: test-data
          path: ./data.json
      
      - name: Установить asserts и 1testrunner
        run: |
          opm install asserts
          opm install 1testrunner

      - name: Установить OInt
        run: |
          cd ./src/ru/OInt
          opm build
          opm install *.ospx



      - name: Создать страницу
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницу"

      - name: Создать/Изменить базу
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьИзменитьБазу"

      - name: Получить информацию о странице
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОСтранице"

      - name: Получить информацию о базе
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьИнформациюОБазе"

      - name: Создать страницу в базу
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьСтраницуВБазу"

      - name: Изменить свойства страницы
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ИзменитьСвойстваСтраницы"

      - name: Создать/Удалить блок
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_СоздатьУдалитьБлок"

      - name: Получить пользователей
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьПользователей"

      - name: Получить данные пользователя
        if: ${{ cancelled() }} == false
        run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os "Ноушн_ПолучитьДанныеПользователя"

      - name: Записать логи
        if: ${{ cancelled() }} == false
        uses: actions/cache/save@v3
        with:
          key: logs-Notion
          path: ./docs/results/Notion


      - name: Записать измененные данные
        if: ${{ cancelled() }} == false
        uses: actions/cache/save@v3
        with:
          key: test-data_new
          path: ./data.json

  Encode:
    runs-on: ubuntu-latest
    needs: [Testing-Notion]
    if: ${{ always() }}
    permissions:
      contents: write
  
    steps:

      - uses: actions/checkout@v2 

      - name: Обновить данные в репозитории
        run: git pull https://github.com/Bayselonarrend/OpenIntegrations

      - name: Получить тестовые данные из кэша
        uses: actions/cache/restore@v3
        with:
          key: test-data_new
          path: ./data.json

      - name: Зашифровать данные обратно
        continue-on-error: false
  
        run: |
          rm -f ./data.json.gpg
          gpg --batch --symmetric --cipher-algo AES256 --passphrase="$ENC_JSON" data.json
          rm -f ./data.json
        env:
          ENC_JSON: ${{ secrets.ENC_JSON }}

      - name: Получить логи Notion
        uses: actions/cache/restore@v3
        with:
          key: logs-Notion
          path: ./docs/results/Notion


      - name: Очистка логов Notion
        run: |
          curl -L \
          -X DELETE \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          "https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Notion"


      - name: Записать данные    
        uses: stefanzweifel/git-auto-commit-action@v5   
        with:
          commit_user_name: Vitaly the Alpaca (bot) 
          commit_user_email: vitaly.the.alpaca@gmail.com
          commit_author: Vitaly the Alpaca <vitaly.the.alpaca@gmail.com>
          commit_message: Обновление зашифрованных данных по результатам тестов (workflow)


  Clear-Cache:
    runs-on: ubuntu-latest
    needs: [Testing-Notion, Encode]
    if: ${{ always() }}
    steps:
      - name: Очистка основного кэша
        run: |
          curl -L \
          -X DELETE \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          "https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data"

      - name: Очистка кэша Google
        run: |
          curl -L \
          -X DELETE \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          "https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_google"

      - name: Очистка кэша Twitter
        run: |
          curl -L \
          -X DELETE \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          "https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=test-data_new"