From 58f504e34fe5c37056c4e74ed8204bd0d10cb994 Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Fri, 28 Oct 2022 15:52:57 +0300
Subject: Merge Jest configuration from Next version
---
vnext/src/ui/__tests__/MessageInput-test.js | 101 ----------------------------
vnext/src/ui/__tests__/MessageInput.test.js | 46 +++++++++++++
2 files changed, 46 insertions(+), 101 deletions(-)
delete mode 100644 vnext/src/ui/__tests__/MessageInput-test.js
create mode 100644 vnext/src/ui/__tests__/MessageInput.test.js
(limited to 'vnext/src/ui')
diff --git a/vnext/src/ui/__tests__/MessageInput-test.js b/vnext/src/ui/__tests__/MessageInput-test.js
deleted file mode 100644
index 12b85bca..00000000
--- a/vnext/src/ui/__tests__/MessageInput-test.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * @jest-environment jsdom
- */
-
-import { create, act } from 'react-test-renderer';
-
-import MessageInput from '../MessageInput';
-
-const testMessage = {
- mid: 1,
- rid: 0,
- body: 'test message',
- timestamp: new Date().toISOString(),
- attach: '',
- to: {}
-};
-
-window.matchMedia = window.matchMedia || function() {
- return {
- matches: true,
- addListener: function() { },
- removeListener: function() { }
- };
-};
-
-function createMessageInput(data, onFocus, onSend, draft) {
- return create(, {
- createNodeMock: (element) => {
- if (element.type === 'textarea') {
- // mock a focus function
- return {
- focus: onFocus,
- style: {}
- };
- }
- return null;
- }
- });
-}
-
-it('Gives immediate focus on to textarea on load', () => {
- let focused = false;
- act(() => {
- createMessageInput(testMessage, () => {
- focused = true;
- }, () => { });
- });
- expect(focused).toEqual(true, 'textarea was not focused');
-});
-
-
-it('Submits on ctrl-enter', () => {
- const onSend = jest.fn();
- var messageInput = null;
- act(() => {
- messageInput = createMessageInput(testMessage, () => {}, onSend);
- });
- let textarea = messageInput.root.findByType('textarea');
- act(() => {
-
- textarea.props.onKeyPress({
- charCode: 13,
- which: 13,
- keyCode: 13,
- ctrlKey: false
- });
- });
- expect(onSend).toHaveBeenCalledTimes(0);
- act(() => {
- textarea.props.onKeyPress({
- charCode: 13,
- which: 13,
- keyCode: 13,
- ctrlKey: true
- });
- });
- expect(onSend).toHaveBeenCalledTimes(1);
- expect(textarea.props.value).toEqual('');
- act(() => {
- textarea.props.onChange({
- target: {
- value: ' ',
- validity: {}
- }
- });
- });
- expect(textarea.props.value).toEqual(' ');
- act(() => {
- messageInput.root.findByType('form').props.onSubmit({ event: {} });
- });
- expect(textarea.props.value).toEqual('', 'Value should be cleared after submit');
-});
-
-it('Show draft text', () => {
- var messageInput;
- act(() => {
- messageInput = createMessageInput(testMessage, () => {}, () => {}, 'yo');
- });
- let textarea = messageInput.root.findByType('textarea');
- expect(textarea.props.value).toEqual('yo', 'Value should match draft');
-});
diff --git a/vnext/src/ui/__tests__/MessageInput.test.js b/vnext/src/ui/__tests__/MessageInput.test.js
new file mode 100644
index 00000000..1b5b0442
--- /dev/null
+++ b/vnext/src/ui/__tests__/MessageInput.test.js
@@ -0,0 +1,46 @@
+import { render, screen, fireEvent, waitFor } from '@testing-library/react';
+
+import MessageInput from '../MessageInput';
+
+test('Gives immediate focus on to textarea on load', async () => {
+ let draft = 'draft';
+ render( { return true; }} />);
+ expect(screen.getByText(draft)).toHaveFocus();
+});
+
+
+test('Submits on ctrl-enter and pass validation', async () => {
+ let result = false;
+ const onSend = jest.fn(async ({ body }) => { result = body === 'YO'; return result; });
+ let draft = 'draft';
+ render();
+ let textarea = screen.getByText(draft);
+ fireEvent.change(textarea, { target: { value: 'HI' } });
+ // this event should not submit
+ fireEvent.keyPress(textarea, {
+ charCode: 13,
+ which: 13,
+ keyCode: 13
+ });
+ // this event should submit
+ fireEvent.keyPress(textarea, {
+ charCode: 13,
+ which: 13,
+ keyCode: 13,
+ ctrlKey: true
+ });
+ expect(onSend).toHaveBeenCalledTimes(1);
+ expect(result).toBe(false);
+ fireEvent.change(textarea, { target: { value: 'YO' } });
+ fireEvent.keyPress(textarea, {
+ charCode: 13,
+ which: 13,
+ keyCode: 13,
+ ctrlKey: true
+ });
+ expect(onSend).toHaveBeenCalledTimes(2);
+ expect(result).toBe(true);
+ await waitFor(() => expect(textarea.textContent).toEqual(''));
+ textarea.focus();
+ expect(textarea).toHaveFocus();
+});
--
cgit v1.2.3