1- import { EntryModel } from '../src'
21import { addTags } from '../src/entry-editable'
3- import { entry_global_field , entry_global_field_multiple , entry_modular_block , entry_reference , entry_with_text } from './mock/entry-editable-mock'
4- import { entryMultipleContent } from './mock/entry-multiple-rich-text-content'
2+ import { entry_global_field , entry_global_field_multiple , entry_modular_block , entry_reference , entry_with_text , entry_with_applied_variants , entry_with_system_variants , entry_with_parent_path_variants } from './mock/entry-editable-mock'
53
64describe ( 'Entry editable test' , ( ) => {
75 it ( 'Entry with text test' , done => {
@@ -129,4 +127,138 @@ describe('Entry editable test', () => {
129127 done ( )
130128 } )
131129
130+ // Tests for applied variants functionality
131+ describe ( 'Applied Variants Tests' , ( ) => {
132+ it ( 'Entry with applied variants should generate v2 tags with variant suffix' , done => {
133+ addTags ( entry_with_applied_variants , 'entry_asset' , false )
134+
135+ // Field with direct variant match should get v2 prefix and variant suffix
136+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_1.en-us.rich_text_editor' )
137+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_1.en-us.rich_text_editor_multiple' )
138+
139+ // Nested field with direct variant match
140+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_2.en-us.nested.field' )
141+
142+ // Field without variant should not have v2 prefix
143+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'other_field' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.nested.other_field' )
144+
145+ done ( )
146+ } )
147+
148+ it ( 'Entry with applied variants should return v2 objects when tagsAsObject is true' , done => {
149+ addTags ( entry_with_applied_variants , 'entry_asset' , true )
150+
151+ // Field with direct variant match should get v2 prefix and variant suffix as object
152+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( { 'data-cslp' : 'v2:entry_asset.entry_uid_1_variant_1.en-us.rich_text_editor' } )
153+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( { 'data-cslp' : 'v2:entry_asset.entry_uid_1_variant_1.en-us.rich_text_editor_multiple' } )
154+
155+ // Nested field with direct variant match
156+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'field' ] ) . toEqual ( { 'data-cslp' : 'v2:entry_asset.entry_uid_1_variant_2.en-us.nested.field' } )
157+
158+ // Field without variant should not have v2 prefix
159+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'other_field' ] ) . toEqual ( { 'data-cslp' : 'entry_asset.entry_uid_1.en-us.nested.other_field' } )
160+
161+ done ( )
162+ } )
163+
164+ it ( 'Entry with system-level applied variants should work correctly' , done => {
165+ addTags ( entry_with_system_variants , 'entry_asset' , false )
166+
167+ // Fields with system variants should get v2 prefix and variant suffix
168+ expect ( ( entry_with_system_variants as any ) [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_2_system_variant.en-us.title' )
169+ expect ( ( entry_with_system_variants as any ) [ '$' ] [ 'description' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_2_desc_variant.en-us.description' )
170+
171+ done ( )
172+ } )
173+
174+ it ( 'Entry with parent path variants should find correct variant' , done => {
175+ addTags ( entry_with_parent_path_variants , 'entry_asset' , false )
176+
177+ // Field under 'group' parent should get parent variant
178+ expect ( ( entry_with_parent_path_variants as any ) [ 'group' ] [ '$' ] [ 'other' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_parent_variant.en-us.group.other' )
179+
180+ // Field under 'group.nested' should get parent variant (group is longer match)
181+ expect ( ( entry_with_parent_path_variants as any ) [ 'group' ] [ 'nested' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_parent_variant.en-us.group.nested.field' )
182+
183+ // Field with exact deep path match should get deep variant
184+ expect ( ( entry_with_parent_path_variants as any ) [ 'group' ] [ 'nested' ] [ 'deep' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_deep_variant.en-us.group.nested.deep.field' )
185+
186+ done ( )
187+ } )
188+
189+ it ( 'Entry with modular block variants should apply variants correctly' , done => {
190+ addTags ( entry_with_applied_variants , 'entry_asset' , false )
191+
192+ // Modular block content with variant should get v2 prefix and variant suffix
193+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 0 ] [ '$' ] [ 'content' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_3.en-us.modular_blocks.0.content' )
194+
195+ // Modular block field without variant should not have v2 prefix
196+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 0 ] [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.modular_blocks.0.title' )
197+
198+ done ( )
199+ } )
200+
201+ it ( 'Entry without applied variants should work normally' , done => {
202+ addTags ( entry_with_text , 'entry_asset' , false )
203+
204+ // Should not have v2 prefix when no variants are applied
205+ expect ( ( entry_with_text as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor' )
206+ expect ( ( entry_with_text as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' )
207+
208+ done ( )
209+ } )
210+
211+ it ( 'Entry with empty applied variants should work normally' , done => {
212+ const entryWithEmptyVariants = {
213+ ...entry_with_text ,
214+ _applied_variants : { }
215+ }
216+
217+ addTags ( entryWithEmptyVariants , 'entry_asset' , false )
218+
219+ // Should not have v2 prefix when variants object is empty
220+ expect ( ( entryWithEmptyVariants as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor' )
221+ expect ( ( entryWithEmptyVariants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' )
222+
223+ done ( )
224+ } )
225+
226+ it ( 'Variant path sorting should work correctly for nested paths' , done => {
227+ const entryWithComplexVariants = {
228+ "_version" : 10 ,
229+ "locale" : "en-us" ,
230+ "uid" : "entry_uid_test" ,
231+ "ACL" : { } ,
232+ "_applied_variants" : {
233+ "a" : "variant_a" ,
234+ "a.b" : "variant_ab" ,
235+ "a.b.c" : "variant_abc" ,
236+ "a.b.c.d" : "variant_abcd"
237+ } ,
238+ "a" : {
239+ "b" : {
240+ "c" : {
241+ "d" : {
242+ "field" : "deep field"
243+ } ,
244+ "field" : "c field"
245+ } ,
246+ "field" : "b field"
247+ } ,
248+ "field" : "a field"
249+ }
250+ }
251+
252+ addTags ( entryWithComplexVariants , 'entry_asset' , false )
253+
254+ // Should use the longest matching path variant
255+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ 'b' ] [ 'c' ] [ 'd' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_abcd.en-us.a.b.c.d.field' )
256+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ 'b' ] [ 'c' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_abc.en-us.a.b.c.field' )
257+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ 'b' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_ab.en-us.a.b.field' )
258+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_a.en-us.a.field' )
259+
260+ done ( )
261+ } )
262+ } )
263+
132264} )
0 commit comments