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_parent_path_variants } from './mock/entry-editable-mock'
53
64describe ( 'Entry editable test' , ( ) => {
75 it ( 'Entry with text test' , done => {
@@ -129,4 +127,147 @@ 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+
138+ // Nested field with direct variant match
139+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_2.en-us.nested.field' )
140+
141+ // Field without variant should not have v2 prefix
142+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'other_field' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.nested.other_field' )
143+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' )
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+
154+ // Nested field with direct variant match
155+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'field' ] ) . toEqual ( { 'data-cslp' : 'v2:entry_asset.entry_uid_1_variant_2.en-us.nested.field' } )
156+
157+ // Field without variant should not have v2 prefix
158+ expect ( ( entry_with_applied_variants as any ) [ 'nested' ] [ '$' ] [ 'other_field' ] ) . toEqual ( { 'data-cslp' : 'entry_asset.entry_uid_1.en-us.nested.other_field' } )
159+ expect ( ( entry_with_applied_variants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( { 'data-cslp' : 'entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' } )
160+
161+ done ( )
162+ } )
163+
164+ it ( 'Entry with parent path variants should find correct variant' , done => {
165+ addTags ( entry_with_parent_path_variants , 'entry_asset' , false )
166+
167+ // Group field should get parent variant
168+ expect ( ( entry_with_parent_path_variants as any ) [ '$' ] [ 'group' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_parent_variant.en-us.group' )
169+ // Field under 'group' parent should get parent variant
170+ 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' )
171+ // Field under 'group.nested' should get parent variant (group is longer match)
172+ 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' )
173+ // Field with exact deep path match should get deep variant
174+ 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' )
175+
176+ // Field with the same starting path should not get parent variant
177+ expect ( ( entry_with_parent_path_variants as any ) [ '$' ] [ 'group_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_3.en-us.group_multiple' )
178+
179+ // Modular block content with variant should get v2 prefix and variant suffix
180+ expect ( ( entry_with_parent_path_variants as any ) [ 'modular_blocks' ] [ 0 ] [ '$' ] [ 'content' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_parent_variant.en-us.modular_blocks.0.content' )
181+ // Modular block field inside a variantised parent should get v2 prefix and variant suffix
182+ expect ( ( entry_with_parent_path_variants as any ) [ 'modular_blocks' ] [ 0 ] [ 'content' ] [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_3_parent_variant.en-us.modular_blocks.0.content.title' )
183+
184+ // Modular block content without variant should not have v2 prefix and variant suffix
185+ expect ( ( entry_with_parent_path_variants as any ) [ 'modular_blocks' ] [ 1 ] [ '$' ] [ 'content' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_3.en-us.modular_blocks.1.content' )
186+ // Modular block field inside a non variantised parent should not get v2 prefix and variant suffix
187+ expect ( ( entry_with_parent_path_variants as any ) [ 'modular_blocks' ] [ 1 ] [ 'content' ] [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_3.en-us.modular_blocks.1.content.title' )
188+
189+ done ( )
190+ } )
191+
192+ it ( 'Entry with modular block variants should apply variants correctly' , done => {
193+ addTags ( entry_with_applied_variants , 'entry_asset' , false )
194+
195+ // Modular block content with variant should get v2 prefix and variant suffix
196+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 1 ] [ '$' ] [ 'content_from_variant' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_3.en-us.modular_blocks.1.content_from_variant' )
197+ // Modular block field inside a variantised parent should get v2 prefix and variant suffix
198+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 1 ] [ 'content_from_variant' ] [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_3.en-us.modular_blocks.1.content_from_variant.title' )
199+ // Field inside a variantised parent with a different variant should get v2 prefix and variant suffix of that variant
200+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 1 ] [ 'content_from_variant' ] [ '$' ] [ 'different_from_parent_variant' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_1_variant_4.en-us.modular_blocks.1.content_from_variant.different_from_parent_variant' )
201+
202+ // Modular block content without variant should get v2 prefix and variant suffix
203+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 0 ] [ '$' ] [ 'content' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.modular_blocks.0.content' )
204+ // Modular block field without variant should not have v2 prefix and variant suffix
205+ expect ( ( entry_with_applied_variants as any ) [ 'modular_blocks' ] [ 0 ] [ 'content' ] [ '$' ] [ 'title' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.modular_blocks.0.content.title' )
206+
207+ done ( )
208+ } )
209+
210+ it ( 'Entry without applied variants should work normally' , done => {
211+ addTags ( entry_with_text , 'entry_asset' , false )
212+
213+ // Should not have v2 prefix when no variants are applied
214+ expect ( ( entry_with_text as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor' )
215+ expect ( ( entry_with_text as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' )
216+
217+ done ( )
218+ } )
219+
220+ it ( 'Entry with empty applied variants should work normally' , done => {
221+ const entryWithEmptyVariants = {
222+ ...entry_with_text ,
223+ _applied_variants : { }
224+ }
225+
226+ addTags ( entryWithEmptyVariants , 'entry_asset' , false )
227+
228+ // Should not have v2 prefix when variants object is empty
229+ expect ( ( entryWithEmptyVariants as any ) [ '$' ] [ 'rich_text_editor' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor' )
230+ expect ( ( entryWithEmptyVariants as any ) [ '$' ] [ 'rich_text_editor_multiple' ] ) . toEqual ( 'data-cslp=entry_asset.entry_uid_1.en-us.rich_text_editor_multiple' )
231+
232+ done ( )
233+ } )
234+
235+ it ( 'Variant path sorting should work correctly for nested paths' , done => {
236+ const entryWithComplexVariants = {
237+ "_version" : 10 ,
238+ "locale" : "en-us" ,
239+ "uid" : "entry_uid_test" ,
240+ "ACL" : { } ,
241+ "_applied_variants" : {
242+ "a" : "variant_a" ,
243+ "a.b" : "variant_ab" ,
244+ "a.b.c" : "variant_abc" ,
245+ "a.b.c.d" : "variant_abcd"
246+ } ,
247+ "a" : {
248+ "b" : {
249+ "c" : {
250+ "d" : {
251+ "field" : "deep field"
252+ } ,
253+ "field" : "c field"
254+ } ,
255+ "field" : "b field"
256+ } ,
257+ "field" : "a field"
258+ }
259+ }
260+
261+ addTags ( entryWithComplexVariants , 'entry_asset' , false )
262+
263+ // Should use the longest matching path variant
264+ 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' )
265+ 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' )
266+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ 'b' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_ab.en-us.a.b.field' )
267+ expect ( ( entryWithComplexVariants as any ) [ 'a' ] [ '$' ] [ 'field' ] ) . toEqual ( 'data-cslp=v2:entry_asset.entry_uid_test_variant_a.en-us.a.field' )
268+
269+ done ( )
270+ } )
271+ } )
272+
132273} )
0 commit comments