From 01c84309952db76ce4141cc3d95f660c609d1118 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 14 Jan 2023 15:00:13 -0500 Subject: [PATCH] deal with second waves for battles --- src/lib/components/Battle.svelte | 4 +++- src/lib/store/api.js | 37 ++++++++++++++++++------------ src/lib/store/updateBattle.test.js | 27 ++++++++++++++++++++++ 3 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 src/lib/store/updateBattle.test.js diff --git a/src/lib/components/Battle.svelte b/src/lib/components/Battle.svelte index 0fc50a0..f76371d 100644 --- a/src/lib/components/Battle.svelte +++ b/src/lib/components/Battle.svelte @@ -17,7 +17,7 @@
Chapter {chapter}, - battle {chapterBattle}? + battle {chapterBattle} -- {status}
@@ -122,6 +122,8 @@ $: character = battle?.character; $: city = battle?.city; + $: console.log(battle); + let chapter = 1 + parseInt(params.battleId / 2); let chapterBattle = params.battleId >= 7 diff --git a/src/lib/store/api.js b/src/lib/store/api.js index 8a0b1cb..2da6139 100644 --- a/src/lib/store/api.js +++ b/src/lib/store/api.js @@ -9,6 +9,27 @@ const seedCampaign = { battles: [], }; +export function updateBattle(campaign, battleId, status) { + const battle = campaign.battles[battleId - 1]; + if (status === 'lost' && battle.wave == 1) { + return u.updateIn(campaign, `battles.${battleId - 1}`, { + wave: 2, + }); + } + campaign = u.updateIn(campaign, `battles.${battleId - 1}`, { + status, + }); + campaign = u(campaign, { + battles: (battles) => [ + ...battles, + u(genNextBattle(battles), { + id: battles.length + 1, + }), + ], + }); + return campaign; +} + export function genApi(options = {}) { // if (options.local) MyPouch.plugin(pouchMem); if (options.pouch) options.pouch(PouchDB); @@ -69,21 +90,7 @@ export function genApi(options = {}) { }; const setBattleVerdict = (battleId, status) => { - let campaign = get(activeCampaign); - - campaign = u.updateIn(campaign, `battles.${battleId - 1}`, { - status, - }); - - campaign = u(campaign, { - battles: (battles) => [ - ...battles, - u(genNextBattle(campaign.battles), { - id: battles.length + 1, - }), - ], - }); - + const campaign = updateBattle(get(activeCampaign), battleId, status); pouchdb.put(campaign).catch((e) => console.error(e)); }; diff --git a/src/lib/store/updateBattle.test.js b/src/lib/store/updateBattle.test.js new file mode 100644 index 0000000..9d2bf79 --- /dev/null +++ b/src/lib/store/updateBattle.test.js @@ -0,0 +1,27 @@ +import { test, expect } from 'vitest'; +import { updateBattle } from './api.js'; + +test('lost, wave 1', () => { + const result = updateBattle( + { + battles: [{ id: 1, wave: 1, status: 'ongoing' }], + }, + 1, + 'lost', + ); + + expect(result).toHaveProperty('battles.0.wave', 2); + expect(result).toHaveProperty('battles.0.status', 'ongoing'); +}); + +test('lost, wave 2', () => { + const result = updateBattle( + { + battles: [{ id: 1, wave: 2, status: 'ongoing' }], + }, + 1, + 'lost', + ); + + expect(result).toHaveProperty('battles.0.status', 'lost'); +});