11import * as React from 'react' ;
22import { fireEvent , render , screen , waitFor } from '@testing-library/react' ;
33import {
4- Basic ,
4+ Create ,
55 DataProviderErrorOnValidation ,
66 DeepField ,
7+ Edit ,
78 WithAdditionalFilters ,
89 WithMessage ,
910} from './useUnique.stories' ;
@@ -27,7 +28,7 @@ describe('useUnique', () => {
2728
2829 it ( 'should show the default error when the field value already exists' , async ( ) => {
2930 const dataProvider = baseDataProvider ( ) ;
30- render ( < Basic dataProvider = { dataProvider } /> ) ;
31+ render ( < Create dataProvider = { dataProvider } /> ) ;
3132
3233 await screen . findByDisplayValue ( 'John Doe' ) ;
3334
@@ -49,6 +50,66 @@ describe('useUnique', () => {
4950 expect ( dataProvider . create ) . not . toHaveBeenCalled ( ) ;
5051 } ) ;
5152
53+ it ( 'should not show the error when the field value already exists but only for the current record' , async ( ) => {
54+ const dataProvider = baseDataProvider ( {
55+ // @ts -ignore
56+ getList : jest . fn ( ( resource , params ) =>
57+ params . filter . name === 'John Doe'
58+ ? Promise . resolve ( {
59+ data : [ { id : 1 , name : 'John Doe' } ] ,
60+ total : 1 ,
61+ } )
62+ : Promise . resolve ( {
63+ data : [ { id : 2 , name : 'Jane Doe' } ] ,
64+ total : 1 ,
65+ } )
66+ ) ,
67+ // @ts -ignore
68+ getOne : jest . fn ( ( ) =>
69+ Promise . resolve ( {
70+ data : { id : 1 , name : 'John Doe' } ,
71+ } )
72+ ) ,
73+ // @ts -ignore
74+ update : jest . fn ( ( ) => Promise . resolve ( { data : { id : 1 } } ) ) ,
75+ } ) ;
76+ render ( < Edit dataProvider = { dataProvider } id = { 1 } /> ) ;
77+
78+ await waitFor ( ( ) =>
79+ expect ( dataProvider . getOne ) . toHaveBeenCalledWith ( 'users' , {
80+ id : 1 ,
81+ } )
82+ ) ;
83+ fireEvent . change ( screen . getByDisplayValue ( 'John Doe' ) , {
84+ target : { value : 'Jane Doe' } ,
85+ } ) ;
86+ fireEvent . blur ( screen . getByDisplayValue ( 'Jane Doe' ) ) ;
87+ fireEvent . click ( screen . getByText ( 'Submit' ) ) ;
88+
89+ await waitFor ( ( ) =>
90+ expect ( dataProvider . getList ) . toHaveBeenCalledWith ( 'users' , {
91+ filter : {
92+ name : 'Jane Doe' ,
93+ } ,
94+ pagination : {
95+ page : 1 ,
96+ perPage : 1 ,
97+ } ,
98+ sort : {
99+ field : 'id' ,
100+ order : 'ASC' ,
101+ } ,
102+ } )
103+ ) ;
104+ await screen . findByText ( 'Must be unique' ) ;
105+ fireEvent . change ( screen . getByDisplayValue ( 'Jane Doe' ) , {
106+ target : { value : 'John Doe' } ,
107+ } ) ;
108+ await waitFor ( ( ) =>
109+ expect ( screen . queryByText ( 'Must be unique' ) ) . toBeNull ( )
110+ ) ;
111+ } ) ;
112+
52113 it ( 'should not show the default error when the field value does not already exist' , async ( ) => {
53114 const dataProvider = baseDataProvider ( {
54115 // @ts -ignore
@@ -60,7 +121,7 @@ describe('useUnique', () => {
60121 ) ,
61122 } ) ;
62123
63- render ( < Basic dataProvider = { dataProvider } /> ) ;
124+ render ( < Create dataProvider = { dataProvider } /> ) ;
64125
65126 await screen . findByDisplayValue ( 'John Doe' ) ;
66127 fireEvent . change ( screen . getByDisplayValue ( 'John Doe' ) , {
0 commit comments