-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathutilsWithoutFlattening.spec.js
124 lines (120 loc) · 4.15 KB
/
utilsWithoutFlattening.spec.js
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
const test = require("firebase-functions-test")({
projectId: process.env.GCLOUD_PROJECT,
});
describe("Utils", () => {
describe("typesenseDocumentFromSnapshot", () => {
describe("Parsing geopoint datatype", () => {
it("Do not parse into geopoint data type if object has other fields", async () => {
const typesenseDocumentFromSnapshot = (await import("../functions/src/utils.js")).typesenseDocumentFromSnapshot;
const data = {
title: "Title X",
author: null,
genres: ["comedy"],
location: {
country: "USA",
geohash: "abc",
latitude: 1,
longitude: 2,
},
};
const documentSnapshot = test.firestore.makeDocumentSnapshot(data, "id");
const result = await typesenseDocumentFromSnapshot(documentSnapshot, {}, []);
expect(result).toEqual({
id: "id",
title: "Title X",
author: null,
genres: ["comedy"],
location: {
country: "USA",
geohash: "abc",
latitude: 1,
longitude: 2,
},
});
});
});
describe("Nested fields extraction", () => {
it("extracts nested fields using dot notation", async () => {
const typesenseDocumentFromSnapshot = (await import("../functions/src/utils.js")).typesenseDocumentFromSnapshot;
const documentSnapshot = test.firestore.makeDocumentSnapshot(
{
user: {
name: "John Doe",
address: {
city: "New York",
country: "USA",
},
},
tags: ["tag1", "tag2"],
},
"id",
);
const result = await typesenseDocumentFromSnapshot(documentSnapshot, {}, ["user.name", "user.address.city", "tags"]);
expect(result).toEqual({
id: "id",
user: {name: "John Doe", address: {city: "New York"}},
tags: ["tag1", "tag2"],
});
});
it("handles missing nested fields gracefully", async () => {
const typesenseDocumentFromSnapshot = (await import("../functions/src/utils.js")).typesenseDocumentFromSnapshot;
const documentSnapshot = test.firestore.makeDocumentSnapshot(
{
user: {
name: "John Doe",
},
},
"id",
);
const result = await typesenseDocumentFromSnapshot(documentSnapshot, {}, ["user.name", "user.address.city"]);
expect(result).toEqual({
id: "id",
user: {
name: "John Doe",
},
});
});
it("extracts nested fields alongside top-level fields", async () => {
const typesenseDocumentFromSnapshot = (await import("../functions/src/utils.js")).typesenseDocumentFromSnapshot;
const documentSnapshot = test.firestore.makeDocumentSnapshot(
{
title: "Main Title",
user: {
name: "John Doe",
age: 30,
},
},
"id",
);
const result = await typesenseDocumentFromSnapshot(documentSnapshot, {}, ["title", "user.name"]);
expect(result).toEqual({
id: "id",
title: "Main Title",
user: {
name: "John Doe",
},
});
});
it("handles array indexing in dot notation", async () => {
const typesenseDocumentFromSnapshot = (await import("../functions/src/utils.js")).typesenseDocumentFromSnapshot;
const documentSnapshot = test.firestore.makeDocumentSnapshot(
{
comments: [
{author: "Alice", text: "Great post!"},
{author: "Bob", text: "Thanks for sharing.", likes: 5},
],
},
"id",
);
const result = await typesenseDocumentFromSnapshot(documentSnapshot, {}, ["comments.author", "comments.text", "comments.likes"]);
expect(result).toEqual({
id: "id",
comments: [
{author: "Alice", text: "Great post!"},
{author: "Bob", text: "Thanks for sharing.", likes: 5},
],
});
});
});
});
});