1+ import { describe , it , expect } from 'vitest' ;
2+ import { isFieldDisabled } from '../isFieldDisabled' ;
3+ import { ISchemaFieldMap } from '../types/index.types' ;
4+ import { FieldDetails } from '../../components/FieldToolbar' ;
5+ import Config from '../../../configManager/configManager' ;
6+ import { VisualBuilder } from '../..' ;
7+
8+ describe ( 'isFieldDisabled' , ( ) => {
9+ it ( 'should return disabled state due to read-only role' , ( ) => {
10+ const fieldSchemaMap : ISchemaFieldMap = {
11+ field_metadata : {
12+ updateRestrict : true ,
13+ } ,
14+ } ;
15+ const eventFieldDetails : FieldDetails = {
16+ editableElement : document . createElement ( 'div' ) ,
17+ fieldMetadata : {
18+ locale : 'en-us' ,
19+ } ,
20+ } ;
21+
22+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
23+ expect ( result . isDisabled ) . toBe ( true ) ;
24+ expect ( result . reason ) . toBe ( 'You have only read access to this field' ) ;
25+ } ) ;
26+
27+ it ( 'should return disabled state due to non-localizable fields' , ( ) => {
28+ Config . get = ( ) => ( {
29+ stackDetails : {
30+ masterLocale : 'en-us' ,
31+ } ,
32+ } ) ;
33+
34+ const fieldSchemaMap : ISchemaFieldMap = {
35+ non_localizable : true ,
36+ } ;
37+ const eventFieldDetails : FieldDetails = {
38+ editableElement : document . createElement ( 'div' ) ,
39+ fieldMetadata : {
40+ locale : 'fr-fr' ,
41+ } ,
42+ } ;
43+
44+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
45+ expect ( result . isDisabled ) . toBe ( true ) ;
46+ expect ( result . reason ) . toBe ( 'Editing this field is restricted in localized entries' ) ;
47+ } ) ;
48+
49+ it ( 'should return disabled state due to unlinked variant' , ( ) => {
50+ const fieldSchemaMap : ISchemaFieldMap = {
51+ field_metadata : {
52+ isUnlinkedVariant : true ,
53+ } ,
54+ } ;
55+ const eventFieldDetails : FieldDetails = {
56+ editableElement : document . createElement ( 'div' ) ,
57+ fieldMetadata : {
58+ locale : 'en-us' ,
59+ } ,
60+ } ;
61+
62+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
63+ expect ( result . isDisabled ) . toBe ( true ) ;
64+ expect ( result . reason ) . toBe ( 'This field is not editable as it is not linked to the selected variant' ) ;
65+ } ) ;
66+
67+ it ( 'should return disabled state due to unlocalized variant' , ( ) => {
68+ VisualBuilder . VisualBuilderGlobalState = {
69+ value : {
70+ locale : 'en-us' ,
71+ variant : true ,
72+ } ,
73+ } ;
74+
75+ const fieldSchemaMap : ISchemaFieldMap = { } ;
76+ const eventFieldDetails : FieldDetails = {
77+ editableElement : document . createElement ( 'div' ) ,
78+ fieldMetadata : {
79+ locale : 'fr-fr' ,
80+ } ,
81+ } ;
82+
83+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
84+ expect ( result . isDisabled ) . toBe ( true ) ;
85+ expect ( result . reason ) . toBe ( 'This field is not editable as it is not localized' ) ;
86+ } ) ;
87+
88+ it ( 'should return disabled state due to audience mode' , ( ) => {
89+ VisualBuilder . VisualBuilderGlobalState = {
90+ value : {
91+ audienceMode : true ,
92+ } ,
93+ } ;
94+
95+ const fieldSchemaMap : ISchemaFieldMap = { } ;
96+ const eventFieldDetails : FieldDetails = {
97+ editableElement : document . createElement ( 'div' ) ,
98+ fieldMetadata : {
99+ locale : 'en-us' ,
100+ } ,
101+ } ;
102+
103+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
104+ expect ( result . isDisabled ) . toBe ( true ) ;
105+ expect ( result . reason ) . toBe ( 'Open an Experience from Audience widget to start editing' ) ;
106+ } ) ;
107+
108+ it ( 'should return disabled state due to disabled variant' , ( ) => {
109+ VisualBuilder . VisualBuilderGlobalState = {
110+ value : {
111+ audienceMode : true ,
112+ } ,
113+ } ;
114+
115+ const fieldSchemaMap : ISchemaFieldMap = { } ;
116+ const eventFieldDetails : FieldDetails = {
117+ editableElement : document . createElement ( 'div' ) ,
118+ fieldMetadata : {
119+ locale : 'en-us' ,
120+ } ,
121+ } ;
122+ eventFieldDetails . editableElement . classList . add ( 'visual-builder__disabled-variant-field' ) ;
123+
124+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
125+ expect ( result . isDisabled ) . toBe ( true ) ;
126+ expect ( result . reason ) . toBe ( 'This field is not editable as it doesn\'t match the selected variant' ) ;
127+ VisualBuilder . VisualBuilderGlobalState = {
128+ value : {
129+ audienceMode : false ,
130+ } ,
131+ } ;
132+ } ) ;
133+
134+ it ( 'should return enabled state when no restrictions apply' , ( ) => {
135+ const fieldSchemaMap : ISchemaFieldMap = { } ;
136+ const eventFieldDetails : FieldDetails = {
137+ editableElement : document . createElement ( 'div' ) ,
138+ fieldMetadata : {
139+ locale : 'en-us' ,
140+ } ,
141+ } ;
142+
143+ const result = isFieldDisabled ( fieldSchemaMap , eventFieldDetails ) ;
144+ expect ( result . isDisabled ) . toBe ( false ) ;
145+ expect ( result . reason ) . toBe ( '' ) ;
146+ } ) ;
147+ } ) ;
0 commit comments