-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathnode_helper.test.ts
More file actions
120 lines (109 loc) · 4.68 KB
/
Copy pathnode_helper.test.ts
File metadata and controls
120 lines (109 loc) · 4.68 KB
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
import { describe, expect, it, beforeEach, jest, afterEach } from "@jest/globals";
import nodeHelperObj from "./node_helper.js";
import type { OneDriveMediaItem } from "./types/type";
const createMockOneDrivePhotos = (num: number) => Array(num).fill({})
.map((_, i) => ({
id: "photo" + i,
mediaMetadata: {
dateTimeOriginal: new Date().toISOString(),
},
mimeType: "image/jpeg",
} as OneDriveMediaItem));
const mockGetImageFromAlbum = jest.fn();
jest.mock("./OneDrivePhotos.js", () =>
jest.fn(() => ({
on: jest.fn(),
getAlbums: async () => Promise.resolve([]),
getAlbumThumbnail: async () => Promise.resolve("mock-thumbnail-url"),
getImageFromAlbum: mockGetImageFromAlbum,
}))
);
describe("nodeHelperObj", () => {
let helper: InstanceType<typeof nodeHelperObj>;
beforeEach(async () => {
mockGetImageFromAlbum.mockImplementation((id: string) =>
Promise.resolve(createMockOneDrivePhotos(10).map((photo) => ({ ...photo, albumId: "album" + id })))
);
helper = new nodeHelperObj();
// Provide a minimal config for initializeAfterLoading
const config = { albums: [], updateInterval: 60000, sort: "new", condition: {}, showWidth: 1080, showHeight: 1920, timeFormat: "YYYY/MM/DD HH:mm" };
helper.readFileSafe = jest.fn(() => Promise.resolve(""));
helper.writeFileSafe = jest.fn(() => Promise.resolve());
helper.saveCacheConfig = jest.fn(() => Promise.resolve());
helper.sendSocketNotification = jest.fn(() => Promise.resolve());
const mockTryToIntitialize = jest.fn(() => Promise.resolve()) as any;
mockTryToIntitialize.initializeTimer = null;
helper.tryToIntitialize = mockTryToIntitialize;
await helper.initializeAfterLoading(config);
helper.localPhotoList = createMockOneDrivePhotos(10);
helper.photoRefreshPointer = 0;
jest.clearAllMocks();
});
afterEach(() => {
jest.clearAllMocks();
helper?.stop();
helper = null;
});
describe("getImageList", () => {
it("should increase photoRefreshPointer after getImageList call", async () => {
helper.localPhotoList = createMockOneDrivePhotos(20);
helper.selectedAlbums = Array(10).fill({})
.map((_, i) => ({ id: "album" + i, title: "album" + i }));
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
expect(helper.photoRefreshPointer).toBe(7);
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBe(14);
await helper.getImageList();
expect(helper.localPhotoList.length).toBe(100);
expect(helper.photoRefreshPointer).toBe(34);
});
it("should filter out non image mimetype items", async () => {
const mimeMap = [
"image/jpeg",
"image/heic",
"image/png",
"image/gif",
"video/quicktime",
"text/plain",
"unknown",
];
mockGetImageFromAlbum.mockImplementation((id: string, validator: (photo: OneDriveMediaItem) => boolean) =>
Promise.resolve(createMockOneDrivePhotos(mimeMap.length * 3)
.map((photo, i) => ({
...photo,
albumId: "album" + id,
mimeType: mimeMap[i % mimeMap.length],
}))
.filter(validator))
);
helper.selectedAlbums = Array(3).fill({})
.map((_, i) => ({ id: "album" + i, title: "album" + i }));
await helper.getImageList();
expect(helper.localPhotoList.length).toBe(36); // 3 albums * 3 items * 4 valid mime types
});
});
describe("prepAndSendChunk", () => {
it("should reset photoRefreshPointer from 0 with remaining", async () => {
helper.localPhotoList = createMockOneDrivePhotos(19);
helper.photoRefreshPointer = 100; // Out of bounds
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
expect(helper.photoRefreshPointer).toBe(7);
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
expect(helper.photoRefreshPointer).toBe(14);
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
expect(helper.photoRefreshPointer).toBe(19);
await helper.prepAndSendChunk(7);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
expect(helper.photoRefreshPointer).toBe(7);
});
it("should handle photoRefreshPointer < 0", async () => {
helper.photoRefreshPointer = -10;
await helper.prepAndSendChunk(5);
expect(helper.photoRefreshPointer).toBeLessThanOrEqual(helper.localPhotoList.length);
});
});
});