* Some extra work on voice channels interface * Fixing some TODOs * Improving styling of call in channel * Improve calls monitoring * Replacing some of the fontawesome icons with the compass ones * Improving the layout * Migrating to webrtc2 for unified plan * Add screen on and off behavior * Adding incall manager plugin * Moving everything into the products/calls folder * Make products modules routes relatives * Make products modules routes @mmproducts * Removing initiator parameter * Removing trickle parameter * Simplifying code * Removing underscore from private variables * Removing underscore from private things * More simplifications * More simplifications * More simplifications * Changing sha sum for mmjstool * Fixing typo * Migrating simple-peer to typescript * Migrating simple-peer to typescript * Improving the size of the screen share * Adding feature flag to disable the calls feature in mobile * Fixing some tests * Removing obsolte tests * Added call ended support for the post messages * Fixing some warnings in the tests * Adding JoinCall tests * Adding CallMessage tests * Adding CurrentCall unit tests * Adding CallAvatar unit tests * Adding FloatingCallContainer unit tests * Adding StartCall unit tests * Adding EnableDisableCalls unit tests * Adding CallDuration tests * Improving CallDuration tests * Adding CallScreen unit tests * Adding CallOtherActions screen tests * Fixing some dark theme styles * Fixing tests * More robustness around connecting/disconnecting * Adding FormattedRelativeTime tests * Adding tests for ChannelItem * Adding tests for ChannelInfo * Adding selectors tests * Adding reducers unit tests * Adding actions tests * Removing most of the TODOs * Removing another TODO * Updating tests snapshots * Removing the last TODO * Fixed a small problem on pressing while a call is ongoing * Remove all the inlined functions * Replacing usage of isLandscape selector with useWindowDimensions * Removed unnecesary makeStyleSheetFromTheme * Removing unneded properties from call_duration * Fixing possible null channels return from getChannel selector * Moving other inlined functions to its own constant * Simplifiying enable/disable calls component * Improving the behavior when you are in the call of the current channel * Adding missing translation strings * Simplified a bit the EnableDisableCalls component * Moving other inlined functions to its own constant * Updating snapshots * Improving usage of makeStyleSheetFromTheme * Moving data reformating from the rest client to the redux action * Adding calls to the blocklist to the redux-persist * Fixing tests * Updating snapshots * Update file icon name to the last compass icons version * Fix loading state * Only show the call connected if the websocket gets connected * Taking into consideration the indicator bar to position the calls new bars * Making the MoreMessagesButton component aware of calls components * Updating snapshots * Fixing tests * Updating snapshot * Fixing different use cases for start call channel menu * Fixing tests * Ask for confirmation to start a call when you are already in another call * Update app/products/calls/components/floating_call_container.tsx Co-authored-by: Elias Nahum <nahumhbl@gmail.com> * Memoizing userIds in join call * Applying suggestion around combine the blocklist for calls with the one for typing * Adding explicit types to the rest client * Removing unneeded permission * Making updateIntervalInSeconds prop optional in FormattedRelativeTime * Making updateIntervalInSeconds prop optional in CallDuration Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
62 lines
2.3 KiB
JavaScript
62 lines
2.3 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {shallow} from 'enzyme';
|
|
import moment from 'moment';
|
|
import React from 'react';
|
|
|
|
import FormattedRelativeTime from './formatted_relative_time';
|
|
|
|
jest.mock('react', () => ({
|
|
...jest.requireActual('react'),
|
|
useEffect: (f) => f(),
|
|
}));
|
|
|
|
describe('FormattedRelativeTime', () => {
|
|
const baseProps = {
|
|
value: moment.now() - 15000,
|
|
updateIntervalInSeconds: 10000,
|
|
};
|
|
|
|
test('should match snapshot', () => {
|
|
const wrapper = shallow(<FormattedRelativeTime {...baseProps}/>);
|
|
|
|
expect(wrapper.getElement()).toMatchSnapshot();
|
|
});
|
|
|
|
test('should match string in the past', () => {
|
|
const props = {...baseProps, value: moment.now() - ((10 * 60 * 60 * 1000) + (30 * 60 * 1000) + (25 * 1000) + 500)};
|
|
const wrapper = shallow(<FormattedRelativeTime {...props}/>);
|
|
|
|
expect(wrapper.getElement().props.children).toBe('11 hours ago');
|
|
});
|
|
|
|
test('should match string in the future', () => {
|
|
const props = {...baseProps, value: moment.now() + 15500};
|
|
const wrapper = shallow(<FormattedRelativeTime {...props}/>);
|
|
|
|
expect(wrapper.getElement().props.children).toBe('in a few seconds');
|
|
});
|
|
|
|
test('should re-render after updateIntervalInSeconds', () => {
|
|
jest.useFakeTimers();
|
|
const props = {...baseProps, value: moment.now(), updateIntervalInSeconds: 120};
|
|
const wrapper = shallow(<FormattedRelativeTime {...props}/>);
|
|
expect(wrapper.getElement().props.children).toBe('a few seconds ago');
|
|
jest.advanceTimersByTime(60000);
|
|
expect(wrapper.getElement().props.children).toBe('a few seconds ago');
|
|
jest.advanceTimersByTime(120000);
|
|
expect(wrapper.getElement().props.children).toBe('2 minutes ago');
|
|
jest.useRealTimers();
|
|
});
|
|
|
|
test('should not re-render if updateIntervalInSeconds is not passed', () => {
|
|
jest.useFakeTimers();
|
|
const props = {value: baseProps.value};
|
|
const wrapper = shallow(<FormattedRelativeTime {...props}/>);
|
|
expect(wrapper.getElement().props.children).toBe('a few seconds ago');
|
|
jest.advanceTimersByTime(120000000000);
|
|
expect(wrapper.getElement().props.children).toBe('a few seconds ago');
|
|
jest.useRealTimers();
|
|
});
|
|
});
|