Skip to content

Commit 412e5c2

Browse files
committed
fixes sonarqube issues
1 parent b89a93f commit 412e5c2

File tree

14 files changed

+147
-944
lines changed

14 files changed

+147
-944
lines changed

packages/react-native/src/lib/common/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export class ApiClient {
101101
> {
102102
return makeRequest(
103103
this.appUrl,
104-
`/api/v1/client/${this.environmentId}/environment?rand-${Date.now()}=true`,
104+
`/api/v1/client/${this.environmentId}/environment`,
105105
"GET",
106106
undefined,
107107
this.isDebug

packages/react-native/src/lib/common/setup.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,6 @@ export const tearDown = async (): Promise<void> => {
311311
filteredSurveys,
312312
});
313313

314-
setIsSetup(false);
315314
removeAllEventListeners();
316315
};
317316

packages/react-native/src/lib/common/tests/command-queue.test.ts

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { beforeEach, describe, expect, test, vi } from "vitest";
22
import { CommandQueue } from "@/lib/common/command-queue";
33
import { checkSetup } from "@/lib/common/setup";
44
import { type Result } from "@/types/error";
5+
import { delayedResult } from "../utils";
56

67
// Mock the setup module so we can control checkSetup()
78
vi.mock("@/lib/common/setup", () => ({
@@ -21,24 +22,18 @@ describe("CommandQueue", () => {
2122
test("executes commands in FIFO order", async () => {
2223
const executionOrder: string[] = [];
2324

24-
function delayedResult<T>(value: T, delayMs = 10): Promise<T> {
25-
return new Promise((resolve) =>
26-
setTimeout(() => resolve(value), delayMs)
27-
);
28-
}
29-
3025
// Mock commands with proper Result returns
3126
const cmdA = vi.fn(async (): Promise<Result<void, unknown>> => {
3227
executionOrder.push("A");
33-
return delayedResult({ ok: true, data: undefined });
28+
return delayedResult({ ok: true, data: undefined }, 10);
3429
});
3530
const cmdB = vi.fn(async (): Promise<Result<void, unknown>> => {
3631
executionOrder.push("B");
37-
return delayedResult({ ok: true, data: undefined });
32+
return delayedResult({ ok: true, data: undefined }, 10);
3833
});
3934
const cmdC = vi.fn(async (): Promise<Result<void, unknown>> => {
4035
executionOrder.push("C");
41-
return delayedResult({ ok: true, data: undefined });
36+
return delayedResult({ ok: true, data: undefined }, 10);
4237
});
4338

4439
// We'll assume checkSetup always ok for this test
@@ -57,11 +52,7 @@ describe("CommandQueue", () => {
5752

5853
test("skips execution if checkSetup() fails", async () => {
5954
const cmd = vi.fn(async (): Promise<void> => {
60-
return new Promise((resolve) => {
61-
setTimeout(() => {
62-
resolve();
63-
}, 10);
64-
});
55+
return delayedResult(undefined, 10);
6556
});
6657

6758
// Force checkSetup to fail
@@ -82,11 +73,7 @@ describe("CommandQueue", () => {
8273

8374
test("executes command if checkSetup is false (no check)", async () => {
8475
const cmd = vi.fn(async (): Promise<Result<void, unknown>> => {
85-
return new Promise((resolve) => {
86-
setTimeout(() => {
87-
resolve({ ok: true, data: undefined });
88-
}, 10);
89-
});
76+
return delayedResult({ ok: true, data: undefined }, 10);
9077
});
9178

9279
// checkSetup is irrelevant in this scenario, but let's mock it anyway
@@ -115,11 +102,7 @@ describe("CommandQueue", () => {
115102

116103
// Mock command that fails
117104
const failingCmd = vi.fn(async () => {
118-
await new Promise((resolve) => {
119-
setTimeout(() => {
120-
resolve("some error");
121-
}, 10);
122-
});
105+
await delayedResult("some error", 10);
123106

124107
throw new Error("some error");
125108
});
@@ -136,18 +119,10 @@ describe("CommandQueue", () => {
136119

137120
test("resolves wait() after all commands complete", async () => {
138121
const cmd1 = vi.fn(async (): Promise<Result<void, unknown>> => {
139-
return new Promise((resolve) => {
140-
setTimeout(() => {
141-
resolve({ ok: true, data: undefined });
142-
}, 10);
143-
});
122+
return delayedResult({ ok: true, data: undefined }, 10);
144123
});
145124
const cmd2 = vi.fn(async (): Promise<Result<void, unknown>> => {
146-
return new Promise((resolve) => {
147-
setTimeout(() => {
148-
resolve({ ok: true, data: undefined });
149-
}, 10);
150-
});
125+
return delayedResult({ ok: true, data: undefined }, 10);
151126
});
152127

153128
vi.mocked(checkSetup).mockReturnValue({ ok: true, data: undefined });

packages/react-native/src/lib/common/tests/config.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ describe("RNConfig", () => {
2929
vi.restoreAllMocks();
3030
});
3131

32-
test("getInstance() returns a singleton", () => {
33-
const secondInstance = RNConfig.getInstance();
32+
test("getInstance() returns a singleton", async () => {
33+
const secondInstance = await RNConfig.getInstance();
3434
expect(configInstance).toBe(secondInstance);
3535
});
3636

packages/react-native/src/lib/common/tests/utils.test.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
mockSurveyId,
66
} from "@/lib/common/tests/__mocks__/config.mock";
77
import {
8+
delayedResult,
89
diffInDays,
910
filterSurveys,
1011
getDefaultLanguageCode,
@@ -25,10 +26,6 @@ const mockSurveyId2 = "qo9rwjmms42hoy3k85fp8vgu";
2526
const mockSegmentId1 = "p6yrnz3s2tvoe5r0l28unq7k";
2627
const mockSegmentId2 = "wz43zrxeddhb1uo9cicustar";
2728

28-
function delay(ms: number) {
29-
return new Promise((resolve) => setTimeout(resolve, ms));
30-
}
31-
3229
describe("utils.ts", () => {
3330
// ---------------------------------------------------------------------------------
3431
// diffInDays
@@ -58,7 +55,7 @@ describe("utils.ts", () => {
5855
describe("wrapThrowsAsync()", () => {
5956
test("returns ok on success", async () => {
6057
const fn = vi.fn(async (x: number) => {
61-
await delay(10);
58+
await delayedResult(null, 10);
6259
return x * 2;
6360
});
6461

@@ -73,7 +70,7 @@ describe("utils.ts", () => {
7370

7471
test("returns err on error", async () => {
7572
const fn = vi.fn(async () => {
76-
await delay(10);
73+
await delayedResult(null, 10);
7774
throw new Error("Something broke");
7875
});
7976
const wrapped = wrapThrowsAsync(fn);
@@ -422,4 +419,17 @@ describe("utils.ts", () => {
422419
mockedRandom.mockRestore();
423420
});
424421
});
422+
423+
// ---------------------------------------------------------------------------------
424+
// delayedResult
425+
// ---------------------------------------------------------------------------------
426+
describe("delayedResult()", () => {
427+
test("returns the value after the delay", async () => {
428+
const result = await delayedResult(10, 10);
429+
expect(result).toBe(10);
430+
431+
const result2 = await delayedResult(20, 20);
432+
expect(result2).toBe(20);
433+
});
434+
});
425435
});

packages/react-native/src/lib/common/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,7 @@ export const shouldDisplayBasedOnPercentage = (
188188
export const isNowExpired = (expirationDate: Date): boolean => {
189189
return new Date() >= expirationDate;
190190
};
191+
192+
export const delayedResult = async <T>(value: T, ms: number): Promise<T> => {
193+
return new Promise((resolve) => setTimeout(() => resolve(value), ms));
194+
};

packages/react-native/src/lib/environment/tests/state.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,10 @@ describe("environment/state.ts", () => {
286286
expect(mockConfig.update).not.toHaveBeenCalled();
287287
});
288288

289-
test("clears interval when clearEnvironmentStateExpiryCheckListener is called", () => {
289+
test("clears interval when clearEnvironmentStateExpiryCheckListener is called", async () => {
290290
const clearIntervalSpy = vi.spyOn(global, "clearInterval");
291291

292-
addEnvironmentStateExpiryCheckListener();
292+
await addEnvironmentStateExpiryCheckListener();
293293
clearEnvironmentStateExpiryCheckListener();
294294

295295
expect(clearIntervalSpy).toHaveBeenCalled();

packages/react-native/src/lib/survey/tests/action.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,21 +122,21 @@ describe("survey/action.ts", () => {
122122
});
123123
});
124124

125-
test("triggers survey associated with action name", () => {
125+
test("triggers survey associated with action name", async () => {
126126
(shouldDisplayBasedOnPercentage as unknown as Mock).mockReturnValue(true);
127127

128-
trackAction("testAction");
128+
await trackAction("testAction");
129129

130130
// Ensure triggerSurvey is called for the matching survey
131131
expect(mockSurveyStore.setSurvey).toHaveBeenCalledWith(mockSurvey);
132132
});
133133

134-
test("does not trigger survey if no active surveys are found", () => {
134+
test("does not trigger survey if no active surveys are found", async () => {
135135
mockAppConfig.get.mockReturnValue({
136136
filteredSurveys: [],
137137
});
138138

139-
trackAction("testAction");
139+
await trackAction("testAction");
140140

141141
// Ensure no surveys are triggered
142142
expect(mockSurveyStore.setSurvey).not.toHaveBeenCalled();
@@ -145,8 +145,8 @@ describe("survey/action.ts", () => {
145145
);
146146
});
147147

148-
test("logs tracked action name", () => {
149-
trackAction("testAction");
148+
test("logs tracked action name", async () => {
149+
await trackAction("testAction");
150150

151151
expect(mockLogger.debug).toHaveBeenCalledWith(
152152
'Formbricks: Action "testAction" tracked'

packages/react-native/src/lib/user/tests/attribute.test.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { beforeEach, describe, expect, test, vi } from "vitest";
22
import { setAttributes } from "@/lib/user/attribute";
33
import { UpdateQueue } from "@/lib/user/update-queue";
4+
import { delayedResult } from "@/lib/common/utils";
45

56
export const mockAttributes = {
67
name: "John Doe",
@@ -17,10 +18,6 @@ vi.mock("@/lib/user/update-queue", () => ({
1718
},
1819
}));
1920

20-
function delay(ms: number) {
21-
return new Promise((resolve) => setTimeout(resolve, ms));
22-
}
23-
2421
describe("User Attributes", () => {
2522
const mockUpdateQueue = {
2623
updateAttributes: vi.fn(),
@@ -73,7 +70,9 @@ describe("User Attributes", () => {
7370
const attributes = { name: mockAttributes.name };
7471

7572
// Mock processUpdates to be async
76-
mockUpdateQueue.processUpdates.mockImplementation(() => delay(100));
73+
mockUpdateQueue.processUpdates.mockImplementation(() =>
74+
delayedResult(undefined, 100)
75+
);
7776

7877
const result = await setAttributes(attributes);
7978

packages/react-native/src/lib/user/tests/state.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ describe("User State Expiry Check Listener", () => {
3838
clearUserStateExpiryCheckListener(); // Ensure cleanup after each test
3939
});
4040

41-
test("should set an interval if not already set and update user state expiry when userId exists", () => {
41+
test("should set an interval if not already set and update user state expiry when userId exists", async () => {
4242
const mockConfig = {
4343
get: vi.fn().mockReturnValue({
4444
user: { data: { userId: mockUserId } },
@@ -48,7 +48,7 @@ describe("User State Expiry Check Listener", () => {
4848

4949
mockRNConfig.mockReturnValue(mockConfig as unknown as Promise<RNConfig>);
5050

51-
addUserStateExpiryCheckListener();
51+
await addUserStateExpiryCheckListener();
5252

5353
// Fast-forward time by 1 minute (60,000 ms)
5454
vi.advanceTimersByTime(60_000);
@@ -78,7 +78,7 @@ describe("User State Expiry Check Listener", () => {
7878
expect(mockConfig.update).not.toHaveBeenCalled(); // Ensures no update when no userId
7979
});
8080

81-
test("should not set multiple intervals if already set", () => {
81+
test("should not set multiple intervals if already set", async () => {
8282
const mockConfig = {
8383
get: vi.fn().mockReturnValue({
8484
user: { data: { userId: mockUserId } },
@@ -88,8 +88,8 @@ describe("User State Expiry Check Listener", () => {
8888

8989
mockRNConfig.mockReturnValue(mockConfig as unknown as Promise<RNConfig>);
9090

91-
addUserStateExpiryCheckListener();
92-
addUserStateExpiryCheckListener(); // Call again to check if it prevents multiple intervals
91+
await addUserStateExpiryCheckListener();
92+
await addUserStateExpiryCheckListener(); // Call again to check if it prevents multiple intervals
9393

9494
vi.advanceTimersByTime(60_000); // Fast-forward 1 minute
9595

0 commit comments

Comments
 (0)