* Ensure onAppStateChange runs only after GlobalEventHandler is configured (#3268) * Updated Info.plist with new bluetooth usage description key (#3275) * Call scrollToIndex only when ref is set and index is in range (#3285) * Update ios/Mattermost/Info.plist Co-Authored-By: Elias Nahum <nahumhbl@gmail.com> * Null check on current (#3309) * Null check on current * Null check on current * [MM-18779] Reset moment local on logout (#3310) * Reset moment local on logout * Update app/selectors/i18n.js Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
89 lines
3.3 KiB
JavaScript
89 lines
3.3 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import configureMockStore from 'redux-mock-store';
|
|
import thunk from 'redux-thunk';
|
|
|
|
import intitialState from 'app/initial_state';
|
|
import PushNotification from 'app/push_notifications';
|
|
import * as I18n from 'app/i18n';
|
|
|
|
import GlobalEventHandler from './global_event_handler';
|
|
|
|
jest.mock('app/init/credentials', () => ({
|
|
getCurrentServerUrl: jest.fn().mockResolvedValue(''),
|
|
getAppCredentials: jest.fn(),
|
|
removeAppCredentials: jest.fn(),
|
|
}));
|
|
|
|
jest.mock('app/utils/error_handling', () => ({
|
|
default: {
|
|
initializeErrorHandling: jest.fn(),
|
|
},
|
|
}));
|
|
|
|
jest.mock('react-native-notifications', () => ({
|
|
addEventListener: jest.fn(),
|
|
cancelAllLocalNotifications: jest.fn(),
|
|
setBadgesCount: jest.fn(),
|
|
NotificationAction: jest.fn(),
|
|
NotificationCategory: jest.fn(),
|
|
}));
|
|
|
|
const mockStore = configureMockStore([thunk]);
|
|
const store = mockStore(intitialState);
|
|
GlobalEventHandler.store = store;
|
|
|
|
// TODO: Add Android test as part of https://mattermost.atlassian.net/browse/MM-17110
|
|
describe('GlobalEventHandler', () => {
|
|
it('should clear notifications and reset moment locale on logout', async () => {
|
|
const clearNotifications = jest.spyOn(PushNotification, 'clearNotifications');
|
|
const resetMomentLocale = jest.spyOn(I18n, 'resetMomentLocale');
|
|
|
|
await GlobalEventHandler.onLogout();
|
|
expect(clearNotifications).toHaveBeenCalled();
|
|
expect(resetMomentLocale).toHaveBeenCalledWith();
|
|
});
|
|
|
|
it('should call onAppStateChange after configuration', () => {
|
|
const onAppStateChange = jest.spyOn(GlobalEventHandler, 'onAppStateChange');
|
|
|
|
GlobalEventHandler.configure({store});
|
|
expect(GlobalEventHandler.store).not.toBeNull();
|
|
expect(onAppStateChange).toHaveBeenCalledWith('active');
|
|
});
|
|
|
|
it('should handle onAppStateChange to active if the store set', () => {
|
|
const appActive = jest.spyOn(GlobalEventHandler, 'appActive');
|
|
const appInactive = jest.spyOn(GlobalEventHandler, 'appInactive');
|
|
expect(GlobalEventHandler.store).not.toBeNull();
|
|
|
|
GlobalEventHandler.onAppStateChange('active');
|
|
expect(appActive).toHaveBeenCalled();
|
|
expect(appInactive).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should handle onAppStateChange to background if the store set', () => {
|
|
const appActive = jest.spyOn(GlobalEventHandler, 'appActive');
|
|
const appInactive = jest.spyOn(GlobalEventHandler, 'appInactive');
|
|
expect(GlobalEventHandler.store).not.toBeNull();
|
|
|
|
GlobalEventHandler.onAppStateChange('background');
|
|
expect(appActive).not.toHaveBeenCalled();
|
|
expect(appInactive).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should not handle onAppStateChange if the store is not set', () => {
|
|
const appActive = jest.spyOn(GlobalEventHandler, 'appActive');
|
|
const appInactive = jest.spyOn(GlobalEventHandler, 'appInactive');
|
|
GlobalEventHandler.store = null;
|
|
|
|
GlobalEventHandler.onAppStateChange('active');
|
|
expect(appActive).not.toHaveBeenCalled();
|
|
expect(appInactive).not.toHaveBeenCalled();
|
|
|
|
GlobalEventHandler.onAppStateChange('background');
|
|
expect(appActive).not.toHaveBeenCalled();
|
|
expect(appInactive).not.toHaveBeenCalled();
|
|
});
|
|
});
|