86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import {
|
|
clearCreationUrlState,
|
|
readCreationUrlState,
|
|
writeCreationUrlState,
|
|
} from './creationUrlState';
|
|
|
|
describe('creationUrlState', () => {
|
|
it('writes and reads restore state on creation restore paths', () => {
|
|
const replaceState = vi.fn();
|
|
const env = {
|
|
location: {
|
|
pathname: '/creation/puzzle/result',
|
|
search: '?clientRuntime=wechat_mini_program',
|
|
},
|
|
history: { replaceState },
|
|
};
|
|
|
|
writeCreationUrlState(
|
|
{
|
|
sessionId: ' session-1 ',
|
|
profileId: 'profile-1',
|
|
draftId: 'draft-1',
|
|
workId: 'work-1',
|
|
},
|
|
env,
|
|
);
|
|
|
|
expect(replaceState).toHaveBeenCalledWith(
|
|
null,
|
|
'',
|
|
'/creation/puzzle/result?clientRuntime=wechat_mini_program&sessionId=session-1&profileId=profile-1&draftId=draft-1&workId=work-1',
|
|
);
|
|
expect(
|
|
readCreationUrlState({
|
|
location: {
|
|
pathname: '/creation/puzzle/result',
|
|
search:
|
|
'?sessionId=session-1&profileId=profile-1&draftId=draft-1&workId=work-1',
|
|
},
|
|
}),
|
|
).toEqual({
|
|
sessionId: 'session-1',
|
|
profileId: 'profile-1',
|
|
draftId: 'draft-1',
|
|
workId: 'work-1',
|
|
});
|
|
});
|
|
|
|
it('ignores writes and clears outside creation restore paths', () => {
|
|
const replaceState = vi.fn();
|
|
const env = {
|
|
location: {
|
|
pathname: '/works/detail',
|
|
search: '?work=PZ-123&sessionId=session-1',
|
|
},
|
|
history: { replaceState },
|
|
};
|
|
|
|
writeCreationUrlState({ sessionId: 'session-2' }, env);
|
|
clearCreationUrlState(env);
|
|
|
|
expect(replaceState).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('clears only private restore params on creation restore paths', () => {
|
|
const replaceState = vi.fn();
|
|
const env = {
|
|
location: {
|
|
pathname: '/creation/bark-battle/result',
|
|
search: '?draftId=draft-1&workId=work-1&clientRuntime=wechat',
|
|
},
|
|
history: { replaceState },
|
|
};
|
|
|
|
clearCreationUrlState(env);
|
|
|
|
expect(replaceState).toHaveBeenCalledWith(
|
|
null,
|
|
'',
|
|
'/creation/bark-battle/result?clientRuntime=wechat',
|
|
);
|
|
});
|
|
});
|