diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index b50996c186..ac9c8eba4d 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -23,64 +23,97 @@ function mockPinnedEvent( }); } +// Helper function that renders a component to a plain text string. +// Once snapshots are introduced in tests, this function will no longer be necessary, +// and should be replaced with snapshots. +function renderComponent(component): string { + const serializeObject = (object): string => { + if (typeof object === 'string') { + return object === ' ' ? '' : object; + } + + if (Array.isArray(object) && object.length === 1 && typeof object[0] === 'string') { + return object[0]; + } + + if (object['type'] !== undefined && typeof object['children'] !== undefined) { + return serializeObject(object.children); + } + + if (!Array.isArray(object)) { + return ''; + } + + return object.map(child => { + return serializeObject(child); + }).join(''); + }; + + return serializeObject(component.toJSON()); +} + describe('TextForEvent', () => { describe("TextForPinnedEvent", () => { SettingsStore.setValue("feature_pinning", null, SettingLevel.DEVICE, true); it("mentions message when a single message was pinned, with no previously pinned messages", () => { const event = mockPinnedEvent(['message-1']); - expect(textForEvent(event)).toBe( - "@foo:example.com pinned a message to this room. See all pinned messages.", - ); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com pinned a message to this room. See all pinned messages."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); it("mentions message when a single message was pinned, with multiple previously pinned messages", () => { const event = mockPinnedEvent(['message-3'], ['message-1', 'message-2']); - expect(textForEvent(event)).toBe( - "@foo:example.com pinned a message to this room. See all pinned messages.", - ); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com pinned a message to this room. See all pinned messages."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); it("shows generic text when multiple messages were pinned", () => { const event = mockPinnedEvent(['message-1', 'message-2', 'message-3'], ['message-1']); - expect(textForEvent(event)).toBe("@foo:example.com changed the pinned messages for the room."); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com changed the pinned messages for the room."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); it("mentions message when a single message was unpinned, with a single message previously pinned", () => { const event = mockPinnedEvent([], ['message-1']); - expect(textForEvent(event)).toBe( - "@foo:example.com unpinned a message from this room. See all pinned messages.", - ); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com unpinned a message from this room. See all pinned messages."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); it("mentions message when a single message was unpinned, with multiple previously pinned messages", () => { const event = mockPinnedEvent(['message-2'], ['message-1', 'message-2']); - expect(textForEvent(event)).toBe( - "@foo:example.com unpinned a message from this room. See all pinned messages.", - ); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com unpinned a message from this room. See all pinned messages."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); it("shows generic text when multiple messages were unpinned", () => { const event = mockPinnedEvent(['message-3'], ['message-1', 'message-2', 'message-3']); - expect(textForEvent(event)).toBe("@foo:example.com changed the pinned messages for the room."); - + const plainText = textForEvent(event); const component = renderer.create(textForEvent(event, true)); - expect(component.toJSON()).toMatchSnapshot(); + + const expectedText = "@foo:example.com changed the pinned messages for the room."; + expect(plainText).toBe(expectedText); + expect(renderComponent(component)).toBe(expectedText); }); }); }); diff --git a/test/__snapshots__/TextForEvent-test.ts.snap b/test/__snapshots__/TextForEvent-test.ts.snap deleted file mode 100644 index 2b73dbeb3d..0000000000 --- a/test/__snapshots__/TextForEvent-test.ts.snap +++ /dev/null @@ -1,113 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`TextForEvent TextForPinnedEvent mentions message when a single message was pinned, with multiple previously pinned messages 1`] = ` - - - @foo:example.com pinned - - a message - - to this room. See all - - pinned messages - - . - - -`; - -exports[`TextForEvent TextForPinnedEvent mentions message when a single message was pinned, with no previously pinned messages 1`] = ` - - - @foo:example.com pinned - - a message - - to this room. See all - - pinned messages - - . - - -`; - -exports[`TextForEvent TextForPinnedEvent mentions message when a single message was unpinned, with a single message previously pinned 1`] = ` - - - @foo:example.com unpinned - - a message - - from this room. See all - - pinned messages - - . - - -`; - -exports[`TextForEvent TextForPinnedEvent mentions message when a single message was unpinned, with multiple previously pinned messages 1`] = ` - - - @foo:example.com unpinned - - a message - - from this room. See all - - pinned messages - - . - - -`; - -exports[`TextForEvent TextForPinnedEvent shows generic text when multiple messages were pinned 1`] = ` - - - @foo:example.com changed the - - - pinned messages - - - for the room. - - -`; - -exports[`TextForEvent TextForPinnedEvent shows generic text when multiple messages were unpinned 1`] = ` - - - @foo:example.com changed the - - - pinned messages - - - for the room. - - -`;