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);
    });
  });
});