import React from 'react' import '@testing-library/jest-dom' import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { AmountInput } from '../index' describe(' backspace', () => { const onValueChangeSpy = jest.fn() beforeEach(() => { jest.clearAllMocks() }) it('should handle backspace with suffix', () => { render( ) expect(screen.getByRole('textbox')).toHaveValue('12,34\xa0€') userEvent.type(screen.getByRole('textbox'), '56') expect(onValueChangeSpy).toHaveBeenLastCalledWith('12,3456', undefined, { float: 12.3456, formatted: '12,3456 €', value: '12,3456' }) expect(screen.getByRole('textbox')).toHaveValue('12,3456\xa0€') userEvent.type(screen.getByRole('textbox'), '{backspace}{backspace}{backspace}') expect(onValueChangeSpy).toHaveBeenLastCalledWith('12,3', undefined, { float: 12.3, formatted: '12,3 €', value: '12,3' }) expect(screen.getByRole('textbox')).toHaveValue('12,3\xa0€') }) it('should handle backspace with default value and decimal scale', () => { render( ) expect(screen.getByRole('textbox')).toHaveValue('£1.00') userEvent.type(screen.getByRole('textbox'), '{backspace}') expect(onValueChangeSpy).toHaveBeenLastCalledWith('1.0', undefined, { float: 1, formatted: '£1.0', value: '1.0' }) expect(screen.getByRole('textbox')).toHaveValue('£1.0') userEvent.type(screen.getByRole('textbox'), '{backspace}') expect(onValueChangeSpy).toHaveBeenLastCalledWith('1.', undefined, { float: 1, formatted: '£1.', value: '1.' }) expect(screen.getByRole('textbox')).toHaveValue('£1.') userEvent.type(screen.getByRole('textbox'), '{backspace}') expect(onValueChangeSpy).toHaveBeenLastCalledWith('1', undefined, { float: 1, formatted: '£1', value: '1' }) expect(screen.getByRole('textbox')).toHaveValue('£1') userEvent.type(screen.getByRole('textbox'), '{backspace}') expect(onValueChangeSpy).toHaveBeenLastCalledWith(undefined, undefined, { float: null, formatted: '', value: '' }) expect(screen.getByRole('textbox')).toHaveValue('') }) it('should handle Del key without moving cursor', () => { render( ) userEvent.type(screen.getByRole('textbox'), '123456789') expect(onValueChangeSpy).toHaveBeenLastCalledWith('123456789', undefined, { float: 123456789, formatted: '$123,456,789', value: '123456789' }) expect(screen.getByRole('textbox')).toHaveValue('$123,456,789') userEvent.type(screen.getByRole('textbox'), '{arrowleft}{arrowleft}{arrowleft}{del}') expect(onValueChangeSpy).toHaveBeenLastCalledWith('12345689', undefined, { float: 12345689, formatted: '$12,345,689', value: '12345689' }) expect(screen.getByRole('textbox')).toHaveValue('$12,345,689') }) it('should handle backspace character when no prefix', () => { render() const input = screen.getByRole('textbox') expect(input).toHaveValue('12,345') userEvent.type(input, '{arrowleft}{arrowleft}{arrowleft}{backspace}') expect(input).toHaveValue('1,345') }) it('should handle delete character left of group separator correctly', () => { render() const input = screen.getByRole('textbox') expect(input).toHaveValue('£1,234') userEvent.type(input, '{arrowleft}{arrowleft}{arrowleft}{arrowleft}{del}') expect(input).toHaveValue('£134') }) it('should handle backspace at the beginning of the input when prefix exists', () => { render() const input = screen.getByRole('textbox') expect(input).toHaveValue('£12,345') userEvent.type( input, '{backspace}{arrowleft}{arrowleft}{arrowleft}{backspace}{backspace}{backspace}' ) expect(input).toHaveValue('£234') }) it('should handle backspace at the beginning of the input when no prefix exists', () => { render() const input = screen.getByRole('textbox') expect(input).toHaveValue('12,345') userEvent.type( input, '{backspace}{arrowleft}{arrowleft}{arrowleft}{backspace}{backspace}{backspace}' ) expect(input).toHaveValue('234') }) })