diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index 2663ca678..82280f8e5 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -2,7 +2,7 @@ name: 'Alpha Build' on: push: - branches: [v4200/build-system] + branches: [v5000/separate-app] jobs: frontend: diff --git a/backend/src/db/actions/delete.ts b/backend/src/db/actions/delete.ts index 55c0bbe89..b2a8eb4a8 100644 --- a/backend/src/db/actions/delete.ts +++ b/backend/src/db/actions/delete.ts @@ -21,13 +21,28 @@ export async function deleteAccount( } return await transaction(async (manager) => { - await delMessages(manager, options.deleteSessions, user, anonymousAccount); - await delVisits(manager, options.deleteSessions, user, anonymousAccount); - await delVotes(manager, options.deleteVotes, user, anonymousAccount); - await delPosts(manager, options.deletePosts, user, anonymousAccount); - await delSessions(manager, options.deleteSessions, user, anonymousAccount); - await delUserAccount(manager, user); - return true; + try { + await delMessages( + manager, + options.deleteSessions, + user, + anonymousAccount + ); + await delVisits(manager, options.deleteSessions, user, anonymousAccount); + await delVotes(manager, options.deleteVotes, user, anonymousAccount); + await delPosts(manager, options.deletePosts, user, anonymousAccount); + await delSessions( + manager, + options.deleteSessions, + user, + anonymousAccount + ); + await delUserAccount(manager, user); + return true; + } catch (ex) { + console.log('Error while trying to delete account', ex); + throw ex; + } }); } diff --git a/frontend/index.html b/frontend/index.html index 566529bb3..c6daf9fe0 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -58,16 +58,6 @@ - - - - - - - - - - - - - - + diff --git a/frontend/src/Layout.tsx b/frontend/src/Layout.tsx index 446424df1..0fa50d6bc 100644 --- a/frontend/src/Layout.tsx +++ b/frontend/src/Layout.tsx @@ -27,6 +27,7 @@ import useBackendCapabilities from './global/useBackendCapabilities'; import useIsPro from 'auth/useIsPro'; import ProButton from 'components/ProButton'; import { useTranslation } from 'react-i18next'; +import { Welcome } from 'views/Welcome'; const Home = lazy(() => import('./views/Home')); const Game = lazy(() => import('./views/Game')); @@ -141,7 +142,7 @@ function App() { }> - : null} /> + : } /> } /> } /> } /> diff --git a/frontend/src/auth/AccountMenu.tsx b/frontend/src/auth/AccountMenu.tsx index 4f4af5312..d252c349c 100644 --- a/frontend/src/auth/AccountMenu.tsx +++ b/frontend/src/auth/AccountMenu.tsx @@ -9,7 +9,7 @@ import LoginModal from './modal/LoginModal'; import { logout } from '../api'; import UserContext from './Context'; import Avatar from '../components/Avatar'; -import { useNavigate } from 'react-router-dom'; +import { useMatch, useNavigate } from 'react-router-dom'; import { Key, Logout, Star } from '@mui/icons-material'; import { colors, Divider, ListItemIcon, ListItemText } from '@mui/material'; import AccountCircle from '@mui/icons-material/AccountCircle'; @@ -27,6 +27,7 @@ const AccountMenu = () => { const openMenu = useCallback(() => setMenuOpen(true), []); const user = useUser(); const isAdmin = useIsAdmin(); + const isOnRoot = useMatch('/'); const isNotAnon = user && user.accountType !== 'anonymous'; const handleModalOpen = useCallback( @@ -121,6 +122,11 @@ const AccountMenu = () => { ); } + + if (isOnRoot) { + return null; + } + return ( <> @@ -79,6 +80,7 @@ const Login = ({ fullWidth style={{ marginTop: 20 }} leftIcon={} + inputProps={{ 'data-cy': 'account-login-input' }} /> } + inputProps={{ 'data-cy': 'account-password-input' }} />
diff --git a/frontend/src/node.ts b/frontend/src/node.ts deleted file mode 100644 index f9908cee2..000000000 --- a/frontend/src/node.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Buffer } from 'buffer'; //or 'buffer/', with trailing slash -import Process from 'process'; -globalThis.process = Process; -globalThis.Buffer = Buffer; diff --git a/frontend/src/translations/locales/ar-SA.json b/frontend/src/translations/locales/ar-SA.json index d46c3e1bd..ced332a96 100644 --- a/frontend/src/translations/locales/ar-SA.json +++ b/frontend/src/translations/locales/ar-SA.json @@ -18,6 +18,9 @@ "title": "الاستطلاع التراجعي غير مرخص" } }, + "Welcome": { + "title": "مرحبًا! الرجاء تسجيل الدخول للبدء." + }, "Home": { "welcome": "مرحبا، {{name}}", "howDoesThatWork": "كيف يعمل ذلك؟" diff --git a/frontend/src/translations/locales/de-DE.json b/frontend/src/translations/locales/de-DE.json index 43ba58d6d..e1ec5da22 100644 --- a/frontend/src/translations/locales/de-DE.json +++ b/frontend/src/translations/locales/de-DE.json @@ -18,6 +18,9 @@ "title": "Retrospected ist nicht lizenziert" } }, + "Welcome": { + "title": "Willkommen! Bitte melden Sie sich an, um zu starten." + }, "Home": { "welcome": "Willkommen, {{name}}", "howDoesThatWork": "Wie funktioniert das?" diff --git a/frontend/src/translations/locales/en-GB.json b/frontend/src/translations/locales/en-GB.json index f35c40f75..6859c012b 100644 --- a/frontend/src/translations/locales/en-GB.json +++ b/frontend/src/translations/locales/en-GB.json @@ -18,6 +18,9 @@ "title": "Retrospected is Unlicenced" } }, + "Welcome": { + "title": "Welcome! Please login to start." + }, "Home": { "welcome": "Welcome, {{name}}", "howDoesThatWork": "How does that work?" diff --git a/frontend/src/translations/locales/es-ES.json b/frontend/src/translations/locales/es-ES.json index 358ae2c85..78d72f7a6 100644 --- a/frontend/src/translations/locales/es-ES.json +++ b/frontend/src/translations/locales/es-ES.json @@ -18,6 +18,9 @@ "title": "El retrospectivo está sin licencia" } }, + "Welcome": { + "title": "¡Bienvenido! Inicie sesión para empezar." + }, "Home": { "welcome": "Bienvenido, {{name}}", "howDoesThatWork": "¿Cómo funciona esto?" diff --git a/frontend/src/translations/locales/fr-FR.json b/frontend/src/translations/locales/fr-FR.json index 6263238e4..4835a5fe9 100644 --- a/frontend/src/translations/locales/fr-FR.json +++ b/frontend/src/translations/locales/fr-FR.json @@ -18,6 +18,9 @@ "title": "Retrospected est sans licence" } }, + "Welcome": { + "title": "Bienvenue! Veuillez vous connecter pour commencer." + }, "Home": { "welcome": "Bienvenue, {{name}}", "howDoesThatWork": "Comment cela fonctionne-t-il ?" diff --git a/frontend/src/translations/locales/hu-HU.json b/frontend/src/translations/locales/hu-HU.json index d6fced2c3..89a6d64a5 100644 --- a/frontend/src/translations/locales/hu-HU.json +++ b/frontend/src/translations/locales/hu-HU.json @@ -18,6 +18,9 @@ "title": "Az utólag jogosítvány nélküli" } }, + "Welcome": { + "title": "" + }, "Home": { "welcome": "Isten hozott, {{name}}", "howDoesThatWork": "Hogyan működik?" diff --git a/frontend/src/translations/locales/it-IT.json b/frontend/src/translations/locales/it-IT.json index ee459f54f..c6ff0a0ff 100644 --- a/frontend/src/translations/locales/it-IT.json +++ b/frontend/src/translations/locales/it-IT.json @@ -18,6 +18,9 @@ "title": "Retrospected is Unlicenced" } }, + "Welcome": { + "title": "Benvenuto! Effettua il login per iniziare." + }, "Home": { "welcome": "Benvenuto, {{name}}", "howDoesThatWork": "Come funziona quello?" diff --git a/frontend/src/translations/locales/ja-JP.json b/frontend/src/translations/locales/ja-JP.json index d1b86c993..32da6c1f8 100644 --- a/frontend/src/translations/locales/ja-JP.json +++ b/frontend/src/translations/locales/ja-JP.json @@ -18,6 +18,9 @@ "title": "Retrospected is unlicenced" } }, + "Welcome": { + "title": "ようこそ!ログインしてください。" + }, "Home": { "welcome": "ようこそ、 {{name}}", "howDoesThatWork": "それはどのように機能しますか?" diff --git a/frontend/src/translations/locales/nl-NL.json b/frontend/src/translations/locales/nl-NL.json index dd7307dde..c1b5cfa25 100644 --- a/frontend/src/translations/locales/nl-NL.json +++ b/frontend/src/translations/locales/nl-NL.json @@ -18,6 +18,9 @@ "title": "Retrospected is niet toegestaan" } }, + "Welcome": { + "title": "Welkom! Gelieve in te loggen om te starten." + }, "Home": { "welcome": "Welkom, {{name}}", "howDoesThatWork": "Hoe werkt dat?" diff --git a/frontend/src/translations/locales/pl-PL.json b/frontend/src/translations/locales/pl-PL.json index 8044a52e8..7cba7d537 100644 --- a/frontend/src/translations/locales/pl-PL.json +++ b/frontend/src/translations/locales/pl-PL.json @@ -18,6 +18,9 @@ "title": "Retrospected jest nielicencjonowany" } }, + "Welcome": { + "title": "Witaj! Zaloguj się, aby rozpocząć." + }, "Home": { "welcome": "Witaj, {{name}}", "howDoesThatWork": "Jak to działa?" diff --git a/frontend/src/translations/locales/pt-BR.json b/frontend/src/translations/locales/pt-BR.json index 03f8a5c2e..ef6a8fda4 100644 --- a/frontend/src/translations/locales/pt-BR.json +++ b/frontend/src/translations/locales/pt-BR.json @@ -18,6 +18,9 @@ "title": "Retrospectiva Não Autorizada" } }, + "Welcome": { + "title": "Bem-vindo! Por favor, faça o login para começar." + }, "Home": { "welcome": "Bem-vindo, {{name}}", "howDoesThatWork": "Como funciona isso?" diff --git a/frontend/src/translations/locales/pt-PT.json b/frontend/src/translations/locales/pt-PT.json index 5a2ed3f51..231f5dab6 100644 --- a/frontend/src/translations/locales/pt-PT.json +++ b/frontend/src/translations/locales/pt-PT.json @@ -18,6 +18,9 @@ "title": "Retrospectiva Não Autorizada" } }, + "Welcome": { + "title": "Bem-vindo! Por favor, faça o login para começar." + }, "Home": { "welcome": "Bem-vindo, {{name}}", "howDoesThatWork": "Como funciona isso?" diff --git a/frontend/src/translations/locales/uk-UA.json b/frontend/src/translations/locales/uk-UA.json index 64912e8c9..9f422cf38 100644 --- a/frontend/src/translations/locales/uk-UA.json +++ b/frontend/src/translations/locales/uk-UA.json @@ -18,6 +18,9 @@ "title": "Ретроспекція не ліцензована" } }, + "Welcome": { + "title": "Ласкаво просимо! Будь ласка, увійдіть, щоб почати." + }, "Home": { "welcome": "Ласкаво просимо, {{name}}", "howDoesThatWork": "Як це працює?" diff --git a/frontend/src/translations/locales/zh-CN.json b/frontend/src/translations/locales/zh-CN.json index 9aa399b4a..8d975bb11 100644 --- a/frontend/src/translations/locales/zh-CN.json +++ b/frontend/src/translations/locales/zh-CN.json @@ -18,6 +18,9 @@ "title": "返回是未授权的" } }, + "Welcome": { + "title": "欢迎!请登录以开始" + }, "Home": { "welcome": "欢迎, {{name}}", "howDoesThatWork": "这是如何运作的?" diff --git a/frontend/src/translations/locales/zh-TW.json b/frontend/src/translations/locales/zh-TW.json index 76317a565..d498f391b 100644 --- a/frontend/src/translations/locales/zh-TW.json +++ b/frontend/src/translations/locales/zh-TW.json @@ -18,6 +18,9 @@ "title": "追溯是未經許可的" } }, + "Welcome": { + "title": "" + }, "Home": { "welcome": "歡迎, {{name}}", "howDoesThatWork": "這是如何運作的?" diff --git a/frontend/src/views/Welcome.tsx b/frontend/src/views/Welcome.tsx new file mode 100644 index 000000000..1b3c04e7d --- /dev/null +++ b/frontend/src/views/Welcome.tsx @@ -0,0 +1,41 @@ +import styled from '@emotion/styled'; +import LoginContent from 'auth/modal/LoginContent'; +import { noop } from 'lodash'; +import { useTranslation } from 'react-i18next'; + +export function Welcome() { + const { t } = useTranslation(); + return ( + + {t('Welcome.title')} + + + + + ); +} + +const Container = styled.div` + display: flex; + flex-direction: column; + align-items: center; +`; + +const Title = styled.h1` + font-weight: 100; + font-size: 4em; + @media screen and (max-width: 700px) { + font-size: 2em; + } +`; + +const LoginContainer = styled.div` + width: 600px; + border: 1px solid #ccc; + + margin-top: 20px; + + @media screen and (max-width: 700px) { + width: 100%; + } +`; diff --git a/frontend/src/views/login/LoginPage.tsx b/frontend/src/views/login/LoginPage.tsx index dbe5ae160..c3e6b06d7 100644 --- a/frontend/src/views/login/LoginPage.tsx +++ b/frontend/src/views/login/LoginPage.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import styled from '@emotion/styled'; -import Login from '../../auth/modal/LoginModal'; +import LoginModal from '../../auth/modal/LoginModal'; export default function LoginPage() { const navigate = useNavigate(); @@ -10,7 +10,7 @@ export default function LoginPage() { }, [navigate]); return ( - + ); } diff --git a/integration/Makefile b/integration/Makefile index 2f7945fdf..3d1422796 100644 --- a/integration/Makefile +++ b/integration/Makefile @@ -10,4 +10,7 @@ local: docker-compose up -d yarn yarn test - docker-compose down \ No newline at end of file + docker-compose down + +alpha: + docker-compose -f ./docker-compose.ci.alpha.yml up --exit-code-from cypress \ No newline at end of file diff --git a/integration/cypress.config.js b/integration/cypress.config.js new file mode 100644 index 000000000..fa4ef2f1e --- /dev/null +++ b/integration/cypress.config.js @@ -0,0 +1,15 @@ +const { defineConfig } = require('cypress') + +module.exports = defineConfig({ + env: { + backend_delay: 0, + }, + e2e: { + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + return require('./cypress/plugins/index.js')(on, config) + }, + baseUrl: 'http://localhost:3000', + }, +}) diff --git a/integration/cypress.json b/integration/cypress.json deleted file mode 100644 index 687450412..000000000 --- a/integration/cypress.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "baseUrl": "http://localhost:3000", - "env": { - "backend_delay": 0 - } -} diff --git a/integration/cypress/e2e/test.cy.js b/integration/cypress/e2e/test.cy.js new file mode 100644 index 000000000..eea4cf64c --- /dev/null +++ b/integration/cypress/e2e/test.cy.js @@ -0,0 +1,153 @@ +describe('Home Page', () => { + it('Should load correctly', () => { + cy.visit('/'); + + cy.get('#content').get('h1').should('contain', 'Welcome!'); + }); +}); + + +function get(name, rest) { + return cy.get(`[data-cy=${name}]${rest ?? ''}`); +} + + + +describe('Post workflow', () => { + it('Should login and write a post', () => { + cy.visit('/'); + + // We need to wait until the backend is ready + cy.wait(+Cypress.env('backend_delay')); + + // Close cookie banner + cy.get('.wpcc-btn').click(); + + get('anon-tab').click(); + get('anon-input').focus().type('Zelensky'); + get('anon-login-button').click(); + + // Home page should display the user name + cy.get('#content').should('contain', 'Welcome, Zelensky'); + + // And then allow creating a new session + get('new-session-button').click(); + + // And write a post + get('column-input').first().focus().type('Slava Ukraini!{enter}'); + + // Reload the page + cy.reload(); + + // The post should still be there + cy.get('#content').should('contain', 'Slava Ukraini!'); + }); + + it('Should change language and translate the app', () => { + cy.visit('/'); + + // Close cookie banner + cy.get('.wpcc-btn').click(); + + get('anon-tab').click(); + get('anon-input').focus().type('Zelensky'); + get('anon-login-button').click(); + + // Home page should display the user name + cy.get('#content').should('contain', 'Welcome, Zelensky'); + + // Change language + get('side-panel-toggle').click(); + get('language-picker').click(); + get('language-picker-item-fr-FR').click(); + + // Exit panel + cy.get('body').type('{esc}'); + + // Home page should now be in French + cy.get('#content').should('contain', 'Bienvenue, Zelensky'); + + // Logout + get('account-menu').click(); + get('account-menu-logout').click(); + + }); + + it('Should be able to create a new account', () => { + cy.session('create-account', () => { + const id = Date.now(); + + cy.visit('/'); + + // Close cookie banner + cy.get('.wpcc-btn').click(); + + // Select the account tab + get('account-tab').click(); + + // Select register + get('register').click(); + + // Add some data + get('register-name').type('V Zelensky'); + get('register-email').type(`vlad.zelensky.${id}@ukraine.ua`); + get('register-password').type('A-str0ng-Pa33!çà'); + + // Register + get('register-button').click(); + + // Create a new session, and add some messages + get('new-session-button').click(); + + // And write a post + get('column-input').first().focus().type('Slava Ukraini!{enter}'); + cy.get('#content').should('contain', 'Slava Ukraini!'); + + // And some chat + get('open-chat-button').click({force: true}); + get('chat-input').focus().type('This is a message{enter}'); + cy.get('#content').should('contain', 'This is a message'); + + // Close + get('open-chat-button').click({force: true}); + }); + }); + + it('Should be able to delete an account', () => { + cy.session('delete-account', () => { + const id = Date.now(); + + cy.visit('/'); + + // Close cookie banner + cy.get('.wpcc-btn').click(); + + // Select the account tab + get('account-tab').click(); + + // Select register + get('register').click(); + + // Add some data + get('register-name').type('V Zelensky'); + get('register-email').type(`vlad.zelensky.${id}@ukraine.ua`); + get('register-password').type('A-str0ng-Pa33!çà'); + + // Register + get('register-button').click(); + + // Go to the user admin and delete the account + get('account-menu').click(); + get('account-menu-account').click(); + get('delete-account-button').click(); + get('delete-modal-sessions').click(); + get('delete-modal-posts').click(); + get('delete-modal-votes').click(); + get('delete-modal-delete-button').click(); + get('delete-modal-confirm').click(); + + // We should be back to the home page + cy.get('body').get('h1').should('contain', 'Welcome!'); + }); + }); +}); diff --git a/integration/cypress/integration/test.spec.js b/integration/cypress/integration/test.spec.js deleted file mode 100644 index 80720be33..000000000 --- a/integration/cypress/integration/test.spec.js +++ /dev/null @@ -1,132 +0,0 @@ -describe('Home Page', () => { - it('Should load correctly', () => { - cy.visit('/'); - - cy.get('div.marketing-content') - .should('contain', 'Real-time Retrospectives') - }); -}); - - -function get(name, rest) { - return cy.get(`[data-cy=${name}]${rest ?? ''}`); -} - - -describe('Post workflow', () => { - it('Should login and write a post', () => { - cy.visit('/'); - - // We need to wait until the backend is ready - cy.wait(+Cypress.env('backend_delay')); - - // Close cookie banner - cy.get('.wpcc-btn').click(); - - get('login-button').click(); - get('anon-tab').click(); - get('anon-input').focus().type('Zelensky'); - get('anon-login-button').click(); - - // Home page should display the user name - cy.get('#content').should('contain', 'Welcome, Zelensky'); - - // And then allow creating a new session - get('new-session-button').click(); - - // And write a post - get('column-input').first().focus().type('Slava Ukraini!{enter}'); - - // Reload the page - cy.reload(); - - // The post should still be there - cy.get('#content').should('contain', 'Slava Ukraini!'); - }); - - it('Should change language and translate the app', () => { - cy.visit('/'); - - // Close cookie banner - cy.get('.wpcc-btn').click(); - - get('login-button').click(); - get('anon-tab').click(); - get('anon-input').focus().type('Zelensky'); - get('anon-login-button').click(); - - // Home page should display the user name - cy.get('#content').should('contain', 'Welcome, Zelensky'); - - // Change language - get('side-panel-toggle').click(); - get('language-picker').click(); - get('language-picker-item-fr-FR').click(); - - // Exit panel - cy.get('body').type('{esc}'); - - // Home page should now be in French - cy.get('#content').should('contain', 'Bienvenue, Zelensky'); - - // Logout - get('account-menu').click(); - get('account-menu-logout').click(); - - }); - - it('Should be able to create a new account', () => { - const id = Date.now(); - - cy.visit('/'); - - // Close cookie banner - cy.get('.wpcc-btn').click(); - - // Login - get('login-button').click(); - - // Select the account tab - get('account-tab').click(); - - // Select register - get('register').click(); - - // Add some data - get('register-name').type('V Zelensky'); - get('register-email').type(`vlad.zelensky.${id}@ukraine.ua`); - get('register-password').type('A-str0ng-Pa33!çà'); - - // Register - get('register-button').click(); - - // Create a new session, and add some messages - get('new-session-button').click(); - - // And write a post - get('column-input').first().focus().type('Slava Ukraini!{enter}'); - cy.get('#content').should('contain', 'Slava Ukraini!'); - - // And some chat - get('open-chat-button').click({force: true}); - get('chat-input').focus().type('This is a message{enter}'); - cy.get('#content').should('contain', 'This is a message'); - - // Close - get('open-chat-button').click({force: true}); - - // Go to the user admin and delete the account - get('account-menu').click(); - get('account-menu-account').click(); - get('delete-account-button').click(); - get('delete-modal-sessions').click(); - get('delete-modal-posts').click(); - get('delete-modal-votes').click(); - get('delete-modal-delete-button').click(); - get('delete-modal-confirm').click(); - - // We should be back to the home page - cy.get('div.marketing-content') - .should('contain', 'Real-time Retrospectives') - }); -}); diff --git a/integration/cypress/support/index.js b/integration/cypress/support/e2e.js similarity index 100% rename from integration/cypress/support/index.js rename to integration/cypress/support/e2e.js diff --git a/integration/docker-compose.ci.alpha.yml b/integration/docker-compose.ci.alpha.yml index 27729d897..95c16e1ea 100644 --- a/integration/docker-compose.ci.alpha.yml +++ b/integration/docker-compose.ci.alpha.yml @@ -1,7 +1,7 @@ version: '3' services: cypress: - image: "cypress/included:4.4.0" + image: "cypress/included:12.6.0" ipc: host depends_on: - frontend diff --git a/integration/docker-compose.ci.canary.yml b/integration/docker-compose.ci.canary.yml index 18df674f4..7761dffaa 100644 --- a/integration/docker-compose.ci.canary.yml +++ b/integration/docker-compose.ci.canary.yml @@ -1,7 +1,7 @@ version: '3' services: cypress: - image: "cypress/included:4.4.0" + image: "cypress/included:12.6.0" ipc: host depends_on: - frontend diff --git a/integration/docker-compose.ci.master.yml b/integration/docker-compose.ci.master.yml index 8baf18648..702672923 100644 --- a/integration/docker-compose.ci.master.yml +++ b/integration/docker-compose.ci.master.yml @@ -1,7 +1,7 @@ version: '3' services: cypress: - image: "cypress/included:4.4.0" + image: "cypress/included:12.6.0" ipc: host depends_on: - frontend diff --git a/integration/package.json b/integration/package.json index 3fc845dc2..a05ecdb2f 100644 --- a/integration/package.json +++ b/integration/package.json @@ -13,6 +13,6 @@ "author": "Antoine Jaussoin", "license": "ISC", "devDependencies": { - "cypress": "^9.5.1" + "cypress": "^12.6.0" } } diff --git a/integration/yarn.lock b/integration/yarn.lock index baa9f2b77..cfa85724b 100644 --- a/integration/yarn.lock +++ b/integration/yarn.lock @@ -303,10 +303,10 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cypress@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.5.1.tgz#51162f3688cedf5ffce311b914ef49a7c1ece076" - integrity sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg== +cypress@^12.6.0: + version "12.6.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.6.0.tgz#d71a82639756173c0682b3d467eb9f0523460e91" + integrity sha512-WdHSVaS1lumSd5XpVTslZd8ui9GIGphrzvXq9+3DtVhqjRZC5M70gu5SW/Y/SLPq3D1wiXGZoHC6HJ7ESVE2lw== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -325,9 +325,9 @@ cypress@^9.5.1: commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.10.4" - debug "^4.3.2" + debug "^4.3.4" enquirer "^2.3.6" - eventemitter2 "^6.4.3" + eventemitter2 "6.4.7" execa "4.1.0" executable "^4.1.1" extract-zip "2.0.1" @@ -340,7 +340,7 @@ cypress@^9.5.1: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.5" + minimist "^1.2.6" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" @@ -370,13 +370,20 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.2: +debug@^4.1.1: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -414,10 +421,10 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== execa@4.1.0: version "4.1.0" @@ -769,10 +776,10 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== ms@2.1.2: version "2.1.2"