diff --git a/bigbluebutton-html5/client/meetingClient.jsx b/bigbluebutton-html5/client/meetingClient.jsx
index 4e7267a4f9de..2b090d20cb21 100755
--- a/bigbluebutton-html5/client/meetingClient.jsx
+++ b/bigbluebutton-html5/client/meetingClient.jsx
@@ -38,7 +38,7 @@ import PLUGIN_CONFIGURATION_QUERY from '/imports/ui/components/plugins-engine/qu
const Startup = () => {
const loadingContextInfo = useContext(LoadingContext);
useEffect(() => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
}, []);
// Logs all uncaught exceptions to the client logger
window.addEventListener('error', (e) => {
diff --git a/bigbluebutton-html5/imports/startup/client/intlLoader.tsx b/bigbluebutton-html5/imports/startup/client/intlLoader.tsx
index 87e0b8287750..54726442bb43 100644
--- a/bigbluebutton-html5/imports/startup/client/intlLoader.tsx
+++ b/bigbluebutton-html5/imports/startup/client/intlLoader.tsx
@@ -126,7 +126,7 @@ const IntlLoader: React.FC = ({
const foundLocales = typedResp.filter((locale) => locale instanceof Object) as LocaleJson[];
if (foundLocales.length === 0) {
const error = `${{ logCode: 'intl_fetch_locale_error' }},Could not fetch any locale file for ${languageSets.join(', ')}`;
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
logger.error(error);
throw new Error(error);
}
@@ -137,15 +137,15 @@ const IntlLoader: React.FC = ({
setCurrentLocale(replacedLocale);
setMessages(mergedLocale);
if (!init) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
}
}).catch((error) => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error(error);
});
})
.catch(() => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('unable to fetch localized messages');
});
}, []);
diff --git a/bigbluebutton-html5/imports/ui/components/common/loading-screen/component.jsx b/bigbluebutton-html5/imports/ui/components/common/loading-screen/component.jsx
index 9e2d8f008ee2..7683c040584d 100644
--- a/bigbluebutton-html5/imports/ui/components/common/loading-screen/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/common/loading-screen/component.jsx
@@ -1,16 +1,13 @@
import React from 'react';
import Styled from './styles';
-const LoadingScreen = ({ children }) => (
+const LoadingScreen = () => (
-
- {children}
-
);
diff --git a/bigbluebutton-html5/imports/ui/components/common/loading-screen/loading-screen-HOC/component.tsx b/bigbluebutton-html5/imports/ui/components/common/loading-screen/loading-screen-HOC/component.tsx
index 1d7ede17cd04..2894f6dac0af 100644
--- a/bigbluebutton-html5/imports/ui/components/common/loading-screen/loading-screen-HOC/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/common/loading-screen/loading-screen-HOC/component.tsx
@@ -3,16 +3,14 @@ import LoadingScreen from '../component';
interface LoadingContent {
isLoading: boolean;
- loadingMessage: string;
}
interface LoadingContextContent extends LoadingContent {
- setLoading: (isLoading: boolean, loadingMessage: string) => void;
+ setLoading: (isLoading: boolean) => void;
}
export const LoadingContext = React.createContext({
isLoading: false,
- loadingMessage: '',
setLoading: () => { },
});
@@ -25,17 +23,14 @@ const LoadingScreenHOC: React.FC = ({
}) => {
const [loading, setLoading] = React.useState({
isLoading: false,
- loadingMessage: '',
});
return (
{
+ setLoading: (isLoading: boolean) => {
setLoading({
isLoading,
- loadingMessage,
});
},
}}
@@ -43,9 +38,7 @@ const LoadingScreenHOC: React.FC = ({
{
loading.isLoading
? (
-
- {loading.loadingMessage}
-
+
)
: null
}
diff --git a/bigbluebutton-html5/imports/ui/components/common/loading-screen/styles.js b/bigbluebutton-html5/imports/ui/components/common/loading-screen/styles.js
index b0b40dba24a7..81733d52eacb 100644
--- a/bigbluebutton-html5/imports/ui/components/common/loading-screen/styles.js
+++ b/bigbluebutton-html5/imports/ui/components/common/loading-screen/styles.js
@@ -1,7 +1,6 @@
import styled, { css, keyframes } from 'styled-components';
import { mdPaddingX } from '/imports/ui/stylesheets/styled-components/general';
-import { loaderBg, loaderBullet, colorWhite } from '/imports/ui/stylesheets/styled-components/palette';
-import { fontSizeLarge } from '/imports/ui/stylesheets/styled-components/typography';
+import { loaderBg, loaderBullet } from '/imports/ui/stylesheets/styled-components/palette';
const Background = styled.div`
position: fixed;
@@ -57,16 +56,9 @@ const Bounce2 = styled.div`
`}
`;
-const Message = styled.div`
- font-size: ${fontSizeLarge};
- color: ${colorWhite};
- text-align: center;
-`;
-
export default {
Background,
Spinner,
Bounce1,
Bounce2,
- Message,
};
diff --git a/bigbluebutton-html5/imports/ui/components/connection-manager/component.tsx b/bigbluebutton-html5/imports/ui/components/connection-manager/component.tsx
index 7368a06eb795..df19a2418a56 100644
--- a/bigbluebutton-html5/imports/ui/components/connection-manager/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/connection-manager/component.tsx
@@ -97,11 +97,11 @@ const ConnectionManager: React.FC = ({ children }): Reac
BBBWeb.index().then(({ data }) => {
setGraphqlUrl(data.graphqlWebsocketUrl);
}).catch((error) => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Error fetching GraphQL URL: '.concat(error.message || ''));
});
logger.info('Fetching GraphQL URL');
- loadingContextInfo.setLoading(true, '1/2');
+ loadingContextInfo.setLoading(true);
}, []);
useEffect(() => {
@@ -155,12 +155,12 @@ const ConnectionManager: React.FC = ({ children }): Reac
useEffect(() => {
logger.info('Connecting to GraphQL server');
- loadingContextInfo.setLoading(true, '2/2');
+ loadingContextInfo.setLoading(true);
if (graphqlUrl) {
const urlParams = new URLSearchParams(window.location.search);
const sessionToken = urlParams.get('sessionToken');
if (!sessionToken) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Missing session token');
}
sessionStorage.setItem('sessionToken', sessionToken);
@@ -215,7 +215,7 @@ const ConnectionManager: React.FC = ({ children }): Reac
}
if (error && typeof error === 'object' && 'code' in error && error.code === 4403) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
setTerminalError('Server refused the connection');
return false;
}
@@ -233,7 +233,7 @@ const ConnectionManager: React.FC = ({ children }): Reac
on: {
error: (error) => {
logger.error('Graphql Client Error:', error);
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
connectionStatus.setConnectedStatus(false);
setErrorCounts((prev: number) => prev + 1);
},
@@ -259,7 +259,7 @@ const ConnectionManager: React.FC = ({ children }): Reac
// message ID -1 as a signal to terminate the session
// it contains a prop message.messageId which can be used to show a proper error to the user
logger.error({ logCode: 'graphql_server_closed_connection', extraInfo: message }, 'Graphql Server closed the connection');
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
const payload = message.payload as ErrorPayload[];
if (payload[0].messageId) {
setTerminalError(new Error(payload[0].message, { cause: payload[0].messageId }));
@@ -277,12 +277,12 @@ const ConnectionManager: React.FC = ({ children }): Reac
);
wsLink = ApolloLink.from([payloadSizeCheckLink, errorLink, graphWsLink]);
wsLink.setOnError((error) => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Error: on apollo connection'.concat(JSON.stringify(error) || ''));
});
apolloContextHolder.setLink(subscription);
} catch (error) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Error creating WebSocketLink: '.concat(JSON.stringify(error) || ''));
}
let client;
@@ -295,7 +295,7 @@ const ConnectionManager: React.FC = ({ children }): Reac
setApolloClient(client);
apolloContextHolder.setClient(client);
} catch (error) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Error creating Apollo Client: '.concat(JSON.stringify(error) || ''));
}
}
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/custom-users-settings/component.tsx b/bigbluebutton-html5/imports/ui/components/join-handler/custom-users-settings/component.tsx
index f440e2054de3..21327b46b600 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/custom-users-settings/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/custom-users-settings/component.tsx
@@ -100,11 +100,7 @@ const CustomUsersSettings: React.FC = ({
/>
) : null}
{loading ? (
-
-
- Loading...
-
-
+
) : null}
>
);
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/guest-wait/component.tsx b/bigbluebutton-html5/imports/ui/components/join-handler/guest-wait/component.tsx
index 364a46f26bfa..efa12c54a303 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/guest-wait/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/guest-wait/component.tsx
@@ -125,7 +125,7 @@ const GuestWait: React.FC = (props) => {
const sessionToken = getSearchParam('sessionToken');
if (loadingContextInfo.isLoading) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
}
if (!sessionToken) {
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/presenceManager/component.tsx b/bigbluebutton-html5/imports/ui/components/join-handler/presenceManager/component.tsx
index 5df4098f3f51..a83b06984e35 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/presenceManager/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/presenceManager/component.tsx
@@ -121,7 +121,7 @@ const PresenceManager: React.FC = ({
useEffect(() => {
if (isGuestAllowed) {
timeoutRef.current = setTimeout(() => {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
throw new Error('Authentication timeout');
}, connectionTimeout);
}
@@ -155,7 +155,7 @@ const PresenceManager: React.FC = ({
useEffect(() => {
if (joinErrorCode) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
}
},
[joinErrorCode, joinErrorMessage]);
@@ -204,7 +204,7 @@ const PresenceManagerContainer: React.FC = ({ chi
const loadingContextInfo = useContext(LoadingContext);
if (loading || userInfoLoading) return null;
if (error || userInfoError) {
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
logger.debug(`Error on user authentication: ${error}`);
}
diff --git a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.tsx b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.tsx
index fe82e6583c36..7447ed9a0d70 100644
--- a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.tsx
@@ -380,7 +380,7 @@ const MeetingEnded: React.FC = ({
useEffect(() => {
// Sets Loading to falsed and removes loading splash screen
- loadingContextInfo.setLoading(false, '');
+ loadingContextInfo.setLoading(false);
// Stops all media tracks
window.dispatchEvent(new Event('StopAudioTracks'));
// get the media tag from the session storage
diff --git a/bigbluebutton-html5/imports/ui/components/settings-loader/component.tsx b/bigbluebutton-html5/imports/ui/components/settings-loader/component.tsx
index e3caddefe85a..d0a6ef1e7fd9 100644
--- a/bigbluebutton-html5/imports/ui/components/settings-loader/component.tsx
+++ b/bigbluebutton-html5/imports/ui/components/settings-loader/component.tsx
@@ -93,11 +93,7 @@ const SettingsLoader: React.FC = (props) => {
/>
) : null}
{loading ? (
-
-
- Loading...
-
-
+
) : null}
>
);
diff --git a/bigbluebutton-tests/playwright/layouts/layouts.spec.js b/bigbluebutton-tests/playwright/layouts/layouts.spec.js
index 945f5a708447..c6075dd8c55a 100644
--- a/bigbluebutton-tests/playwright/layouts/layouts.spec.js
+++ b/bigbluebutton-tests/playwright/layouts/layouts.spec.js
@@ -33,7 +33,8 @@ test.describe('Layout', { tag: '@ci' }, () => {
await layouts.customLayout();
});
- test("Update everyone's layout", async () => {
+ test("Update everyone's layout", { tag: '@flaky' }, async () => {
+ // snapshot comparison failing due to unexpected zooming slide after layout update
await layouts.updateEveryone();
});
});
diff --git a/bigbluebutton-tests/playwright/parameters/parameters.spec.js b/bigbluebutton-tests/playwright/parameters/parameters.spec.js
index 81f1ac569c8e..8c3672dd8a39 100644
--- a/bigbluebutton-tests/playwright/parameters/parameters.spec.js
+++ b/bigbluebutton-tests/playwright/parameters/parameters.spec.js
@@ -478,7 +478,8 @@ test.describe.parallel('Custom Parameters', { tag: '@ci' }, () => {
await customParam.hidePresentationOnJoin();
});
- test('Force restore presentation on new events', { tag: '@ci' }, async ({ browser, context, page }) => {
+ test('Force restore presentation on new events', { tag: ['@ci', '@flaky'] }, async ({ browser, context, page }) => {
+ // tagged as flaky because it's restoring presentation right after minimizing it due to unexpected zooming slide
const customParam = new CustomParameters(browser, context);
await customParam.initModPage(page);
await customParam.initUserPage(true, context, { useModMeetingId: true, joinParameter: c.forceRestorePresentationOnNewEvents });
diff --git a/bigbluebutton-tests/playwright/whiteboard/whiteboard.spec.js b/bigbluebutton-tests/playwright/whiteboard/whiteboard.spec.js
index 68a34b5ec9ac..b0cd31d35669 100644
--- a/bigbluebutton-tests/playwright/whiteboard/whiteboard.spec.js
+++ b/bigbluebutton-tests/playwright/whiteboard/whiteboard.spec.js
@@ -1,5 +1,4 @@
const { test } = require('../fixtures');
-const { Draw } = require('./draw');
const { DrawRectangle } = require('./drawRectangle');
const { DrawEllipse } = require('./drawEllipse');
const { DrawTriangle } = require('./drawTriangle');
@@ -10,7 +9,6 @@ const { DrawStickyNote } = require('./drawStickyNote');
const { Pan } = require('./pan');
const { Eraser } = require('./eraser');
const { DrawArrow } = require('./drawArrow');
-const { MultiUsers } = require('../user/multiusers');
const { encodeCustomParams } = require('../parameters/util');
const { PARAMETER_HIDE_PRESENTATION_TOAST } = require('../core/constants');
const { DeleteDrawing } = require('./deleteDrawing');
@@ -22,7 +20,12 @@ const { ShapeOptions } = require('./shapeOptions');
const hidePresentationToast = encodeCustomParams(PARAMETER_HIDE_PRESENTATION_TOAST);
-test.describe.parallel('Whiteboard tools', { tag: '@ci' }, () => {
+//! @flaky note:
+// all whiteboard tests are flagged as flaky due to unexpected zooming slides
+// only avoiding those assertions won't be enough as most of the tests are relying only on snapshot comparisons
+// so together with the further fix + re-enablement of the tests, they will need to have non-snapshot assertions added as well
+// P.S. 1. the failures seems to be noticeable only on the CI
+test.describe.parallel('Whiteboard tools', { tag: ['@ci', '@flaky'] }, () => {
test.beforeEach(({ browserName }) => {
test.skip(browserName !== 'chromium',
'Drawing visual regression tests are enabled only for Chromium');