@@ -251,6 +251,55 @@ describe('Rest Experience', { concurrent: true }, () => {
251251 } )
252252 } )
253253
254+ test ( 'create sends templateId when creating a template-backed experience' , async ( ) => {
255+ const mockResponse = {
256+ sys : { id : 'new-experience-456' , type : 'Experience' , version : 1 } ,
257+ name : 'Template Experience' ,
258+ description : 'A template-backed experience' ,
259+ viewports : [ ] ,
260+ contentProperties : { } ,
261+ designProperties : { } ,
262+ dimensionKeyMap : { designProperties : { } } ,
263+ }
264+
265+ const { httpMock, adapterMock } = setupRestAdapter ( Promise . resolve ( { data : mockResponse } ) )
266+
267+ return adapterMock
268+ . makeRequest ( {
269+ entityType : 'Experience' ,
270+ action : 'create' ,
271+ userAgent : 'mocked' ,
272+ params : {
273+ spaceId : 'space123' ,
274+ environmentId : 'master' ,
275+ } ,
276+ payload : {
277+ name : 'Template Experience' ,
278+ description : 'A template-backed experience' ,
279+ templateId : 'tmpl-789' ,
280+ viewports : [ ] ,
281+ contentProperties : { } ,
282+ designProperties : { } ,
283+ dimensionKeyMap : { designProperties : { } } ,
284+ } ,
285+ } )
286+ . then ( ( r ) => {
287+ expect ( r ) . to . eql ( mockResponse )
288+ expect ( httpMock . post . mock . calls [ 0 ] [ 0 ] ) . to . eql (
289+ '/spaces/space123/environments/master/experiences' ,
290+ )
291+ expect ( httpMock . post . mock . calls [ 0 ] [ 1 ] ) . to . eql ( {
292+ name : 'Template Experience' ,
293+ description : 'A template-backed experience' ,
294+ templateId : 'tmpl-789' ,
295+ viewports : [ ] ,
296+ contentProperties : { } ,
297+ designProperties : { } ,
298+ dimensionKeyMap : { designProperties : { } } ,
299+ } )
300+ } )
301+ } )
302+
254303 test ( 'update calls correct URL with version header' , async ( ) => {
255304 const mockResponse = {
256305 sys : { id : 'experience123' , type : 'Experience' , version : 2 } ,
@@ -301,6 +350,57 @@ describe('Rest Experience', { concurrent: true }, () => {
301350 } )
302351 } )
303352
353+ test ( 'update sends templateId when experience is template-backed' , async ( ) => {
354+ const mockResponse = {
355+ sys : { id : 'experience123' , type : 'Experience' , version : 2 } ,
356+ name : 'Updated Experience' ,
357+ description : 'A template-backed experience' ,
358+ viewports : [ ] ,
359+ contentProperties : { } ,
360+ designProperties : { } ,
361+ dimensionKeyMap : { designProperties : { } } ,
362+ }
363+
364+ const { httpMock, adapterMock } = setupRestAdapter ( Promise . resolve ( { data : mockResponse } ) )
365+
366+ return adapterMock
367+ . makeRequest ( {
368+ entityType : 'Experience' ,
369+ action : 'update' ,
370+ userAgent : 'mocked' ,
371+ params : {
372+ spaceId : 'space123' ,
373+ environmentId : 'master' ,
374+ experienceId : 'experience123' ,
375+ } ,
376+ payload : {
377+ sys : {
378+ version : 1 ,
379+ template : {
380+ sys : { type : 'Link' , linkType : 'Template' , id : 'tmpl-456' } ,
381+ } ,
382+ } ,
383+ name : 'Updated Experience' ,
384+ description : 'A template-backed experience' ,
385+ viewports : [ ] ,
386+ contentProperties : { } ,
387+ designProperties : { } ,
388+ dimensionKeyMap : { designProperties : { } } ,
389+ } ,
390+ } )
391+ . then ( ( r ) => {
392+ expect ( r ) . to . eql ( mockResponse )
393+ expect ( httpMock . put . mock . calls [ 0 ] [ 0 ] ) . to . eql (
394+ '/spaces/space123/environments/master/experiences/experience123' ,
395+ )
396+ expect ( httpMock . put . mock . calls [ 0 ] [ 2 ] . headers [ 'X-Contentful-Version' ] ) . to . eql ( 1 )
397+ const body = httpMock . put . mock . calls [ 0 ] [ 1 ]
398+ expect ( body . templateId ) . to . eql ( 'tmpl-456' )
399+ expect ( body . componentTypeId ) . to . be . undefined
400+ expect ( body . sys ) . to . be . undefined
401+ } )
402+ } )
403+
304404 test ( 'delete calls correct URL' , async ( ) => {
305405 const { httpMock, adapterMock } = setupRestAdapter ( Promise . resolve ( { data : { } } ) )
306406
0 commit comments