UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

384 lines (379 loc) • 14.7 kB
import {describe, expect, it} from 'vitest' import { type DocumentGroupEvent, type EditDocumentVersionEvent, type UpdateLiveDocumentEvent, } from './types' import {addParentToEvents, sortEvents} from './utils' describe('addParentToEvents', () => { it('should add the correct parentId to the events', () => {}) }) describe('sortEvents', () => { it('should sort events in the right order, if published and edited have same timestamp, published goes first ', () => { const remoteEdits: (UpdateLiveDocumentEvent | EditDocumentVersionEvent)[] = [] const events: DocumentGroupEvent[] = [ { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T11:46:10Z', documentId: 'b149d8d0-a4eb-451e-8160-4e489380b670', revisionId: '5IENz7UduDBgah5qw8P7st', releaseId: '', versionId: 'drafts.b149d8d0-a4eb-451e-8160-4e489380b670', versionRevisionId: 'b3075281-d9f1-41d0-9304-bca31a6ec958', publishCause: 'document.publish', id: 'b3075281-d9f1-41d0-9304-bca31a6ec958', }, { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T11:46:05Z', documentId: 'b149d8d0-a4eb-451e-8160-4e489380b670', releaseId: '', versionId: 'drafts.b149d8d0-a4eb-451e-8160-4e489380b670', versionRevisionId: 'a45d633f-f692-409a-8b5a-423eab31dd9f', id: 'a45d633f-f692-409a-8b5a-423eab31dd9f', parentId: 'b3075281-d9f1-41d0-9304-bca31a6ec958', }, ] const expandedEvents: EditDocumentVersionEvent[] = [ { type: 'editDocumentVersion', documentId: 'drafts.b149d8d0-a4eb-451e-8160-4e489380b670', id: 'b3075281-d9f1-41d0-9304-bca31a6ec958', timestamp: '2025-01-23T11:46:10.620240Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: 'b3075281-d9f1-41d0-9304-bca31a6ec958', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T11:46:10.620240Z', revisionId: 'b3075281-d9f1-41d0-9304-bca31a6ec958', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T11:46:06.415469Z', revisionId: 'caa420f8-fae4-41c1-9e68-057e5cc0b3cd', }, ], parentId: 'b3075281-d9f1-41d0-9304-bca31a6ec958', }, ] const result = sortEvents({events, remoteEdits, expandedEvents}) expect(result[0].type).toBe('publishDocumentVersion') expect(result[1].type).toBe('editDocumentVersion') expect(result[2].type).toBe('createDocumentVersion') }) it('should handle remote edits correctly', () => { const remoteEdits: (UpdateLiveDocumentEvent | EditDocumentVersionEvent)[] = [ { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', timestamp: '2025-01-23T13:37:13.450Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T13:37:13.450Z', revisionId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T13:37:09.416Z', revisionId: '45a3edd4-3975-4fa2-89ce-77d40b8de86f', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T13:37:07.984Z', revisionId: 'd16f0b19-8aeb-4628-a377-0153c48828aa', }, ], }, ] const events: DocumentGroupEvent[] = [ { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:37:12Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '1fc72aa1-9870-4020-8a88-9ad18f199840', id: '1fc72aa1-9870-4020-8a88-9ad18f199840', parentId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T13:37:17Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', revisionId: 'Fa2iQBQggalMSxRpi8pie2', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', publishCause: 'document.publish', id: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, ] const expandedEvents: EditDocumentVersionEvent[] = [] const result = sortEvents({events, remoteEdits, expandedEvents}) expect(result[0].type).toBe('publishDocumentVersion') expect(result[1].type).toBe('editDocumentVersion') expect(result[2].type).toBe('createDocumentVersion') }) }) describe('addParentToEvents', () => { it('should add the parents', () => { const events: DocumentGroupEvent[] = [ { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: '0d2e2557-d165-48f7-866e-31231232', timestamp: '2025-01-23T15:00:05.081Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '0d2e2557-d165-48f7-866e-31231232', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T15:00:05.081Z', revisionId: '0d2e2557-d165-48f7-866e-31231232', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T15:00:03.842Z', revisionId: 'f3d6993d-3147-4b2e-8e98-b7e09e69de82', }, ], }, { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T14:00:08Z', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', revisionId: 'Fa2iQBQggalMSxRpi8prWU', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', publishCause: 'document.publish', id: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: '0d2e2557-d165-48f7-866e-1b664f25a5a5', timestamp: '2025-01-23T14:00:05.081Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T14:00:05.081Z', revisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T14:00:03.842Z', revisionId: 'f3d6993d-3147-4b2e-8e98-b7e09e69de82', }, ], }, { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: '625db1c4-24a8-4f58-b60a-d70574624dd9', timestamp: '2025-01-23T13:57:15.574671Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '625db1c4-24a8-4f58-b60a-d70574624dd9', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T13:57:15.574671Z', revisionId: '625db1c4-24a8-4f58-b60a-d70574624dd9', }, ], }, { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:57:14Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '6818a2df-ad70-460f-b827-6e40beeb1518', id: '6818a2df-ad70-460f-b827-6e40beeb1518', parentId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T13:37:17Z', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', revisionId: 'Fa2iQBQggalMSxRpi8pie2', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', publishCause: 'document.publish', id: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', creationEvent: { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:37:12Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '1fc72aa1-9870-4020-8a88-9ad18f199840', id: '1fc72aa1-9870-4020-8a88-9ad18f199840', parentId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, }, { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:37:12Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '1fc72aa1-9870-4020-8a88-9ad18f199840', id: '1fc72aa1-9870-4020-8a88-9ad18f199840', parentId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, ] const result = addParentToEvents(events) expect(result).toEqual([ // This event is not modified events[0], { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T14:00:08Z', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', revisionId: 'Fa2iQBQggalMSxRpi8prWU', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', publishCause: 'document.publish', id: '0d2e2557-d165-48f7-866e-1b664f25a5a5', // Creation event is added given his is a published event creationEvent: { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:57:14Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '6818a2df-ad70-460f-b827-6e40beeb1518', id: '6818a2df-ad70-460f-b827-6e40beeb1518', parentId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, }, { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: 'f3d6993d-3147-4b2e-8e98-b7e09e69de82', timestamp: '2025-01-23T14:00:05.081Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T14:00:05.081Z', revisionId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T14:00:03.842Z', revisionId: 'f3d6993d-3147-4b2e-8e98-b7e09e69de82', }, ], // Parent id is added given this is an edit event parentId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { type: 'editDocumentVersion', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', id: '625db1c4-24a8-4f58-b60a-d70574624dd9', timestamp: '2025-01-23T13:57:15.574671Z', author: 'p8xDvUMxC', contributors: ['p8xDvUMxC'], revisionId: '625db1c4-24a8-4f58-b60a-d70574624dd9', transactions: [ { type: 'editTransaction', author: 'p8xDvUMxC', timestamp: '2025-01-23T13:57:15.574671Z', revisionId: '625db1c4-24a8-4f58-b60a-d70574624dd9', }, ], // Parent id is added given this is an edit event parentId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:57:14Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '6818a2df-ad70-460f-b827-6e40beeb1518', id: '6818a2df-ad70-460f-b827-6e40beeb1518', // Parent id is added given this is a create event parentId: '0d2e2557-d165-48f7-866e-1b664f25a5a5', }, { author: 'p8xDvUMxC', type: 'publishDocumentVersion', timestamp: '2025-01-23T13:37:17Z', documentId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', revisionId: 'Fa2iQBQggalMSxRpi8pie2', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', publishCause: 'document.publish', id: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', creationEvent: { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:37:12Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '1fc72aa1-9870-4020-8a88-9ad18f199840', id: '1fc72aa1-9870-4020-8a88-9ad18f199840', parentId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, }, { author: 'p8xDvUMxC', type: 'createDocumentVersion', timestamp: '2025-01-23T13:37:12Z', documentId: 'bcbfdedd-a719-4959-98fb-f68c8851d32f', releaseId: '', versionId: 'drafts.bcbfdedd-a719-4959-98fb-f68c8851d32f', versionRevisionId: '1fc72aa1-9870-4020-8a88-9ad18f199840', id: '1fc72aa1-9870-4020-8a88-9ad18f199840', // Parent id is added given this is a create event parentId: '577b6fa4-ceba-40bd-babd-9ffbcfff682d', }, ]) }) })