mattermost-mobile/app/actions/remote/terms_of_service.test.ts

92 lines
3.2 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import DatabaseManager from '@database/manager';
import NetworkManager from '@managers/network_manager';
import {getCurrentUser} from '@queries/servers/user';
import {fetchTermsOfService, updateTermsOfServiceStatus} from './terms_of_service';
const serverUrl = 'terms-of-service.test.com';
const mockTerms: TermsOfService = {
create_at: 1234567890,
id: 'terms123',
text: 'Test Terms of Service',
user_id: 'user123',
};
const mockClient = {
getTermsOfService: jest.fn(),
updateMyTermsOfServiceStatus: jest.fn(),
} as any;
jest.mock('@queries/servers/user');
describe('terms_of_service', () => {
beforeEach(async () => {
NetworkManager.getClient = () => mockClient;
await DatabaseManager.init([serverUrl]);
jest.clearAllMocks();
});
afterEach(async () => {
await DatabaseManager.destroyServerDatabase(serverUrl);
});
describe('fetchTermsOfService', () => {
it('should fetch terms of service successfully', async () => {
mockClient.getTermsOfService.mockResolvedValueOnce(mockTerms);
const result = await fetchTermsOfService(serverUrl);
expect(result.terms).toBeDefined();
expect(result.terms).toEqual(mockTerms);
expect(mockClient.getTermsOfService).toHaveBeenCalledTimes(1);
});
it('should handle fetch error', async () => {
const error = new Error('Network error');
mockClient.getTermsOfService.mockRejectedValueOnce(error);
const result = await fetchTermsOfService(serverUrl);
expect(result.error).toBeDefined();
expect(result.terms).toBeUndefined();
expect(mockClient.getTermsOfService).toHaveBeenCalledTimes(1);
});
});
describe('updateTermsOfServiceStatus', () => {
const mockGetCurrentUser = jest.mocked(getCurrentUser);
const mockUser = {
id: 'user123',
prepareUpdate: jest.fn((fn) => fn({})),
} as any;
it('should update terms of service status successfully', async () => {
mockGetCurrentUser.mockResolvedValue(mockUser);
const termsId = 'terms123';
const accepted = true;
const mockResponse = {status: 'ok'};
mockClient.updateMyTermsOfServiceStatus.mockResolvedValueOnce(mockResponse);
const result = await updateTermsOfServiceStatus(serverUrl, termsId, accepted);
expect(result.resp).toEqual(mockResponse);
expect(mockClient.updateMyTermsOfServiceStatus).toHaveBeenCalledWith(termsId, accepted);
expect(mockUser.prepareUpdate).toHaveBeenCalled();
});
it('should handle update error', async () => {
const error = new Error('Network error');
mockClient.updateMyTermsOfServiceStatus.mockRejectedValueOnce(error);
const result = await updateTermsOfServiceStatus(serverUrl, 'terms123', true);
expect(result.error).toBeDefined();
expect(result.resp).toBeUndefined();
expect(mockClient.updateMyTermsOfServiceStatus).toHaveBeenCalledTimes(1);
});
});
});