mirror of
https://github.com/RocketChat/Rocket.Chat.git
synced 2025-12-28 06:47:25 +00:00
fix: License validations for federated rooms (#37523)
This commit is contained in:
parent
cbc0953fd6
commit
6264e1cfd7
5
.changeset/lemon-garlics-check.md
Normal file
5
.changeset/lemon-garlics-check.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
"@rocket.chat/meteor": patch
|
||||
---
|
||||
|
||||
Fixes license add-on validations for federated rooms
|
||||
@ -8,7 +8,6 @@ import ComposerAnonymous from './ComposerAnonymous';
|
||||
import ComposerArchived from './ComposerArchived';
|
||||
import ComposerBlocked from './ComposerBlocked';
|
||||
import ComposerFederation from './ComposerFederation';
|
||||
import ComposerFederationInvalidVersion from './ComposerFederation/ComposerFederationInvalidVersion';
|
||||
import ComposerJoinWithPassword from './ComposerJoinWithPassword';
|
||||
import type { ComposerMessageProps } from './ComposerMessage';
|
||||
import ComposerMessage from './ComposerMessage';
|
||||
@ -57,11 +56,7 @@ const ComposerContainer = ({ children, ...props }: ComposerMessageProps): ReactE
|
||||
}
|
||||
|
||||
if (isFederation) {
|
||||
if (isFederationBlocked) {
|
||||
return <ComposerFederationInvalidVersion />;
|
||||
}
|
||||
|
||||
return <ComposerFederation {...props} />;
|
||||
return <ComposerFederation blocked={isFederationBlocked} {...props} />;
|
||||
}
|
||||
|
||||
if (isAnonymous) {
|
||||
|
||||
@ -0,0 +1,62 @@
|
||||
import type { LicenseModule } from '@rocket.chat/core-typings';
|
||||
import { mockAppRoot } from '@rocket.chat/mock-providers';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import type { ReactNode } from 'react';
|
||||
|
||||
import ComposerFederation from './ComposerFederation';
|
||||
import FakeRoomProvider from '../../../../../tests/mocks/client/FakeRoomProvider';
|
||||
import { createFakeLicenseInfo } from '../../../../../tests/mocks/data';
|
||||
|
||||
jest.mock('../ComposerMessage', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children }: { children: ReactNode }) => <div data-testid='composer-message'>{children}</div>,
|
||||
}));
|
||||
|
||||
const appRoot = ({ enabled = true, activeModules = ['federation'] }: { enabled?: boolean; activeModules?: LicenseModule[] } = {}) =>
|
||||
mockAppRoot()
|
||||
.withJohnDoe()
|
||||
.withTranslations('en', 'core', {
|
||||
Federation_Matrix_Federated_Description_disabled: 'Federation is currently disabled on this workspace',
|
||||
Federation_Matrix_join_public_rooms_is_premium: 'Join federated rooms is a Premium feature',
|
||||
Federation_Matrix_Federated_Description_invalid_version:
|
||||
'This room was created by an old Federation version and its blocked indeterminately. <1>Click here</1> for more information about Matrix Federation support',
|
||||
})
|
||||
.withSetting('Federation_Matrix_enabled', enabled ?? true)
|
||||
.withEndpoint('GET', '/v1/licenses.info', () => ({
|
||||
license: createFakeLicenseInfo({ activeModules }),
|
||||
}))
|
||||
.wrap((children) => <FakeRoomProvider>{children}</FakeRoomProvider>)
|
||||
.build();
|
||||
|
||||
describe('ComposerFederation', () => {
|
||||
it('should display blocked composer if federation version is invalid', () => {
|
||||
render(<ComposerFederation blocked />, {
|
||||
wrapper: appRoot(),
|
||||
});
|
||||
|
||||
expect(screen.getByText(/This room was created by an old Federation version and its blocked indeterminately/)).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should display disabled composer if federation is disabled', () => {
|
||||
render(<ComposerFederation />, {
|
||||
wrapper: appRoot({ enabled: false }),
|
||||
});
|
||||
|
||||
expect(screen.getByText('Federation is currently disabled on this workspace')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should display disabled composer with premium message if federation addon is missing', () => {
|
||||
render(<ComposerFederation />, {
|
||||
wrapper: appRoot({ activeModules: [] }),
|
||||
});
|
||||
|
||||
expect(screen.getByText('Join federated rooms is a Premium feature')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should display normal composer if federation is enabled and valid', async () => {
|
||||
render(<ComposerFederation />, { wrapper: appRoot() });
|
||||
|
||||
const composer = await screen.findByTestId('composer-message');
|
||||
expect(composer).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@ -4,18 +4,27 @@ import { useHasLicenseModule } from '../../../../hooks/useHasLicenseModule';
|
||||
import type { ComposerMessageProps } from '../ComposerMessage';
|
||||
import ComposerMessage from '../ComposerMessage';
|
||||
import ComposerFederationDisabled from './ComposerFederationDisabled';
|
||||
import ComposerFederationInvalidVersion from './ComposerFederationInvalidVersion';
|
||||
import ComposerFederationJoinRoomDisabled from './ComposerFederationJoinRoomDisabled';
|
||||
import { useIsFederationEnabled } from '../../../../hooks/useIsFederationEnabled';
|
||||
|
||||
const ComposerFederation = ({ subscription, children, ...props }: ComposerMessageProps): ReactElement => {
|
||||
type ComposerFederationProps = ComposerMessageProps & {
|
||||
blocked?: boolean;
|
||||
};
|
||||
|
||||
const ComposerFederation = ({ children, blocked, ...props }: ComposerFederationProps): ReactElement => {
|
||||
const federationEnabled = useIsFederationEnabled();
|
||||
const { data: federationModuleEnabled = false } = useHasLicenseModule('federation');
|
||||
|
||||
if (blocked) {
|
||||
return <ComposerFederationInvalidVersion />;
|
||||
}
|
||||
|
||||
if (!federationEnabled) {
|
||||
return <ComposerFederationDisabled />;
|
||||
}
|
||||
|
||||
if (!subscription && !federationModuleEnabled) {
|
||||
if (!federationModuleEnabled) {
|
||||
return <ComposerFederationJoinRoomDisabled />;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user