// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import Clipboard from '@react-native-clipboard/clipboard';
import {fireEvent} from '@testing-library/react-native';
import React from 'react';
import {SNACK_BAR_TYPE} from '@constants/snack_bar';
import {renderWithIntl} from '@test/intl-test-helper';
import {metadataToString} from '@utils/share_logs';
import {showSnackBar} from '@utils/snack_bar';
import CopyMetadata from './copy_metadata';
jest.mock('@react-native-clipboard/clipboard', () => ({
setString: jest.fn(),
}));
jest.mock('@utils/snack_bar', () => ({
showSnackBar: jest.fn(),
}));
describe('screens/report_a_problem/copy_metadata', () => {
const metadata = {
currentUserId: 'user1',
currentTeamId: 'team1',
serverVersion: '7.8.0',
appVersion: '2.0.0',
appPlatform: 'ios',
};
const componentId = 'ReportProblem';
beforeEach(() => {
jest.clearAllMocks();
});
it('renders all metadata fields', () => {
const {getByText} = renderWithIntl(
,
);
// Check title
expect(getByText('METADATA:')).toBeTruthy();
// Check each metadata field is displayed
expect(getByText('Current User ID: user1')).toBeTruthy();
expect(getByText('Current Team ID: team1')).toBeTruthy();
expect(getByText('Server Version: 7.8.0')).toBeTruthy();
expect(getByText('App Version: 2.0.0')).toBeTruthy();
expect(getByText('App Platform: ios')).toBeTruthy();
});
it('copies metadata to clipboard when copy button is pressed', () => {
const {getByText} = renderWithIntl(
,
);
const copyButton = getByText('Copy');
fireEvent.press(copyButton);
expect(Clipboard.setString).toHaveBeenCalledWith(
metadataToString(metadata),
);
expect(showSnackBar).toHaveBeenCalledWith({
barType: SNACK_BAR_TYPE.INFO_COPIED,
sourceScreen: componentId,
});
});
it('handles empty metadata', () => {
const emptyMetadata = {
currentUserId: '',
currentTeamId: '',
serverVersion: '',
appVersion: '',
appPlatform: '',
};
const {getByText} = renderWithIntl(
,
);
// Check that empty values are displayed correctly
expect(getByText('Current User ID: ')).toBeTruthy();
expect(getByText('Current Team ID: ')).toBeTruthy();
expect(getByText('Server Version: ')).toBeTruthy();
expect(getByText('App Version: ')).toBeTruthy();
expect(getByText('App Platform: ')).toBeTruthy();
const copyButton = getByText('Copy');
fireEvent.press(copyButton);
expect(Clipboard.setString).toHaveBeenCalledWith(
metadataToString(emptyMetadata),
);
expect(showSnackBar).toHaveBeenCalledWith({
barType: SNACK_BAR_TYPE.INFO_COPIED,
sourceScreen: componentId,
});
});
});