캠페인 성공 알림 · 운영 퀘스트 참여 인원 · Music Shake 하루 1회 · 함수 배포 전 빌드

This commit is contained in:
Sn-Kinos
2026-10-08 16:01:12 +09:00
parent 93150a0d5b
commit f7075f0e6f
14 changed files with 243 additions and 18 deletions
@@ -602,7 +602,7 @@ describe('검증 활동 집계 규칙 — Quest 완료 1건 · 하루 1회 (Camp
expect(reply.rewarded).toBe(4);
});
it('Music Shake 는 완주마다 1회 · 방문은 1회', async () => {
it('Music Shake 는 같은 날 두 번 완주해도 1회(C-128) · 방문은 1회', async () => {
await db().doc('quests/music-count').set({ type: 'musicShake', trackId: 't1', totalSegments: 10, dailyLimit: 2 });
const shake = () => call(fnQuestVerifyMusicShake, {
questId: 'music-count', trackId: 't1', totalSegments: 10,
@@ -610,9 +610,11 @@ describe('검증 활동 집계 규칙 — Quest 완료 1건 · 하루 1회 (Camp
});
await shake();
await shake();
expect(await count()).toBe(2);
// 보상은 한도 2회만큼 두 번 나가지만 검증 활동은 하루 1회.
expect((await db().collection(`users/${UID}/popTransactions`).where('reasonCode', '==', 'QUEST_MUSIC_SHAKE').get()).size).toBe(2);
expect(await count()).toBe(1);
await call(fnQuestVerifyPlace, { questId: PLACE_QUEST, placeId: PLACE, lat: 37.5564, lng: 126.9237 });
expect(await count()).toBe(3);
expect(await count()).toBe(2);
});
it('무효 처리는 원장 행으로 찾아 한 번만 빠진다 · 운영자만', async () => {