mirror of
https://github.com/twentyhq/twenty
synced 2026-04-21 13:37:22 +00:00
fix compute folders to update util (#19749)
This regressed with the migration work Type checker should've caught it, but didn't because of `Partial` changed it to `Pick` instead to avoid future cases /closes https://github.com/twentyhq/twenty/issues/19745
This commit is contained in:
parent
f5e8c05267
commit
64470baa1e
3 changed files with 86 additions and 2 deletions
|
|
@ -370,6 +370,7 @@ describe('SyncMessageFoldersService', () => {
|
|||
id: 'folder-1',
|
||||
externalId: 'inbox-ext',
|
||||
name: 'INBOX',
|
||||
isSynced: true,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
});
|
||||
|
|
@ -377,6 +378,7 @@ describe('SyncMessageFoldersService', () => {
|
|||
createMockDiscoveredFolder({
|
||||
externalId: 'inbox-ext',
|
||||
name: 'INBOX',
|
||||
isSynced: true,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
}),
|
||||
|
|
@ -474,6 +476,7 @@ describe('SyncMessageFoldersService', () => {
|
|||
createMockDiscoveredFolder({
|
||||
externalId: 'unchanged-ext',
|
||||
name: 'Unchanged',
|
||||
isSynced: true,
|
||||
}),
|
||||
createMockDiscoveredFolder({
|
||||
externalId: 'new-ext',
|
||||
|
|
@ -534,6 +537,7 @@ describe('SyncMessageFoldersService', () => {
|
|||
createMockDiscoveredFolder({
|
||||
externalId: 'inbox-ext',
|
||||
name: 'INBOX',
|
||||
isSynced: true,
|
||||
}),
|
||||
];
|
||||
const messageChannel = createMockMessageChannel({
|
||||
|
|
|
|||
|
|
@ -93,6 +93,72 @@ describe('computeFoldersToUpdate', () => {
|
|||
expect(result.size).toBe(0);
|
||||
});
|
||||
|
||||
it('should detect isSynced change from false to true', () => {
|
||||
const discoveredFolders = [
|
||||
{
|
||||
name: 'Inbox',
|
||||
externalId: 'INBOX',
|
||||
isSynced: true,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
},
|
||||
];
|
||||
|
||||
const existingFolders = [
|
||||
{
|
||||
id: 'folder-id',
|
||||
name: 'Inbox',
|
||||
externalId: 'INBOX',
|
||||
isSynced: false,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
syncCursor: 'cursor',
|
||||
pendingSyncAction: MessageFolderPendingSyncAction.NONE,
|
||||
},
|
||||
];
|
||||
|
||||
const result = computeFoldersToUpdate({
|
||||
discoveredFolders,
|
||||
existingFolders,
|
||||
});
|
||||
|
||||
expect(result.size).toBe(1);
|
||||
expect(result.get('folder-id')?.isSynced).toBe(true);
|
||||
});
|
||||
|
||||
it('should detect isSynced change from true to false', () => {
|
||||
const discoveredFolders = [
|
||||
{
|
||||
name: 'Promotions',
|
||||
externalId: 'promo-1',
|
||||
isSynced: false,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
},
|
||||
];
|
||||
|
||||
const existingFolders = [
|
||||
{
|
||||
id: 'folder-id',
|
||||
name: 'Promotions',
|
||||
externalId: 'promo-1',
|
||||
isSynced: true,
|
||||
isSentFolder: false,
|
||||
parentFolderId: null,
|
||||
syncCursor: 'cursor',
|
||||
pendingSyncAction: MessageFolderPendingSyncAction.NONE,
|
||||
},
|
||||
];
|
||||
|
||||
const result = computeFoldersToUpdate({
|
||||
discoveredFolders,
|
||||
existingFolders,
|
||||
});
|
||||
|
||||
expect(result.size).toBe(1);
|
||||
expect(result.get('folder-id')?.isSynced).toBe(false);
|
||||
});
|
||||
|
||||
it('should treat empty string parentFolderId same as null', () => {
|
||||
const discoveredFolders = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,12 +14,24 @@ export const computeFoldersToUpdate = ({
|
|||
}: {
|
||||
discoveredFolders: DiscoveredMessageFolder[];
|
||||
existingFolders: MessageFolder[];
|
||||
}): Map<string, Partial<MessageFolderEntity>> => {
|
||||
}): Map<
|
||||
string,
|
||||
Pick<
|
||||
MessageFolderEntity,
|
||||
'name' | 'isSynced' | 'isSentFolder' | 'parentFolderId'
|
||||
>
|
||||
> => {
|
||||
const existingFoldersByExternalId = new Map(
|
||||
existingFolders.map((folder) => [folder.externalId, folder]),
|
||||
);
|
||||
|
||||
const foldersToUpdate = new Map<string, Partial<MessageFolderEntity>>();
|
||||
const foldersToUpdate = new Map<
|
||||
string,
|
||||
Pick<
|
||||
MessageFolderEntity,
|
||||
'name' | 'isSynced' | 'isSentFolder' | 'parentFolderId'
|
||||
>
|
||||
>();
|
||||
|
||||
for (const discoveredFolder of discoveredFolders) {
|
||||
const existingFolder = existingFoldersByExternalId.get(
|
||||
|
|
@ -36,12 +48,14 @@ export const computeFoldersToUpdate = ({
|
|||
|
||||
const discoveredFolderData = {
|
||||
name: discoveredFolder.name,
|
||||
isSynced: discoveredFolder.isSynced,
|
||||
isSentFolder: discoveredFolder.isSentFolder,
|
||||
parentFolderId,
|
||||
};
|
||||
|
||||
const existingFolderData = {
|
||||
name: existingFolder.name,
|
||||
isSynced: existingFolder.isSynced,
|
||||
isSentFolder: existingFolder.isSentFolder,
|
||||
parentFolderId: isNonEmptyString(existingFolder.parentFolderId)
|
||||
? existingFolder.parentFolderId
|
||||
|
|
|
|||
Loading…
Reference in a new issue