Skip to content

Commit e814f6a

Browse files
committed
test: enhance tracking tests for web and native environments
1 parent 3bccfe2 commit e814f6a

File tree

3 files changed

+82
-5
lines changed

3 files changed

+82
-5
lines changed

src/client.spec.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,79 @@ describe("AptabaseClient", () => {
119119
expect(sessionId3).toBeDefined();
120120
expect(sessionId3).not.toBe(sessionId1);
121121
});
122+
123+
describe("Web tracking", () => {
124+
const webEnv: EnvironmentInfo = {
125+
...env,
126+
osName: "web",
127+
osVersion: "web",
128+
};
129+
130+
it("should not track events when web tracking is disabled", async () => {
131+
const client = new AptabaseClient("A-DEV-000", webEnv);
132+
client.trackEvent("test_event");
133+
await client.flush();
134+
expect(fetchMock.requests().length).toEqual(0);
135+
});
136+
137+
it("should track events when web tracking is enabled", async () => {
138+
const client = new AptabaseClient("A-DEV-000", webEnv, {
139+
enableWeb: true,
140+
});
141+
client.trackEvent("test_event");
142+
await client.flush();
143+
expect(fetchMock.requests().length).toEqual(1);
144+
const body = await fetchMock.requests().at(0)?.json();
145+
expect(body.eventName).toEqual("test_event");
146+
expect(body.systemProps.osName).toBeUndefined();
147+
expect(body.systemProps.osVersion).toBeUndefined();
148+
});
149+
150+
it("should use correct endpoint for web events", async () => {
151+
const client = new AptabaseClient("A-DEV-000", webEnv, {
152+
enableWeb: true,
153+
});
154+
client.trackEvent("test_event");
155+
await client.flush();
156+
const request = fetchMock.requests().at(0);
157+
expect(request?.url).toContain("/api/v0/event");
158+
});
159+
160+
it("should use correct endpoint for native events", async () => {
161+
const client = new AptabaseClient("A-DEV-000", env);
162+
client.trackEvent("test_event");
163+
await client.flush();
164+
const request = fetchMock.requests().at(0);
165+
expect(request?.url).toContain("/api/v0/events");
166+
});
167+
});
168+
169+
describe("Native tracking", () => {
170+
it("should track events on iOS", async () => {
171+
const client = new AptabaseClient("A-DEV-000", env);
172+
client.trackEvent("test_event");
173+
await client.flush();
174+
expect(fetchMock.requests().length).toEqual(1);
175+
const body = await fetchMock.requests().at(0)?.json();
176+
expect(body[0].eventName).toEqual("test_event");
177+
expect(body[0].systemProps.osName).toEqual("iOS");
178+
expect(body[0].systemProps.osVersion).toEqual("14.3");
179+
});
180+
181+
it("should track events on Android", async () => {
182+
const androidEnv: EnvironmentInfo = {
183+
...env,
184+
osName: "Android",
185+
osVersion: "13",
186+
};
187+
const client = new AptabaseClient("A-DEV-000", androidEnv);
188+
client.trackEvent("test_event");
189+
await client.flush();
190+
expect(fetchMock.requests().length).toEqual(1);
191+
const body = await fetchMock.requests().at(0)?.json();
192+
expect(body[0].eventName).toEqual("test_event");
193+
expect(body[0].systemProps.osName).toEqual("Android");
194+
expect(body[0].systemProps.osVersion).toEqual("13");
195+
});
196+
});
122197
});

src/client.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Platform } from "react-native";
21
import type { AptabaseOptions } from "./types";
32
import type { EnvironmentInfo } from "./env";
43
import { NativeEventDispatcher, WebEventDispatcher } from "./dispatcher";
@@ -24,7 +23,7 @@ export class AptabaseClient {
2423
this._env.appVersion = options.appVersion;
2524
}
2625

27-
const isWeb = Platform.OS === "web";
26+
const isWeb = this._env.osName === "web";
2827
const isWebTrackingEnabled = isWeb && options?.enableWeb === true;
2928

3029
console.log("isWebTrackingEnabled", isWebTrackingEnabled);
@@ -47,15 +46,17 @@ export class AptabaseClient {
4746
) {
4847
if (!this._dispatcher) return;
4948

49+
const isWeb = this._env.osName === "web";
50+
5051
this._dispatcher.enqueue({
5152
timestamp: new Date().toISOString(),
5253
sessionId: this.evalSessionId(),
5354
eventName: eventName,
5455
systemProps: {
5556
isDebug: this._env.isDebug,
5657
locale: this._env.locale,
57-
osName: this._env.osName,
58-
osVersion: this._env.osVersion,
58+
osName: isWeb ? undefined : this._env.osName,
59+
osVersion: isWeb ? undefined : this._env.osVersion,
5960
appVersion: this._env.appVersion,
6061
appBuildNumber: this._env.appBuildNumber,
6162
sdkVersion: this._env.sdkVersion,

src/env.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ export function getEnvironmentInfo(): EnvironmentInfo {
4040
return ["iPadOS", Platform.Version];
4141
}
4242
return ["iOS", Platform.Version];
43-
// Web needs to be empty as the server computes these values using the user agent
43+
case "web":
44+
return ["web", ""];
4445
default:
4546
return ["", ""];
4647
}

0 commit comments

Comments
 (0)