File size: 5,411 Bytes
aa2e6af | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | import { sharedLinkData } from './sharedLink.fakeData';
import { addSharedLink, updateSharedLink, deleteSharedLink } from './sharedLink';
import type { TSharedLink, SharedLinkListData } from 'librechat-data-provider';
describe('Shared Link Utilities', () => {
describe('addSharedLink', () => {
it('adds a new shared link to the top of the list', () => {
const data = { pages: [{ sharedLinks: [] }] };
const newSharedLink = { shareId: 'new', updatedAt: '2023-04-02T12:00:00Z' };
const newData = addSharedLink(
data as unknown as SharedLinkListData,
newSharedLink as TSharedLink,
);
expect(newData.pages[0].sharedLinks).toHaveLength(1);
expect(newData.pages[0].sharedLinks[0].shareId).toBe('new');
});
it('does not add a shared link but updates it if it already exists', () => {
const data = {
pages: [
{
sharedLinks: [
{ shareId: '1', updatedAt: '2023-04-01T12:00:00Z' },
{ shareId: '2', updatedAt: '2023-04-01T13:00:00Z' },
],
},
],
};
const newSharedLink = { shareId: '2', updatedAt: '2023-04-02T12:00:00Z' };
const newData = addSharedLink(
data as unknown as SharedLinkListData,
newSharedLink as TSharedLink,
);
expect(newData.pages[0].sharedLinks).toHaveLength(2);
expect(newData.pages[0].sharedLinks[0].shareId).toBe('2');
});
});
describe('updateSharedLink', () => {
it('updates an existing shared link and moves it to the top', () => {
const initialData = {
pages: [
{
sharedLinks: [
{ shareId: '1', updatedAt: '2023-04-01T12:00:00Z' },
{ shareId: '2', updatedAt: '2023-04-01T13:00:00Z' },
],
},
],
};
const updatedSharedLink = { shareId: '1', updatedAt: '2023-04-02T12:00:00Z' };
const newData = updateSharedLink(
initialData as unknown as SharedLinkListData,
updatedSharedLink as TSharedLink,
);
expect(newData.pages[0].sharedLinks).toHaveLength(2);
expect(newData.pages[0].sharedLinks[0].shareId).toBe('1');
});
it('does not update a shared link if it does not exist', () => {
const initialData = {
pages: [
{
sharedLinks: [
{ shareId: '1', updatedAt: '2023-04-01T12:00:00Z' },
{ shareId: '2', updatedAt: '2023-04-01T13:00:00Z' },
],
},
],
};
const updatedSharedLink = { shareId: '3', updatedAt: '2023-04-02T12:00:00Z' };
const newData = updateSharedLink(
initialData as unknown as SharedLinkListData,
updatedSharedLink as TSharedLink,
);
expect(newData.pages[0].sharedLinks).toHaveLength(2);
expect(newData.pages[0].sharedLinks[0].shareId).toBe('1');
});
});
describe('deleteSharedLink', () => {
it('removes a shared link by id', () => {
const initialData = {
pages: [
{
sharedLinks: [
{ shareId: '1', updatedAt: '2023-04-01T12:00:00Z' },
{ shareId: '2', updatedAt: '2023-04-01T13:00:00Z' },
],
},
],
};
const newData = deleteSharedLink(initialData as unknown as SharedLinkListData, '1');
expect(newData.pages[0].sharedLinks).toHaveLength(1);
expect(newData.pages[0].sharedLinks[0].shareId).not.toBe('1');
});
it('does not remove a shared link if it does not exist', () => {
const initialData = {
pages: [
{
sharedLinks: [
{ shareId: '1', updatedAt: '2023-04-01T12:00:00Z' },
{ shareId: '2', updatedAt: '2023-04-01T13:00:00Z' },
],
},
],
};
const newData = deleteSharedLink(initialData as unknown as SharedLinkListData, '3');
expect(newData.pages[0].sharedLinks).toHaveLength(2);
});
});
});
describe('Shared Link Utilities with Fake Data', () => {
describe('addSharedLink', () => {
it('adds a new shared link to the existing fake data', () => {
const newSharedLink = {
shareId: 'new',
updatedAt: new Date().toISOString(),
} as TSharedLink;
const initialLength = sharedLinkData.pages[0].sharedLinks.length;
const newData = addSharedLink(sharedLinkData, newSharedLink);
expect(newData.pages[0].sharedLinks.length).toBe(initialLength + 1);
expect(newData.pages[0].sharedLinks[0].shareId).toBe('new');
});
});
describe('updateSharedLink', () => {
it('updates an existing shared link within fake data', () => {
const updatedSharedLink = {
...sharedLinkData.pages[0].sharedLinks[0],
title: 'Updated Title',
};
const newData = updateSharedLink(sharedLinkData, updatedSharedLink);
expect(newData.pages[0].sharedLinks[0].title).toBe('Updated Title');
});
});
describe('deleteSharedLink', () => {
it('removes a shared link by id from fake data', () => {
const shareIdToDelete = sharedLinkData.pages[0].sharedLinks[0].shareId as string;
const newData = deleteSharedLink(sharedLinkData, shareIdToDelete);
const deletedDataExists = newData.pages[0].sharedLinks.some(
(c) => c.shareId === shareIdToDelete,
);
expect(deletedDataExists).toBe(false);
});
});
});
|