Skip to content

Commit 22c03b4

Browse files
feat: add registerLoginHandler func (#23)
* feat(sdk): add registerLoginHandler function * refactor(sdk): better naming * refactor(sdk): prettier * refactor(sdk): reviews * refactor(sdk): prettier * fix(sdk): set origin to testbox * feat(sdk): implement test cases for new register login handler feature * refactor: reviews * refactor(sdk): prettier pt III * refactor(sdk): remove log --------- Co-authored-by: Lucas Soranzo <lucasdeonsoranzo@gmail.com>
1 parent 4d432ca commit 22c03b4

13 files changed

Lines changed: 16546 additions & 131 deletions

File tree

cypress/cdn.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { registerLoginHandler, startTestBox } from "../src";
2+
3+
declare global {
4+
interface Window {
5+
test_fakeLoginHandler: any;
6+
test_startTestBox: any;
7+
test_registerLoginHandler: any;
8+
test_baseTbxConfig: {
9+
targetOrigin: string;
10+
allowFullStory: boolean;
11+
}
12+
}
13+
}
14+
15+
async function fakeLoginHandler(props) {
16+
console.log("Fake login handler called with", props);
17+
return true;
18+
}
19+
20+
window.test_fakeLoginHandler = fakeLoginHandler;
21+
window.test_startTestBox = startTestBox
22+
window.test_registerLoginHandler = registerLoginHandler
23+
window.test_baseTbxConfig = {
24+
targetOrigin: "localhost",
25+
allowFullStory: true
26+
}

cypress/e2e/spec.cy.ts

Lines changed: 133 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,140 @@
1-
describe('testbox script', () => {
2-
it('sends message to TestBox', () => {
3-
cy.visit('http://localhost:8080', {
4-
onBeforeLoad: (win) => {
5-
cy.spy(win.parent, "postMessage").as("postMessage");
6-
}
7-
});
8-
9-
cy.get('@postMessage').should('have.been.calledOnceWith', {
1+
const BASE_URL = "http://localhost:8080";
2+
const spyPostMessage = (win) => {
3+
cy.spy(win.parent, "postMessage").as("postMessage");
4+
};
5+
const spyLoginHandler = (win) => {
6+
cy.spy(win, "test_fakeLoginHandler").as("loginHandler");
7+
};
8+
const assertInitializeCall = () =>
9+
cy.get("@postMessage").should(
10+
"have.been.calledOnceWith",
11+
{
1012
testbox: {
1113
version: 1,
1214
sender: "partner",
1315
event: "initialize-request",
1416
data: undefined,
17+
},
18+
},
19+
"*"
20+
);
21+
22+
const fakeLoginMessage = () => ({
23+
testbox: {
24+
version: 1,
25+
sender: "app",
26+
event: "login",
27+
data: {
28+
email: "testuser1@tbxofficial.com",
29+
password: "password",
30+
first_name: "Test",
31+
last_name: "User 1",
32+
},
33+
},
34+
}
35+
)
36+
const fakeLoginMessageStringified = JSON.stringify(fakeLoginMessage())
37+
38+
describe("testbox script", () => {
39+
it("Sends initialize to TestBox", () => {
40+
cy.visit(BASE_URL, {
41+
onBeforeLoad: spyPostMessage,
42+
});
43+
44+
cy.window().then((win) => {
45+
win.eval(`test_startTestBox(window.test_baseTbxConfig);`);
46+
});
47+
48+
assertInitializeCall();
49+
});
50+
51+
it("Login handler registered on start", () => {
52+
cy.visit(BASE_URL, {
53+
onBeforeLoad: spyPostMessage,
54+
onLoad: spyLoginHandler,
55+
});
56+
57+
cy.window().then((win) => {
58+
win.eval(
59+
`test_startTestBox({ ...window.test_baseTbxConfig, loginHandler: window.test_fakeLoginHandler });`
60+
);
61+
});
62+
63+
assertInitializeCall();
64+
65+
cy.window().then((win) => {
66+
win.eval(`postMessage(${fakeLoginMessageStringified})`);
67+
});
68+
69+
cy.get("@loginHandler").should("have.been.calledOnceWith", fakeLoginMessage().testbox.data);
70+
});
71+
72+
it("Login handler register after login message", () => {
73+
cy.visit(BASE_URL, {
74+
onBeforeLoad: spyPostMessage,
75+
onLoad: spyLoginHandler,
76+
});
77+
78+
cy.window().then((win) => {
79+
win.eval(`test_startTestBox(window.test_baseTbxConfig);`);
80+
});
81+
82+
assertInitializeCall();
83+
84+
cy.window().then((win) => {
85+
win.eval(`
86+
postMessage(${fakeLoginMessageStringified});`);
87+
win.eval("window.test_registerLoginHandler(window.test_fakeLoginHandler);");
88+
});
89+
90+
cy.get("@loginHandler").should("have.been.calledOnceWith", fakeLoginMessage().testbox.data);
91+
});
92+
93+
it("Login handler register before login message", () => {
94+
cy.visit(BASE_URL, {
95+
onBeforeLoad: spyPostMessage,
96+
onLoad: spyLoginHandler,
97+
});
98+
99+
cy.window().then((win) => {
100+
win.eval(`test_startTestBox(window.test_baseTbxConfig);`);
101+
});
102+
103+
assertInitializeCall();
104+
105+
cy.window().then((win) => {
106+
win.eval("window.test_registerLoginHandler(window.test_fakeLoginHandler);");
107+
win.eval(`
108+
postMessage(${fakeLoginMessageStringified});`);
109+
});
110+
111+
cy.get("@loginHandler").should("have.been.calledOnceWith", fakeLoginMessage().testbox.data);
112+
});
113+
114+
it("Login event waiting for more than 10 seconds", () => {
115+
cy.visit(BASE_URL, {
116+
onBeforeLoad: spyPostMessage,
117+
onLoad: spyLoginHandler,
118+
});
119+
120+
cy.window().then((win) => {
121+
win.eval(`test_startTestBox({...window.test_baseTbxConfig, window: window.parent });`);
122+
});
123+
124+
cy.window().then((win) => {
125+
win.eval(`
126+
postMessage(${fakeLoginMessageStringified});`);
127+
})
128+
129+
cy.wait(10500)
130+
131+
cy.get("@postMessage").should("have.been.calledWith", {
132+
testbox: {
133+
version: 1,
134+
event: "login-fail",
135+
data: { message: "Failed to log in." },
136+
sender: "partner"
15137
}
16-
}, "*");
17-
})
138+
});
139+
});
18140
});

cypress/tsconfig.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es6",
4+
"lib": ["es6", "dom"],
5+
"types": ["cypress", "node"]
6+
},
7+
"include": ["**/*.ts"]
8+
}

0 commit comments

Comments
 (0)