fix: persist notification preferences and clarify delivery controls

This commit is contained in:
2026-09-06 14:14:46 +03:00
parent 83df706631
commit a25dcb7a5d
8 changed files with 85 additions and 35 deletions
+7
View File
@@ -249,3 +249,10 @@ test('competitor watchlist keeps the saved roster when a stale or invalid write
assert.deepEqual((await request('/api/me/data')).data.veri[anahtar],[item]);
assert.equal((await request('/api/me/data','PUT',{anahtar,deger:[],revision:first.data.revision})).status,200);
});
test('notification preferences reject stale writes and malformed quiet times',async()=>{
const anahtar='reminder',deger={pushEnabled:true,quietEnabled:true,quietStart:'22:00',quietEnd:'08:00'};
const first=await request('/api/me/data','PUT',{anahtar,deger,revision:null});assert.equal(first.status,200);
assert.equal((await request('/api/me/data','PUT',{anahtar,deger:{...deger,quietStart:'25:00'},revision:first.data.revision})).status,400);
assert.equal((await request('/api/me/data','PUT',{anahtar,deger:{...deger,pushEnabled:false},revision:null})).status,409);
assert.deepEqual((await request('/api/me/data')).data.veri.reminder,deger);
});
+19
View File
@@ -0,0 +1,19 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {validateReminderPreferences,quietNow} from '../src/services/reminderPreferences.js';
const prefs={pushEnabled:true,quietEnabled:true,quietStart:'22:00',quietEnd:'08:00'};
const at=(h,m)=>({getHours:()=>h,getMinutes:()=>m});
test('quiet hours handle midnight and boundaries in the device local clock',()=>{
assert.equal(quietNow(prefs,at(22,0)),true);assert.equal(quietNow(prefs,at(7,59)),true);
assert.equal(quietNow(prefs,at(8,0)),false);assert.equal(quietNow(prefs,at(21,59)),false);
assert.equal(quietNow({...prefs,quietStart:'08:00',quietEnd:'12:00'},at(10,0)),true);
assert.equal(quietNow({...prefs,quietStart:'08:00'},at(8,0)),false);
assert.equal(quietNow({...prefs,quietEnabled:false},at(23,0)),false);
});
test('invalid quiet preferences are rejected and cannot silently enable notifications',()=>{
for(const quietStart of ['', '24:00','08:60',null]){
assert.throws(()=>validateReminderPreferences({...prefs,quietStart}));
assert.equal(quietNow({...prefs,quietStart},at(12,0)),true);
}
assert.throws(()=>validateReminderPreferences({...prefs,pushEnabled:'true'}));
});