diff --git a/.github/workflows/dotnet-core-master.yml b/.github/workflows/dotnet-core-master.yml index 903422e..f41a65c 100644 --- a/.github/workflows/dotnet-core-master.yml +++ b/.github/workflows/dotnet-core-master.yml @@ -104,21 +104,15 @@ jobs: - name: Create errorShots directory run: mkdir eform-angular-frontend/eform-client/errorShots - name: Pretest changes to work with Docker container - run: sed -i 's/localhost/mariadbtest/g' eform-angular-frontend/eform-client/e2e/Constants/DatabaseConfigurationConstants.ts - - name: Get standard output - run: | - cat docker_run_log + run: sed -i 's/localhost/mariadbtest/g' eform-angular-frontend/eform-client/playwright/e2e/Constants/DatabaseConfigurationConstants.ts + - name: yarn install + run: cd eform-angular-frontend/eform-client && yarn install + - name: Install Playwright browsers + run: cd eform-angular-frontend/eform-client && npx playwright install --with-deps chromium + - name: Wait for app + run: npx wait-on http://localhost:4200 --timeout 120000 - name: DB Configuration - uses: cypress-io/github-action@v3 - with: - start: echo 'hi' - wait-on: "http://localhost:4200" - wait-on-timeout: 120 - browser: chrome - record: false - spec: cypress/e2e/db/* - config-file: cypress.config.ts - working-directory: eform-angular-frontend/eform-client + run: cd eform-angular-frontend/eform-client && npx playwright test playwright/e2e/Tests/database-configuration/ - name: Change rabbitmq hostname run: docker exec -i mariadbtest mysql -u root --password=secretpassword -e 'update 420_SDK.Settings set Value = "my-rabbit" where Name = "rabbitMqHost"' #- name: Plugin testing @@ -128,7 +122,7 @@ jobs: - name: Get standard output run: | cat docker_run_log - result=`cat docker_run_log | grep "Now listening on: http://0.0.0.0:5000" -m 1 | wc -l` + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` if [ $result -ne 1 ];then exit 1; fi - name: The job has failed if: always() @@ -163,4 +157,103 @@ jobs: - name: Build run: dotnet build eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.sln - name: Unit Tests - run: dotnet test --no-restore -c Release -v n eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.Test/GreateBelt.Pn.Test.csproj \ No newline at end of file + run: dotnet test --no-restore -c Release -v n eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.Test/GreateBelt.Pn.Test.csproj + greate-belt-playwright-test: + needs: greate-belt-pn-build + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + test: [a] + steps: + - uses: actions/checkout@v3 + with: + path: eform-angular-greate-belt-plugin + - name: Extract branch name + id: extract_branch + run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT + - name: Create docker network + run: docker network create --driver bridge --attachable data + - name: Start MariaDB + run: | + docker pull mariadb:10.8 + docker run --name mariadbtest --network data -e MYSQL_ROOT_PASSWORD=secretpassword -p 3306:3306 -d mariadb:10.8 + - name: Start rabbitmq + run: | + docker pull rabbitmq:latest + docker run -d --hostname my-rabbit --name some-rabbit --network data -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password rabbitmq:latest + - uses: actions/download-artifact@v4 + with: + name: greate-belt-container + - run: docker load -i greate-belt-container.tar + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 22 + - name: 'Preparing Frontend checkout' + uses: actions/checkout@v3 + with: + repository: microting/eform-angular-frontend + ref: ${{ steps.extract_branch.outputs.branch }} + path: eform-angular-frontend + - name: 'Preparing ItemsPlanning checkout' + uses: actions/checkout@v3 + with: + repository: microting/eform-angular-items-planning-plugin + ref: ${{ steps.extract_branch.outputs.branch }} + path: eform-angular-items-planning-plugin + - name: Sleep 15 seconds + run: sleep 15 + - name: Copy dependencies + run: | + cp -av eform-angular-items-planning-plugin/eform-client/src/app/plugins/modules/items-planning-pn eform-angular-frontend/eform-client/src/app/plugins/modules/items-planning-pn + cp -av eform-angular-greate-belt-plugin/eform-client/src/app/plugins/modules/greate-belt-pn eform-angular-frontend/eform-client/src/app/plugins/modules/greate-belt-pn + mkdir -p eform-angular-frontend/eform-client/playwright/e2e/plugins/ + cp -av eform-angular-greate-belt-plugin/eform-client/playwright/e2e/plugins/greate-belt-pn eform-angular-frontend/eform-client/playwright/e2e/plugins/greate-belt-pn + cp -av eform-angular-greate-belt-plugin/eform-client/playwright.config.ts eform-angular-frontend/eform-client/playwright.config.ts + mkdir -p eform-angular-frontend/eFormAPI/eFormAPI.Web/Plugins + cd eform-angular-frontend/eform-client && ../../eform-angular-items-planning-plugin/testinginstallpn.sh + ../../eform-angular-greate-belt-plugin/testinginstallpn.sh + - name: Start the newly build Docker container + id: docker-run + run: docker run --name my-container -p 4200:5000 --network data microtingas/greate-belt-container:latest "/ConnectionString=host=mariadbtest;Database=420_Angular;user=root;password=secretpassword;port=3306;Convert Zero Datetime = true;SslMode=none;" > docker_run_log 2>&1 & + - name: Sleep 15 seconds + run: sleep 15 + - name: Get standard output + run: cat docker_run_log + - name: Pretest changes to work with Docker container + run: sed -i 's/localhost/mariadbtest/g' eform-angular-frontend/eform-client/playwright/e2e/Constants/DatabaseConfigurationConstants.ts + - name: Wait for app + run: npx wait-on http://localhost:4200 --timeout 120000 + - name: DB Configuration + run: cd eform-angular-frontend/eform-client && npx playwright test playwright/e2e/Tests/database-configuration/ + - name: Change rabbitmq hostname + run: docker exec -i mariadbtest mysql -u root --password=secretpassword -e 'update 420_SDK.Settings set Value = "my-rabbit" where Name = "rabbitMqHost"' + - name: Get standard output + run: | + cat docker_run_log + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` + if [ $result -ne 1 ];then exit 1; fi + - name: Wait for app + run: npx wait-on http://localhost:4200 --timeout 120000 + - name: ${{ matrix.test }} playwright test + run: | + cd eform-angular-frontend/eform-client + npx playwright test playwright/e2e/plugins/greate-belt-pn/${{ matrix.test }}/ + - name: Stop the newly build Docker container + run: docker stop my-container + - name: Get standard output + run: | + cat docker_run_log + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` + if [ $result -ne 1 ];then exit 1; fi + - name: Get standard output + if: ${{ failure() }} + run: cat docker_run_log + - name: Archive Playwright report + if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-report-${{ matrix.test }} + path: eform-angular-frontend/eform-client/playwright-report/ + retention-days: 2 \ No newline at end of file diff --git a/.github/workflows/dotnet-core-pr.yml b/.github/workflows/dotnet-core-pr.yml index 7e896c2..e793432 100644 --- a/.github/workflows/dotnet-core-pr.yml +++ b/.github/workflows/dotnet-core-pr.yml @@ -122,7 +122,7 @@ jobs: - name: Get standard output run: | cat docker_run_log - result=`cat docker_run_log | grep "Now listening on: http://0.0.0.0:5000" -m 1 | wc -l` + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` if [ $result -ne 1 ];then exit 1; fi - name: The job has failed if: always() @@ -157,4 +157,104 @@ jobs: - name: Build run: dotnet build eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.sln - name: Unit Tests - run: dotnet test --no-restore -c Release -v n eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.Test/GreateBelt.Pn.Test.csproj \ No newline at end of file + run: dotnet test --no-restore -c Release -v n eform-angular-greate-belt-plugin/eFormAPI/Plugins/GreateBelt.Pn/GreateBelt.Pn.Test/GreateBelt.Pn.Test.csproj + greate-belt-playwright-test: + needs: greate-belt-pn-build + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + test: [a] + steps: + - uses: actions/checkout@v3 + with: + path: eform-angular-greate-belt-plugin + - name: Create docker network + run: docker network create --driver bridge --attachable data + - name: Start MariaDB + run: | + docker pull mariadb:10.8 + docker run --name mariadbtest --network data -e MYSQL_ROOT_PASSWORD=secretpassword -p 3306:3306 -d mariadb:10.8 + - name: Start rabbitmq + run: | + docker pull rabbitmq:latest + docker run -d --hostname my-rabbit --name some-rabbit --network data -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password rabbitmq:latest + - uses: actions/download-artifact@v4 + with: + name: greate-belt-container + - run: docker load -i greate-belt-container.tar + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 22 + - name: 'Preparing Frontend checkout' + uses: actions/checkout@v3 + with: + repository: microting/eform-angular-frontend + ref: stable + path: eform-angular-frontend + - name: 'Preparing ItemsPlanning checkout' + uses: actions/checkout@v3 + with: + repository: microting/eform-angular-items-planning-plugin + ref: stable + path: eform-angular-items-planning-plugin + - name: Sleep 15 seconds + run: sleep 15 + - name: Copy dependencies + run: | + cp -av eform-angular-items-planning-plugin/eform-client/src/app/plugins/modules/items-planning-pn eform-angular-frontend/eform-client/src/app/plugins/modules/items-planning-pn + cp -av eform-angular-greate-belt-plugin/eform-client/src/app/plugins/modules/greate-belt-pn eform-angular-frontend/eform-client/src/app/plugins/modules/greate-belt-pn + mkdir -p eform-angular-frontend/eform-client/playwright/e2e/plugins/ + cp -av eform-angular-greate-belt-plugin/eform-client/playwright/e2e/plugins/greate-belt-pn eform-angular-frontend/eform-client/playwright/e2e/plugins/greate-belt-pn + cp -av eform-angular-greate-belt-plugin/eform-client/playwright.config.ts eform-angular-frontend/eform-client/playwright.config.ts + mkdir -p eform-angular-frontend/eFormAPI/eFormAPI.Web/Plugins + cd eform-angular-frontend/eform-client && ../../eform-angular-items-planning-plugin/testinginstallpn.sh + ../../eform-angular-greate-belt-plugin/testinginstallpn.sh + - name: Start the newly build Docker container + id: docker-run + run: docker run --name my-container -p 4200:5000 --network data microtingas/greate-belt-container:latest "/ConnectionString=host=mariadbtest;Database=420_Angular;user=root;password=secretpassword;port=3306;Convert Zero Datetime = true;SslMode=none;" > docker_run_log 2>&1 & + - name: Sleep 15 seconds + run: sleep 15 + - name: Get standard output + run: cat docker_run_log + - name: Pretest changes to work with Docker container + run: sed -i 's/localhost/mariadbtest/g' eform-angular-frontend/eform-client/playwright/e2e/Constants/DatabaseConfigurationConstants.ts + - name: yarn install + run: cd eform-angular-frontend/eform-client && yarn install + - name: Install Playwright browsers + run: cd eform-angular-frontend/eform-client && npx playwright install --with-deps chromium + - name: Wait for app + run: npx wait-on http://localhost:4200 --timeout 120000 + - name: DB Configuration + run: cd eform-angular-frontend/eform-client && npx playwright test playwright/e2e/Tests/database-configuration/ + - name: Change rabbitmq hostname + run: docker exec -i mariadbtest mysql -u root --password=secretpassword -e 'update 420_SDK.Settings set Value = "my-rabbit" where Name = "rabbitMqHost"' + - name: Get standard output + run: | + cat docker_run_log + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` + if [ $result -ne 1 ];then exit 1; fi + - name: Wait for app + run: npx wait-on http://localhost:4200 --timeout 120000 + - name: ${{ matrix.test }} playwright test + run: | + cd eform-angular-frontend/eform-client + npx playwright test playwright/e2e/plugins/greate-belt-pn/${{ matrix.test }}/ + - name: Stop the newly build Docker container + run: docker stop my-container + - name: Get standard output + run: | + cat docker_run_log + result=`cat docker_run_log | grep "Now listening on:.*:5000" -m 1 | wc -l` + if [ $result -ne 1 ];then exit 1; fi + - name: Get standard output + if: ${{ failure() }} + run: cat docker_run_log + - name: Archive Playwright report + if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-report-${{ matrix.test }} + path: eform-angular-frontend/eform-client/playwright-report/ + retention-days: 2 \ No newline at end of file diff --git a/eform-client/playwright.config.ts b/eform-client/playwright.config.ts new file mode 100644 index 0000000..fa40c57 --- /dev/null +++ b/eform-client/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './playwright/e2e', + fullyParallel: false, + workers: 1, + timeout: 120_000, + use: { + baseURL: 'http://localhost:4200', + viewport: { width: 1920, height: 1080 }, + video: 'retain-on-failure', + screenshot: 'only-on-failure', + trace: 'retain-on-failure', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/eform-client/playwright/e2e/plugins/greate-belt-pn/a/greate-belt-settings.spec.ts b/eform-client/playwright/e2e/plugins/greate-belt-pn/a/greate-belt-settings.spec.ts new file mode 100644 index 0000000..625da35 --- /dev/null +++ b/eform-client/playwright/e2e/plugins/greate-belt-pn/a/greate-belt-settings.spec.ts @@ -0,0 +1,47 @@ +import { test, expect } from '@playwright/test'; +import { LoginPage } from '../../../Page objects/Login.page'; +import { MyEformsPage } from '../../../Page objects/MyEforms.page'; +import { PluginPage } from '../../../Page objects/Plugin.page'; + +const pluginName = 'Microting Greate Belt Plugin'; + +let page; + +test.describe('Application settings page - site header section', () => { + test.beforeAll(async ({ browser }) => { + page = await browser.newPage(); + }); + + test.afterAll(async () => { + await page.close(); + }); + + test('should go to plugin settings page', async () => { + const loginPage = new LoginPage(page); + const myEformsPage = new MyEformsPage(page); + const pluginPage = new PluginPage(page); + + await loginPage.open('/auth'); + await loginPage.login(); + await myEformsPage.Navbar.goToPluginsPage(); + + const plugin = await pluginPage.getPluginRowObjByName(pluginName); + expect(plugin).not.toBeNull(); + expect(plugin!.name.trim()).toBe(pluginName); + expect(plugin!.status.trim()).toBe('toggle_off'); + }); + + test('should activate the plugin', async () => { + test.setTimeout(240000); + const pluginPage = new PluginPage(page); + + const plugin = await pluginPage.getPluginRowObjByName(pluginName); + expect(plugin).not.toBeNull(); + await plugin!.enableOrDisablePlugin(); + + const pluginAfter = await pluginPage.getPluginRowObjByName(pluginName); + expect(pluginAfter).not.toBeNull(); + expect(pluginAfter!.name.trim()).toBe(pluginName); + expect(pluginAfter!.status.trim()).toBe('toggle_on'); + }); +});