@@ -2,7 +2,7 @@ import { ContainerChildBase, CourseContainerChildBase } from './types';
22import { diffPreviewContainerChildren } from './utils' ;
33
44export const getMockCourseContainerData = (
5- type : 'added|deleted' | 'moved|deleted' | 'all' ,
5+ type : 'added|deleted' | 'moved|deleted' | 'all' | 'locallyEdited' ,
66) : [ CourseContainerChildBase [ ] , ContainerChildBase [ ] ] => {
77 switch ( type ) {
88 case 'moved|deleted' :
@@ -17,7 +17,7 @@ export const getMockCourseContainerData = (
1717 versionSynced : 11 ,
1818 versionAvailable : 11 ,
1919 versionDeclined : null ,
20- isModified : true ,
20+ downstreamCustomized : [ 'display_name' ] ,
2121 } ,
2222 } ,
2323 {
@@ -29,7 +29,7 @@ export const getMockCourseContainerData = (
2929 versionSynced : 7 ,
3030 versionAvailable : 7 ,
3131 versionDeclined : null ,
32- isModified : false ,
32+ downstreamCustomized : [ ] ,
3333 } ,
3434 } ,
3535 {
@@ -41,7 +41,7 @@ export const getMockCourseContainerData = (
4141 versionSynced : 2 ,
4242 versionAvailable : 2 ,
4343 versionDeclined : null ,
44- isModified : false ,
44+ downstreamCustomized : [ ] ,
4545 } ,
4646 } ,
4747 {
@@ -53,7 +53,7 @@ export const getMockCourseContainerData = (
5353 versionSynced : 1 ,
5454 versionAvailable : 1 ,
5555 versionDeclined : null ,
56- isModified : false ,
56+ downstreamCustomized : [ ] ,
5757 } ,
5858 } ,
5959 ] ,
@@ -87,7 +87,7 @@ export const getMockCourseContainerData = (
8787 versionSynced : 11 ,
8888 versionAvailable : 11 ,
8989 versionDeclined : null ,
90- isModified : true ,
90+ downstreamCustomized : [ 'display_name' ] ,
9191 } ,
9292 } ,
9393 {
@@ -99,7 +99,7 @@ export const getMockCourseContainerData = (
9999 versionSynced : 7 ,
100100 versionAvailable : 7 ,
101101 versionDeclined : null ,
102- isModified : false ,
102+ downstreamCustomized : [ ] ,
103103 } ,
104104 } ,
105105 {
@@ -111,7 +111,7 @@ export const getMockCourseContainerData = (
111111 versionSynced : 2 ,
112112 versionAvailable : 2 ,
113113 versionDeclined : null ,
114- isModified : false ,
114+ downstreamCustomized : [ ] ,
115115 } ,
116116 } ,
117117 {
@@ -123,7 +123,7 @@ export const getMockCourseContainerData = (
123123 versionSynced : 1 ,
124124 versionAvailable : 1 ,
125125 versionDeclined : null ,
126- isModified : false ,
126+ downstreamCustomized : [ ] ,
127127 } ,
128128 } ,
129129 ] ,
@@ -162,7 +162,7 @@ export const getMockCourseContainerData = (
162162 versionSynced : 11 ,
163163 versionAvailable : 11 ,
164164 versionDeclined : null ,
165- isModified : true ,
165+ downstreamCustomized : [ 'display_name' ] ,
166166 } ,
167167 } ,
168168 {
@@ -174,7 +174,7 @@ export const getMockCourseContainerData = (
174174 versionSynced : 7 ,
175175 versionAvailable : 7 ,
176176 versionDeclined : null ,
177- isModified : false ,
177+ downstreamCustomized : [ ] ,
178178 } ,
179179 } ,
180180 {
@@ -186,7 +186,7 @@ export const getMockCourseContainerData = (
186186 versionSynced : 2 ,
187187 versionAvailable : 2 ,
188188 versionDeclined : null ,
189- isModified : false ,
189+ downstreamCustomized : [ ] ,
190190 } ,
191191 } ,
192192 {
@@ -198,7 +198,7 @@ export const getMockCourseContainerData = (
198198 versionSynced : 1 ,
199199 versionAvailable : 1 ,
200200 versionDeclined : null ,
201- isModified : false ,
201+ downstreamCustomized : [ ] ,
202202 } ,
203203 } ,
204204 ] ,
@@ -225,6 +225,64 @@ export const getMockCourseContainerData = (
225225 } ,
226226 ] ,
227227 ] as [ CourseContainerChildBase [ ] , ContainerChildBase [ ] ] ;
228+ case 'locallyEdited' :
229+ return [
230+ [
231+ {
232+ id : 'block-v1:UNIX+UX1+2025_T3+type@vertical+block@1' ,
233+ name : 'Unit 1 remote edit - local edit' ,
234+ blockType : 'vertical' ,
235+ upstreamLink : {
236+ upstreamRef : 'lct:UNIX:CS1:unit:unit-1-2a1741' ,
237+ versionSynced : 11 ,
238+ versionAvailable : 11 ,
239+ versionDeclined : null ,
240+ downstreamCustomized : [ 'display_name' ] ,
241+ } ,
242+ } ,
243+ {
244+ id : 'block-v1:UNIX+UX1+2025_T3+type@vertical+block@2' ,
245+ name : 'New unit remote edit' ,
246+ blockType : 'vertical' ,
247+ upstreamLink : {
248+ upstreamRef : 'lct:UNIX:CS1:unit:new-unit-remote-7eb9d1' ,
249+ versionSynced : 7 ,
250+ versionAvailable : 7 ,
251+ versionDeclined : null ,
252+ downstreamCustomized : [ 'data' ] ,
253+ } ,
254+ } ,
255+ {
256+ id : 'block-v1:UNIX+UX1+2025_T3+type@vertical+block@3' ,
257+ name : 'Unit with tags - local edit' ,
258+ blockType : 'vertical' ,
259+ upstreamLink : {
260+ upstreamRef : 'lct:UNIX:CS1:unit:unit-with-tags-bec5f9' ,
261+ versionSynced : 2 ,
262+ versionAvailable : 2 ,
263+ versionDeclined : null ,
264+ downstreamCustomized : [ 'display_name' , 'data' ] ,
265+ } ,
266+ } ,
267+ ] ,
268+ [
269+ {
270+ id : 'lct:UNIX:CS1:unit:unit-1-2a1741' ,
271+ displayName : 'Unit 1 remote edit - remote edit' ,
272+ containerType : 'unit' ,
273+ } ,
274+ {
275+ id : 'lct:UNIX:CS1:unit:new-unit-remote-7eb9d1' ,
276+ displayName : 'New unit remote edit' ,
277+ containerType : 'unit' ,
278+ } ,
279+ {
280+ id : 'lct:UNIX:CS1:unit:unit-with-tags-bec5f9' ,
281+ displayName : 'Unit with tags - remote edit' ,
282+ containerType : 'unit' ,
283+ } ,
284+ ] ,
285+ ] as [ CourseContainerChildBase [ ] , ContainerChildBase [ ] ] ;
228286 default :
229287 throw new Error ( ) ;
230288 }
@@ -280,4 +338,22 @@ describe('diffPreviewContainerChildren', () => {
280338 expect ( result [ 1 ] [ 2 ] . state ) . toEqual ( 'added' ) ;
281339 expect ( result [ 1 ] [ 2 ] . id ) . toEqual ( result [ 0 ] [ 2 ] . id ) ;
282340 } ) ;
341+
342+ it ( 'should handle locally edited content' , ( ) => {
343+ const [ a , b ] = getMockCourseContainerData ( 'locallyEdited' ) ;
344+ const result = diffPreviewContainerChildren ( a as CourseContainerChildBase [ ] , b ) ;
345+ expect ( result [ 0 ] . length ) . toEqual ( result [ 1 ] . length ) ;
346+ // renamed
347+ expect ( result [ 0 ] [ 0 ] . state ) . toEqual ( 'locallyRenamed' ) ;
348+ expect ( result [ 1 ] [ 0 ] . state ) . toEqual ( 'locallyRenamed' ) ;
349+ expect ( result [ 1 ] [ 0 ] . id ) . toEqual ( result [ 0 ] [ 0 ] . id ) ;
350+ // content updated
351+ expect ( result [ 0 ] [ 1 ] . state ) . toEqual ( 'locallyContentUpdated' ) ;
352+ expect ( result [ 1 ] [ 1 ] . state ) . toEqual ( 'locallyContentUpdated' ) ;
353+ expect ( result [ 1 ] [ 1 ] . id ) . toEqual ( result [ 0 ] [ 1 ] . id ) ;
354+ // renamed and content updated
355+ expect ( result [ 0 ] [ 2 ] . state ) . toEqual ( 'locallyRenamedAndContentUpdated' ) ;
356+ expect ( result [ 1 ] [ 2 ] . state ) . toEqual ( 'locallyRenamedAndContentUpdated' ) ;
357+ expect ( result [ 1 ] [ 2 ] . id ) . toEqual ( result [ 0 ] [ 2 ] . id ) ;
358+ } ) ;
283359} ) ;
0 commit comments