Skip to content

Commit 410c933

Browse files
fix regression bug with events
1 parent 958b323 commit 410c933

File tree

3 files changed

+200
-2
lines changed

3 files changed

+200
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "oc-client-browser",
3-
"version": "2.0.3",
3+
"version": "2.0.4",
44
"description": "OC browser client",
55
"main": "index.js",
66
"types": "index.d.ts",

src/oc-client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ export function createOc(oc) {
363363
fire(key, data) {
364364
if (listeners[key]) {
365365
for (let cb of listeners[key]) {
366-
cb(data, data);
366+
cb({ type: key }, data);
367367
}
368368
}
369369
},

tests/events.spec.js

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
/* globals window */
2+
import { expect, test } from "@playwright/test";
3+
4+
test.beforeEach(async ({ page }) => {
5+
await page.goto("/");
6+
});
7+
8+
test.describe("oc-client : events", () => {
9+
test.beforeEach(async ({ page }) => {
10+
// Set up the test environment
11+
await page.evaluate(() => {
12+
// Store original console log to suppress it
13+
window.originalConsoleLog = console.log;
14+
console.log = () => {};
15+
});
16+
});
17+
18+
test.afterEach(async ({ page }) => {
19+
// Clean up after each test
20+
await page.evaluate(() => {
21+
// Restore original functions
22+
console.log = window.originalConsoleLog;
23+
24+
// Clean up oc state
25+
oc.events.reset();
26+
27+
// Clean up test variables
28+
delete window.originalConsoleLog;
29+
delete window.eventData;
30+
});
31+
});
32+
33+
test("should fire events with correct event object structure", async ({
34+
page,
35+
}) => {
36+
const result = await page.evaluate(() => {
37+
return new Promise((resolve) => {
38+
// Track event data
39+
window.eventData = [];
40+
41+
// Set up event listeners
42+
oc.events.on("test:event", (event, data) => {
43+
window.eventData.push({
44+
eventType: event.type,
45+
eventObject: event,
46+
data: data,
47+
});
48+
});
49+
50+
oc.events.on("another:event", (event, data) => {
51+
window.eventData.push({
52+
eventType: event.type,
53+
eventObject: event,
54+
data: data,
55+
});
56+
});
57+
58+
// Fire events
59+
oc.events.fire("test:event", { message: "Hello World" });
60+
oc.events.fire("another:event", { status: "success" });
61+
62+
// Resolve after a short delay to ensure events are processed
63+
setTimeout(() => {
64+
resolve({
65+
eventCount: window.eventData.length,
66+
events: window.eventData,
67+
});
68+
}, 10);
69+
});
70+
});
71+
72+
// Verify the results
73+
expect(result.eventCount).toBe(2);
74+
75+
// Check first event
76+
expect(result.events[0].eventType).toBe("test:event");
77+
expect(result.events[0].eventObject).toEqual({ type: "test:event" });
78+
expect(result.events[0].data).toEqual({ message: "Hello World" });
79+
80+
// Check second event
81+
expect(result.events[1].eventType).toBe("another:event");
82+
expect(result.events[1].eventObject).toEqual({ type: "another:event" });
83+
expect(result.events[1].data).toEqual({ status: "success" });
84+
});
85+
86+
test("should handle multiple listeners for the same event", async ({
87+
page,
88+
}) => {
89+
const result = await page.evaluate(() => {
90+
return new Promise((resolve) => {
91+
// Track event data
92+
window.eventData = [];
93+
94+
// Set up multiple listeners for the same event
95+
oc.events.on("multi:event", (event, data) => {
96+
window.eventData.push({
97+
listener: "first",
98+
eventType: event.type,
99+
data: data,
100+
});
101+
});
102+
103+
oc.events.on("multi:event", (event, data) => {
104+
window.eventData.push({
105+
listener: "second",
106+
eventType: event.type,
107+
data: data,
108+
});
109+
});
110+
111+
// Fire event
112+
oc.events.fire("multi:event", { count: 42 });
113+
114+
// Resolve after a short delay to ensure events are processed
115+
setTimeout(() => {
116+
resolve({
117+
eventCount: window.eventData.length,
118+
events: window.eventData,
119+
});
120+
}, 10);
121+
});
122+
});
123+
124+
// Verify the results
125+
expect(result.eventCount).toBe(2);
126+
127+
// Check both listeners were called
128+
expect(result.events[0].listener).toBe("first");
129+
expect(result.events[0].eventType).toBe("multi:event");
130+
expect(result.events[0].data).toEqual({ count: 42 });
131+
132+
expect(result.events[1].listener).toBe("second");
133+
expect(result.events[1].eventType).toBe("multi:event");
134+
expect(result.events[1].data).toEqual({ count: 42 });
135+
});
136+
137+
test("should handle events with no data", async ({ page }) => {
138+
const result = await page.evaluate(() => {
139+
return new Promise((resolve) => {
140+
// Track event data
141+
window.eventData = null;
142+
143+
// Set up event listener
144+
oc.events.on("empty:event", (event, data) => {
145+
window.eventData = {
146+
eventType: event.type,
147+
eventObject: event,
148+
data: data,
149+
};
150+
});
151+
152+
// Fire event with no data
153+
oc.events.fire("empty:event");
154+
155+
// Resolve after a short delay to ensure events are processed
156+
setTimeout(() => {
157+
resolve(window.eventData);
158+
}, 10);
159+
});
160+
});
161+
162+
// Verify the results
163+
expect(result.eventType).toBe("empty:event");
164+
expect(result.eventObject).toEqual({ type: "empty:event" });
165+
expect(result.data).toBeUndefined();
166+
});
167+
168+
test("should handle events with null data", async ({ page }) => {
169+
const result = await page.evaluate(() => {
170+
return new Promise((resolve) => {
171+
// Track event data
172+
window.eventData = null;
173+
174+
// Set up event listener
175+
oc.events.on("null:event", (event, data) => {
176+
window.eventData = {
177+
eventType: event.type,
178+
eventObject: event,
179+
data: data,
180+
};
181+
});
182+
183+
// Fire event with null data
184+
oc.events.fire("null:event", null);
185+
186+
// Resolve after a short delay to ensure events are processed
187+
setTimeout(() => {
188+
resolve(window.eventData);
189+
}, 10);
190+
});
191+
});
192+
193+
// Verify the results
194+
expect(result.eventType).toBe("null:event");
195+
expect(result.eventObject).toEqual({ type: "null:event" });
196+
expect(result.data).toBeNull();
197+
});
198+
});

0 commit comments

Comments
 (0)