Skip to content

Commit e95e616

Browse files
committed
Add haveParametersChanged util
1 parent 175289e commit e95e616

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

src/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,20 @@ export function extractNextParameters<
5959
}
6060
}
6161

62+
export function haveParametersChanged(
63+
parameters: Record<string, unknown>,
64+
nextParameters: Record<string, unknown>,
65+
) {
66+
const keys = [
67+
...Object.keys(parameters),
68+
...Object.keys(nextParameters),
69+
];
70+
const uniqueKeys = new Set(keys);
71+
return [...uniqueKeys].some((key) =>
72+
`${parameters[key]}` !== `${nextParameters[key]}` // string comparison
73+
);
74+
}
75+
6276
function getSource() {
6377
const moduleSource = `serpapi@${version}`;
6478
try {

tests/utils_test.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
buildUrl,
2222
execute,
2323
extractNextParameters,
24+
haveParametersChanged,
2425
} from "../src/utils.ts";
2526

2627
loadSync({ export: true });
@@ -68,6 +69,106 @@ describe("extractNextParameters", () => {
6869
});
6970
});
7071

72+
describe("haveParametersChanged", () => {
73+
it("with different number of properties", () => {
74+
assertEquals(
75+
haveParametersChanged({ q: "coffee" }, {
76+
kl: "us-en",
77+
q: "coffee",
78+
start: "26",
79+
}),
80+
true,
81+
);
82+
assertEquals(
83+
haveParametersChanged({ kl: "us-en", q: "coffee", start: "26" }, {
84+
q: "coffee",
85+
}),
86+
true,
87+
);
88+
});
89+
90+
it("with same number of properties, but different properties", () => {
91+
assertEquals(
92+
haveParametersChanged({
93+
kl: "us-en",
94+
q: "coffee",
95+
safe: "1",
96+
}, {
97+
kl: "us-en",
98+
q: "coffee",
99+
start: "26",
100+
}),
101+
true,
102+
);
103+
});
104+
105+
it("with same properties, but different values", () => {
106+
assertEquals(
107+
haveParametersChanged({
108+
kl: "us-en",
109+
q: "coffee",
110+
start: "30",
111+
}, {
112+
kl: "us-en",
113+
q: "coffee",
114+
start: "26",
115+
}),
116+
true,
117+
);
118+
assertEquals(
119+
haveParametersChanged({
120+
kl: "us-en",
121+
q: "coffee",
122+
start: "26",
123+
}, {
124+
kl: "us-en",
125+
q: "coffee",
126+
start: "30",
127+
}),
128+
true,
129+
);
130+
});
131+
132+
it("with same properties and same values, regardless of type", () => {
133+
assertEquals(
134+
haveParametersChanged({
135+
kl: "us-en",
136+
q: "coffee",
137+
start: "30",
138+
}, {
139+
kl: "us-en",
140+
q: "coffee",
141+
start: "30",
142+
}),
143+
false,
144+
);
145+
assertEquals(
146+
haveParametersChanged({
147+
kl: "us-en",
148+
q: "coffee",
149+
start: 30,
150+
}, {
151+
kl: "us-en",
152+
q: "coffee",
153+
start: "30",
154+
}),
155+
false,
156+
);
157+
assertEquals(
158+
haveParametersChanged({
159+
kl: "us-en",
160+
q: "coffee",
161+
start: "30",
162+
}, {
163+
kl: "us-en",
164+
q: "coffee",
165+
start: 30,
166+
}),
167+
false,
168+
);
169+
});
170+
});
171+
71172
describe("buildUrl", () => {
72173
let urlStub: Stub;
73174

0 commit comments

Comments
 (0)