forked from baron/baron-sso
fix userfront verify link routing
This commit is contained in:
@@ -252,9 +252,8 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
|
||||
await page.goto('/ko/l/AB123456');
|
||||
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect.poll(() => verifyRequests.length, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
expect(verifyRequests[0].path).toContain(
|
||||
'/api/v1/auth/login/code/verify-short',
|
||||
@@ -270,7 +269,7 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
});
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
await expect(page).not.toHaveURL(/\/signin(?:\?.*)?$/);
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
@@ -295,8 +294,8 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
|
||||
await page.goto('/ko/l/AB123456');
|
||||
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect.poll(() => verifyCalls, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
|
||||
const viewport = page.viewportSize();
|
||||
@@ -311,11 +310,85 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
expect(userMeCalls).toBe(0);
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
await expect(page).not.toHaveURL(/\/signin(?:\?.*)?$/);
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
|
||||
test('루트/로그인에 붙은 인증 payload는 전용 verify 라우트에서만 소비하고 완료 URL을 정리한다', async ({
|
||||
page,
|
||||
}) => {
|
||||
let userMeCalls = 0;
|
||||
const verifyRequests: Array<{
|
||||
path: string;
|
||||
body: Record<string, unknown>;
|
||||
}> = [];
|
||||
const clientFailures = collectClientFailures(page);
|
||||
|
||||
await mockUserfrontApis(page, {
|
||||
sessionStatus: 401,
|
||||
captureUserMe: () => {
|
||||
userMeCalls += 1;
|
||||
},
|
||||
captureVerify: (path, body) => {
|
||||
verifyRequests.push({ path, body });
|
||||
},
|
||||
});
|
||||
|
||||
await page.goto(
|
||||
'/?loginId=e2e%40example.com&code=654321&pendingRef=pending-root&utm=drop',
|
||||
);
|
||||
await expect.poll(() => verifyRequests.length, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
expect(verifyRequests[0].path).toContain('/api/v1/auth/login/code/verify');
|
||||
expect(verifyRequests[0].body).toMatchObject({
|
||||
loginId: 'e2e@example.com',
|
||||
code: '654321',
|
||||
pendingRef: 'pending-root',
|
||||
verifyOnly: true,
|
||||
});
|
||||
expect(page.url()).not.toContain('loginId=');
|
||||
expect(page.url()).not.toContain('code=');
|
||||
expect(page.url()).not.toContain('pendingRef=');
|
||||
expect(page.url()).not.toContain('utm=');
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
|
||||
test('로그인 페이지에 붙은 인증 payload도 전용 verify 라우트로 넘긴다', async ({
|
||||
page,
|
||||
}) => {
|
||||
let userMeCalls = 0;
|
||||
const verifyRequests: Array<{
|
||||
path: string;
|
||||
body: Record<string, unknown>;
|
||||
}> = [];
|
||||
const clientFailures = collectClientFailures(page);
|
||||
|
||||
await mockUserfrontApis(page, {
|
||||
sessionStatus: 401,
|
||||
captureUserMe: () => {
|
||||
userMeCalls += 1;
|
||||
},
|
||||
captureVerify: (path, body) => {
|
||||
verifyRequests.push({ path, body });
|
||||
},
|
||||
});
|
||||
|
||||
await page.goto('/ko/signin?loginId=e2e%40example.com&code=999999');
|
||||
await expect.poll(() => verifyRequests.length, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
expect(verifyRequests[0].body).toMatchObject({
|
||||
loginId: 'e2e@example.com',
|
||||
code: '999999',
|
||||
verifyOnly: true,
|
||||
});
|
||||
expect(page.url()).not.toContain('loginId=');
|
||||
expect(page.url()).not.toContain('code=');
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
|
||||
test('verifyOnly 승인 링크를 팝업에서 닫으면 창만 닫히고 부모는 이동하지 않는다', async ({
|
||||
page,
|
||||
}, testInfo) => {
|
||||
@@ -346,8 +419,8 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
}, popupURL);
|
||||
const popup = await popupPromise;
|
||||
|
||||
await expect(popup).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
await expect.poll(() => verifyCalls, { timeout: 10_000 }).toBe(1);
|
||||
await expect(popup).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
|
||||
const viewport = popup.viewportSize();
|
||||
@@ -390,8 +463,8 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
|
||||
await page.goto('/ko/verify/e2e-email-token');
|
||||
|
||||
await expect(page).toHaveURL(/\/ko\/verify\/e2e-email-token$/);
|
||||
await expect.poll(() => verifyRequests.length, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
expect(verifyRequests[0].path).toContain('/api/v1/auth/magic-link/verify');
|
||||
expect(verifyRequests[0].body).toMatchObject({
|
||||
@@ -411,7 +484,7 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
expect(userMeCalls).toBe(0);
|
||||
await expect(page).toHaveURL(/\/ko\/verify\/e2e-email-token$/);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
await expect(page).not.toHaveURL(/\/signin(?:\?.*)?$/);
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
@@ -441,10 +514,8 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
'/ko/verify?loginId=e2e%40example.com&code=654321&pendingRef=pending-email',
|
||||
);
|
||||
|
||||
await expect(page).toHaveURL(
|
||||
/\/ko\/verify\?loginId=e2e(?:%40|@)example\.com&code=654321&pendingRef=pending-email$/,
|
||||
);
|
||||
await expect.poll(() => verifyRequests.length, { timeout: 10_000 }).toBe(1);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
expect(userMeCalls).toBe(0);
|
||||
expect(verifyRequests[0].path).toContain('/api/v1/auth/login/code/verify');
|
||||
expect(verifyRequests[0].body).toMatchObject({
|
||||
@@ -466,9 +537,7 @@ test.describe('UserFront WASM auth routing', () => {
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
expect(userMeCalls).toBe(0);
|
||||
await expect(page).toHaveURL(
|
||||
/\/ko\/verify\?loginId=e2e(?:%40|@)example\.com&code=654321&pendingRef=pending-email$/,
|
||||
);
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
await expect(page).not.toHaveURL(/\/signin(?:\?.*)?$/);
|
||||
expect(clientFailures).toEqual([]);
|
||||
});
|
||||
|
||||
@@ -226,6 +226,11 @@ test.describe('UserFront WASM route inventory (unauth)', () => {
|
||||
await expect(page).toHaveURL(/\/ko\/verification$/);
|
||||
});
|
||||
|
||||
test('route: /ko/verify-complete', async ({ page }) => {
|
||||
await page.goto('/ko/verify-complete');
|
||||
await expect(page).toHaveURL(/\/ko\/verify-complete$/);
|
||||
});
|
||||
|
||||
test('route: /ko/l/:shortCode', async ({ page }) => {
|
||||
await page.goto('/ko/l/AB123456');
|
||||
await expect(page).toHaveURL(/\/ko\/l\/AB123456$/);
|
||||
|
||||
Reference in New Issue
Block a user