|
1 |
| -import { generateMessage } from '../../../mock-builders'; |
| 1 | +import { generateFileAttachment, generateMessage, generateUser } from '../../../mock-builders'; |
2 | 2 |
|
3 |
| -import { makeDateMessageId, processMessages } from '../utils'; |
| 3 | +import { getGroupStyles, makeDateMessageId, processMessages } from '../utils'; |
4 | 4 | import { CUSTOM_MESSAGE_TYPE } from '../../../constants/messageTypes';
|
5 | 5 |
|
6 | 6 | const mockedNanoId = 'V1StGXR8_Z5jdHi6B-myT';
|
@@ -421,3 +421,204 @@ describe('processMessages', () => {
|
421 | 421 | });
|
422 | 422 | });
|
423 | 423 | });
|
| 424 | + |
| 425 | +describe('getGroupStyles', () => { |
| 426 | + const user = generateUser(); |
| 427 | + let message; |
| 428 | + let previousMessage; |
| 429 | + let nextMessage; |
| 430 | + let noGroupByUser; |
| 431 | + beforeEach(() => { |
| 432 | + message = generateMessage({ created_at: new Date(2), user }); |
| 433 | + previousMessage = generateMessage({ created_at: new Date(1), user }); |
| 434 | + nextMessage = generateMessage({ created_at: new Date(100), user }); |
| 435 | + noGroupByUser = false; |
| 436 | + }); |
| 437 | + |
| 438 | + describe.each([ |
| 439 | + ['bottom', 'next'], |
| 440 | + ['top', 'previous'], |
| 441 | + ])('marks a message as %s when %s message', (position) => { |
| 442 | + it('does not exist', () => { |
| 443 | + if (position === 'bottom') { |
| 444 | + nextMessage = undefined; |
| 445 | + } |
| 446 | + if (position === 'top') { |
| 447 | + previousMessage = undefined; |
| 448 | + } |
| 449 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 450 | + }); |
| 451 | + |
| 452 | + it('is intro message', () => { |
| 453 | + if (position === 'bottom') { |
| 454 | + nextMessage = { ...nextMessage, customType: CUSTOM_MESSAGE_TYPE.intro }; |
| 455 | + } |
| 456 | + if (position === 'top') { |
| 457 | + previousMessage = { ...previousMessage, customType: CUSTOM_MESSAGE_TYPE.intro }; |
| 458 | + } |
| 459 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 460 | + }); |
| 461 | + |
| 462 | + it('is date message', () => { |
| 463 | + if (position === 'bottom') { |
| 464 | + nextMessage = { ...nextMessage, customType: CUSTOM_MESSAGE_TYPE.date }; |
| 465 | + } |
| 466 | + if (position === 'top') { |
| 467 | + previousMessage = { ...previousMessage, customType: CUSTOM_MESSAGE_TYPE.date }; |
| 468 | + } |
| 469 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 470 | + }); |
| 471 | + |
| 472 | + it('is a system message', () => { |
| 473 | + if (position === 'bottom') { |
| 474 | + nextMessage = { ...nextMessage, type: 'system' }; |
| 475 | + } |
| 476 | + if (position === 'top') { |
| 477 | + previousMessage = { ...previousMessage, type: 'system' }; |
| 478 | + } |
| 479 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 480 | + }); |
| 481 | + |
| 482 | + it('is an error message', () => { |
| 483 | + if (position === 'bottom') { |
| 484 | + nextMessage = { ...nextMessage, type: 'error' }; |
| 485 | + } |
| 486 | + if (position === 'top') { |
| 487 | + previousMessage = { ...previousMessage, type: 'error' }; |
| 488 | + } |
| 489 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 490 | + }); |
| 491 | + |
| 492 | + it('has attachments', () => { |
| 493 | + if (position === 'bottom') { |
| 494 | + nextMessage = { ...nextMessage, attachments: [generateFileAttachment()] }; |
| 495 | + } |
| 496 | + if (position === 'top') { |
| 497 | + previousMessage = { ...previousMessage, attachments: [generateFileAttachment()] }; |
| 498 | + } |
| 499 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 500 | + }); |
| 501 | + |
| 502 | + it('is posted by another user', () => { |
| 503 | + const user = generateUser({ id: 'XX' }); |
| 504 | + if (position === 'bottom') { |
| 505 | + nextMessage = { ...nextMessage, user }; |
| 506 | + } |
| 507 | + if (position === 'top') { |
| 508 | + previousMessage = { ...previousMessage, user }; |
| 509 | + } |
| 510 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 511 | + }); |
| 512 | + |
| 513 | + it('is deleted', () => { |
| 514 | + if (position === 'bottom') { |
| 515 | + nextMessage = { ...nextMessage, deleted_at: new Date() }; |
| 516 | + } |
| 517 | + if (position === 'top') { |
| 518 | + previousMessage = { ...previousMessage, deleted_at: new Date() }; |
| 519 | + } |
| 520 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe(position); |
| 521 | + }); |
| 522 | + }); |
| 523 | + |
| 524 | + it('marks a message as bottom when the message is edited', () => { |
| 525 | + message = { ...message, message_text_updated_at: new Date() }; |
| 526 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('bottom'); |
| 527 | + }); |
| 528 | + |
| 529 | + it('marks a message as top when the previous message is edited', () => { |
| 530 | + previousMessage = { ...previousMessage, message_text_updated_at: new Date() }; |
| 531 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('top'); |
| 532 | + }); |
| 533 | + |
| 534 | + it('marks a message a top if it has reactions', () => { |
| 535 | + message = { ...message, reaction_groups: { X: 'Y' } }; |
| 536 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('top'); |
| 537 | + }); |
| 538 | + |
| 539 | + it('marks a message a bottom if next message has reactions', () => { |
| 540 | + nextMessage = { ...nextMessage, reaction_groups: { X: 'Y' } }; |
| 541 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('bottom'); |
| 542 | + }); |
| 543 | + |
| 544 | + it('marks a message as top when next message is created later than maxTimeBetweenGroupedMessages milliseconds', () => { |
| 545 | + const maxTimeBetweenGroupedMessages = 10; |
| 546 | + expect( |
| 547 | + getGroupStyles( |
| 548 | + message, |
| 549 | + previousMessage, |
| 550 | + nextMessage, |
| 551 | + noGroupByUser, |
| 552 | + maxTimeBetweenGroupedMessages, |
| 553 | + ), |
| 554 | + ).toBe('bottom'); |
| 555 | + }); |
| 556 | + |
| 557 | + it('marks a message as bottom when next message is created later than maxTimeBetweenGroupedMessages milliseconds', () => { |
| 558 | + const maxTimeBetweenGroupedMessages = 10; |
| 559 | + message = { ...message, created_at: new Date(12) }; |
| 560 | + nextMessage = { ...nextMessage, created_at: new Date(14) }; |
| 561 | + expect( |
| 562 | + getGroupStyles( |
| 563 | + message, |
| 564 | + previousMessage, |
| 565 | + nextMessage, |
| 566 | + noGroupByUser, |
| 567 | + maxTimeBetweenGroupedMessages, |
| 568 | + ), |
| 569 | + ).toBe('top'); |
| 570 | + }); |
| 571 | + |
| 572 | + it('marks a message as single when next and previous message is created later than maxTimeBetweenGroupedMessages milliseconds', () => { |
| 573 | + const maxTimeBetweenGroupedMessages = 10; |
| 574 | + message = { ...message, created_at: new Date(12) }; |
| 575 | + expect( |
| 576 | + getGroupStyles( |
| 577 | + message, |
| 578 | + previousMessage, |
| 579 | + nextMessage, |
| 580 | + noGroupByUser, |
| 581 | + maxTimeBetweenGroupedMessages, |
| 582 | + ), |
| 583 | + ).toBe('single'); |
| 584 | + }); |
| 585 | + |
| 586 | + it('marks a message as middle when next message is created earlier than maxTimeBetweenGroupedMessages milliseconds', () => { |
| 587 | + const maxTimeBetweenGroupedMessages = 1000; |
| 588 | + expect( |
| 589 | + getGroupStyles( |
| 590 | + message, |
| 591 | + previousMessage, |
| 592 | + nextMessage, |
| 593 | + noGroupByUser, |
| 594 | + maxTimeBetweenGroupedMessages, |
| 595 | + ), |
| 596 | + ).toBe('middle'); |
| 597 | + }); |
| 598 | + |
| 599 | + it('marks message as middle if not being top, neither bottom message', () => { |
| 600 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('middle'); |
| 601 | + }); |
| 602 | + |
| 603 | + it('marks message as single if not being top, neither bottom message being deleted', () => { |
| 604 | + message = { ...message, deleted_at: new Date() }; |
| 605 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('single'); |
| 606 | + }); |
| 607 | + |
| 608 | + it('marks message as single if not being top, neither bottom message being error message', () => { |
| 609 | + message = { ...message, type: 'error' }; |
| 610 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('single'); |
| 611 | + }); |
| 612 | + |
| 613 | + it('marks message at the bottom as single being deleted message', () => { |
| 614 | + message = { ...message, deleted_at: new Date() }; |
| 615 | + nextMessage = undefined; |
| 616 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('single'); |
| 617 | + }); |
| 618 | + |
| 619 | + it('marks message at the bottom as single being error message', () => { |
| 620 | + message = { ...message, type: 'error' }; |
| 621 | + nextMessage = undefined; |
| 622 | + expect(getGroupStyles(message, previousMessage, nextMessage, noGroupByUser)).toBe('single'); |
| 623 | + }); |
| 624 | +}); |
0 commit comments