diff --git a/Dockerfile.e2e b/Dockerfile.e2e new file mode 100644 index 000000000..c3078d319 --- /dev/null +++ b/Dockerfile.e2e @@ -0,0 +1,44 @@ +FROM node:lts-bookworm +ENV SHELL bash +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN npm install -g pnpm@8.15.1 +RUN pnpm setup + +RUN pnpm install -g @quasar/cli@2.2.1 + +RUN apt-get -y --fix-missing update +RUN apt-get -y --fix-missing upgrade +RUN apt-get -y --no-install-recommends install apt-utils +RUN apt-get install --fix-missing -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb + +WORKDIR /app + +COPY \ + package.json \ + .npmrc \ + pnpm-lock.yaml \ + ./ + +RUN pnpm install +RUN pnpm install cypress +RUN npx cypress install + +COPY \ + quasar.config.js \ + index.html \ + jsconfig.json \ + quasar.extensions.json \ + .eslintignore \ + .eslintrc.cjs \ + postcss.config.js \ + cypress.config.js \ + ./ + +COPY src src +COPY test/cypress test/cypress +COPY public public + +# RUN npx quasar build + +CMD ["npx", "quasar", "dev"] diff --git a/cypress.config.js b/cypress.config.js index 87ad1334f..42ceceac1 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -2,7 +2,7 @@ const { defineConfig } = require('cypress'); module.exports = defineConfig({ e2e: { - baseUrl: 'http://main:4000/', + baseUrl: 'http://front:9000/', experimentalStudio: true, fixturesFolder: 'test/cypress/fixtures', screenshotsFolder: 'test/cypress/screenshots', diff --git a/docker-compose.e2e.yml b/docker-compose.e2e.yml new file mode 100644 index 000000000..31c48033c --- /dev/null +++ b/docker-compose.e2e.yml @@ -0,0 +1,41 @@ +services: + front: + image: registry.verdnatura.es/salix-frontend:${VERSION:?} + build: + context: . + dockerfile: ./Dockerfile.e2e + ports: + - 9000:9000 + back: + image: registry.verdnatura.es/salix-back:${VERSION:?} + build: + context: . + dockerfile: back/Dockerfile + depends_on: + - db + ports: + - 3000:3000 + - 5000:5000 + volumes: + - ./test/cypress/storage:/salix/storage + db: + image: db + command: npx myt run -t --ci -n salix-front_default + build: + context: . + dockerfile: test/cypress/db/Dockerfile + target: db + volumes: + - /var/run/docker.sock:/var/run/docker.sock + e2e: + image: registry.verdnatura.es/salix-frontend:${VERSION:?} + command: npx cypress run + build: + context: . + dockerfile: ./Dockerfile.e2e + # e2e-2: + # image: registry.verdnatura.es/salix-frontend:${VERSION:?} + # command: npx cypress run --config-file test/cypress/configs/cypress.config.2.js + # build: + # context: . + # dockerfile: ./Dockerfile.e2e diff --git a/docker-compose.yml b/docker-compose.yml index ee3d7c103..86b9b204c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,31 +1,7 @@ +version: '3.7' services: main: image: registry.verdnatura.es/salix-frontend:${VERSION:?} build: context: . dockerfile: ./Dockerfile - ports: - - 4000:4000 - environment: - - VUE_APP_API_URL=http://back:3000 - back: - image: registry.verdnatura.es/salix-back:${VERSION:?} - build: - context: . - dockerfile: back/Dockerfile - depends_on: - - db - ports: - - 3000:3000 - - 5000:5000 - volumes: - - ./test/cypress/storage:/salix/storage - db: - image: db - command: npx myt run -t -d --ci -n salix-front_default - build: - context: . - dockerfile: test/cypress/db/Dockerfile - target: db - volumes: - - /var/run/docker.sock:/var/run/docker.sock diff --git a/test/cypress/.gitignore b/test/cypress/.gitignore index 3f91dd465..01dd8593d 100644 --- a/test/cypress/.gitignore +++ b/test/cypress/.gitignore @@ -1,2 +1,3 @@ videos/* -screenshots/* \ No newline at end of file +screenshots/* +storage/* diff --git a/test/cypress/db/Dockerfile b/test/cypress/db/Dockerfile index 93e898511..634c8cfe3 100644 --- a/test/cypress/db/Dockerfile +++ b/test/cypress/db/Dockerfile @@ -24,11 +24,13 @@ WORKDIR /salix # COPY .git .git # COPY myt.config.yml . -# RUN pnpm i @verdnatura/myt COPY --from=back salix/db db COPY --from=back salix/myt.config.yml . COPY --from=back salix/.git .git + COPY node_modules node_modules +# RUN pnpm i @verdnatura/myt USAR NODE_MODULES HASTA QUE ESTE LA RAMA DE MYT FUSIONADA (MIENTRAS INSTALAR EN LILIUM, MYT Y MODIFICAR EL CODIGO DE myt-run.js) + FROM base AS db diff --git a/test/cypress/integration/claim/claimPhoto.spec.js b/test/cypress/integration/claim/claimPhoto.spec.js index 9b2978b19..e78e37fe2 100755 --- a/test/cypress/integration/claim/claimPhoto.spec.js +++ b/test/cypress/integration/claim/claimPhoto.spec.js @@ -22,14 +22,12 @@ describe('ClaimPhoto', () => { }); it('should open first image dialog change to second and close', () => { - cy.get( - ':nth-child(1) > .q-card > .q-img > .q-img__container > .q-img__image' - ).click(); + cy.get(':nth-last-child(1) > .q-card').click(); cy.get('.q-carousel__slide > .q-img > .q-img__container > .q-img__image').should( 'be.visible' ); - cy.get('.q-carousel__control > .q-btn > .q-btn__content > .q-icon').click(); + cy.get('.q-carousel__control > button').click(); cy.get( '.q-dialog__inner > .q-toolbar > .q-btn > .q-btn__content > .q-icon' @@ -41,7 +39,7 @@ describe('ClaimPhoto', () => { it('should remove third and fourth file', () => { cy.get( - '.multimediaParent > :nth-child(3) > .q-btn > .q-btn__content > .q-icon' + '.multimediaParent > :nth-last-child(1) > .q-btn > .q-btn__content > .q-icon' ).click(); cy.get( '.q-card__actions > .q-btn--unelevated > .q-btn__content > .block' @@ -49,7 +47,7 @@ describe('ClaimPhoto', () => { cy.get('.q-notification__message').should('have.text', 'Data deleted'); cy.get( - '.multimediaParent > :nth-child(3) > .q-btn > .q-btn__content > .q-icon' + '.multimediaParent > :nth-last-child(1) > .q-btn > .q-btn__content > .q-icon' ).click(); cy.get( '.q-card__actions > .q-btn--unelevated > .q-btn__content > .block' diff --git a/test/cypress/integration/outLogin/recoverPassword.spec.js b/test/cypress/integration/outLogin/recoverPassword.spec.js index eec81b661..48f6f8563 100755 --- a/test/cypress/integration/outLogin/recoverPassword.spec.js +++ b/test/cypress/integration/outLogin/recoverPassword.spec.js @@ -24,7 +24,7 @@ describe('Recover Password', () => { it('should change password to user', () => { // Get token from mail cy.request( - `http://localhost:3000/api/Mails?filter=%7B%22where%22%3A%20%7B%22receiver%22%3A%20%22${username}%40mydomain.com%22%7D%2C%20%22order%22%3A%20%5B%22id%20DESC%22%5D%7D&access_token=DEFAULT_TOKEN` + `/api/Mails?filter=%7B%22where%22%3A%20%7B%22receiver%22%3A%20%22${username}%40mydomain.com%22%7D%2C%20%22order%22%3A%20%5B%22id%20DESC%22%5D%7D&access_token=DEFAULT_TOKEN` ).then((response) => { const regex = /access_token=([a-zA-Z0-9]+)/; const [match] = response.body[0].body.match(regex); diff --git a/test/cypress/integration/outLogin/twoFactor.spec.js b/test/cypress/integration/outLogin/twoFactor.spec.js index 4d8561f0f..6a8ac9c06 100755 --- a/test/cypress/integration/outLogin/twoFactor.spec.js +++ b/test/cypress/integration/outLogin/twoFactor.spec.js @@ -11,7 +11,7 @@ describe('Two Factor', () => { it('should enable two factor to sysadmin', () => { cy.request( 'PATCH', - `http://localhost:3000/api/VnUsers/${userId}/update-user?access_token=DEFAULT_TOKEN`, + `/api/VnUsers/${userId}/update-user?access_token=DEFAULT_TOKEN`, { twoFactor: 'email' } ); }); @@ -41,7 +41,7 @@ describe('Two Factor', () => { // Get code from mail cy.request( - `http://localhost:3000/api/Mails?filter=%7B%22where%22%3A%20%7B%22receiver%22%3A%20%22${username}%40mydomain.com%22%7D%2C%20%22order%22%3A%20%5B%22id%20DESC%22%5D%7D&access_token=DEFAULT_TOKEN` + `/api/Mails?filter=%7B%22where%22%3A%20%7B%22receiver%22%3A%20%22${username}%40mydomain.com%22%7D%2C%20%22order%22%3A%20%5B%22id%20DESC%22%5D%7D&access_token=DEFAULT_TOKEN` ).then((response) => { const tempDiv = document.createElement('div'); tempDiv.innerHTML = response.body[0].body; diff --git a/test/cypress/support/index.js b/test/cypress/support/index.js index 4385698ec..5581875c6 100644 --- a/test/cypress/support/index.js +++ b/test/cypress/support/index.js @@ -15,3 +15,6 @@ import './commands'; +Cypress.Screenshot.defaults({ + screenshotOnRunFailure: false, +});