修复草稿存储失败提醒被恢复状态遮挡

This commit is contained in:
2026-10-30 15:40:25 +08:00
parent b764fcb33c
commit 928125b081
2 changed files with 17 additions and 1 deletions
+2 -1
View File
@@ -13,7 +13,8 @@ function flushDraft(){
if(draftTimer !== null){ clearTimeout(draftTimer); draftTimer = null; }
const saved = drafts.write(currentConvId, inputDom.value);
drafts.active(currentConvId);
if(!saved && inputDom.value && !composerStatus.textContent) setComposerStatus(t('draftSaveFailed'), true);
if(!saved && inputDom.value && !composerStatus.classList.contains('is-error')) setComposerStatus(t('draftSaveFailed'), true);
else if(saved && composerStatus.textContent === t('draftSaveFailed')) setComposerStatus('');
}
function restoreDraft(){
inputDom.value = drafts.read(currentConvId);
+15
View File
@@ -926,6 +926,21 @@ test('a new conversation draft restores after refresh and moves to the created c
assert.equal(store.read(null),'');assert.equal(store.read(1),'');assert.equal(store.active(),'1');
});
test('quota failure replaces a restored-draft notice and clears after storage recovers', async () => {
const history=[{id:9,title:'A',ctime:'now'}],app=await customerPage({human:false,history});
await app.click(app.element('historyWrap').children[0]);
app.element('input-text').value='已保存草稿';app.element('input-text').listeners.input();await app.pageHide();
const restored=await customerPage({human:false,history,storage:app.storage,tabStorage:app.tabStorage});
assert.match(restored.element('composer-status').textContent,/已恢复/);
const setItem=restored.context.localStorage.setItem;
restored.context.localStorage.setItem=()=>{throw Error('quota');};
restored.element('input-text').value='新的未保存输入';restored.element('input-text').listeners.input();await restored.runTimers(250);
assert.match(restored.element('composer-status').textContent,/无法保存/);
assert.equal(restored.element('input-text').value,'新的未保存输入');
restored.context.localStorage.setItem=setItem;await restored.pageHide();
assert.equal(restored.element('composer-status').textContent,'');
});
test('restoring an old conversation cannot replace a newer user-selected draft', async () => {
const app=await customerPage({human:false,history:[{id:9,title:'A',ctime:'now'}]});
await app.click(app.element('historyWrap').children[0]);