|
1 | 1 | import { generateFileAttachment, generateMessage, generateUser } from '../../../mock-builders';
|
2 | 2 |
|
3 |
| -import { getGroupStyles, makeDateMessageId, processMessages } from '../utils'; |
| 3 | +import { getGroupStyles, getReadStates, makeDateMessageId, processMessages } from '../utils'; |
4 | 4 | import { CUSTOM_MESSAGE_TYPE } from '../../../constants/messageTypes';
|
5 | 5 |
|
6 | 6 | const mockedNanoId = 'V1StGXR8_Z5jdHi6B-myT';
|
@@ -622,3 +622,73 @@ describe('getGroupStyles', () => {
|
622 | 622 | expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('single');
|
623 | 623 | });
|
624 | 624 | });
|
| 625 | + |
| 626 | +describe('getReadStates', () => { |
| 627 | + const messages = [ |
| 628 | + generateMessage({ |
| 629 | + created_at: new Date('2024-05-21T17:57:31.9876Z'), |
| 630 | + id: 'u49866124-uJx-xdCYq0zQ9r5VTuJFH', |
| 631 | + }), |
| 632 | + generateMessage({ |
| 633 | + created_at: new Date('2024-05-21T17:57:32.9876Z'), |
| 634 | + id: 'u49866124-uJx-xdCYq0zQ9r5VTuJFV', |
| 635 | + }), |
| 636 | + generateMessage({ |
| 637 | + created_at: new Date('2024-07-24T22:49:35.527Z'), |
| 638 | + id: 'u49866124-uJx-xdCYq0zQ9r5VTuJFY', |
| 639 | + }), |
| 640 | + ]; |
| 641 | + const read = { |
| 642 | + user1: { |
| 643 | + last_read: new Date('2024-05-21T17:20:29.402Z'), |
| 644 | + last_read_message_id: undefined, |
| 645 | + user: { id: 'user1' }, |
| 646 | + }, |
| 647 | + user2: { |
| 648 | + last_read: new Date('2024-07-24T22:49:36.527Z'), |
| 649 | + last_read_message_id: 'u96661092-14eb8ca1-a04c-4098-1d96-b1313d0b794b', |
| 650 | + user: { id: 'user2' }, |
| 651 | + }, |
| 652 | + user3: { |
| 653 | + last_read: '2024-05-21T17:40:57.794Z', |
| 654 | + last_read_message_id: 'user7-dcad8dbd-f234-469e-2a46-bd8405beabb7', |
| 655 | + user: { id: 'user3' }, |
| 656 | + }, |
| 657 | + user5: { |
| 658 | + last_read: undefined, |
| 659 | + last_read_message_id: undefined, |
| 660 | + user: { id: 'user5' }, |
| 661 | + }, |
| 662 | + user6: { |
| 663 | + last_read: undefined, |
| 664 | + last_read_message_id: 'u49866124-uJx-xdCYq0zQ9r5VTuJFH', |
| 665 | + user: { id: 'user6' }, |
| 666 | + }, |
| 667 | + user7: { |
| 668 | + last_read: new Date('2024-05-21T17:59:04.911Z'), |
| 669 | + last_read_message_id: 'u49866124-uJx-xdCYq0zQ9r5VTuJFH', |
| 670 | + user: { id: 'user7' }, |
| 671 | + }, |
| 672 | + user8: { |
| 673 | + last_read: new Date('2024-06-24T23:00:12.391Z'), |
| 674 | + last_read_message_id: 'u49866124-73190b61-adf7-4e99-0779-565f22239e36', |
| 675 | + user: undefined, |
| 676 | + }, |
| 677 | + }; |
| 678 | + |
| 679 | + it('returns the list of message readers based on last_read timestamp only for the last read message by user', () => { |
| 680 | + expect(getReadStates(messages, read)).toStrictEqual({ |
| 681 | + 'u49866124-uJx-xdCYq0zQ9r5VTuJFV': [{ id: 'user7' }, undefined], |
| 682 | + 'u49866124-uJx-xdCYq0zQ9r5VTuJFY': [{ id: 'user2' }], |
| 683 | + }); |
| 684 | + }); |
| 685 | + |
| 686 | + it("lists the user for each message that was created before the user's last_read timestamp", () => { |
| 687 | + const returnAllReadData = true; |
| 688 | + expect(getReadStates(messages, read, returnAllReadData)).toStrictEqual({ |
| 689 | + 'u49866124-uJx-xdCYq0zQ9r5VTuJFH': [{ id: 'user2' }, { id: 'user7' }, undefined], |
| 690 | + 'u49866124-uJx-xdCYq0zQ9r5VTuJFV': [{ id: 'user2' }, { id: 'user7' }, undefined], |
| 691 | + 'u49866124-uJx-xdCYq0zQ9r5VTuJFY': [{ id: 'user2' }], |
| 692 | + }); |
| 693 | + }); |
| 694 | +}); |
0 commit comments