Reaktivierung haengt nur noch am Redesign, nicht am Grund
Ein CC, der nicht redesignt wurde, existiert unveraendert weiter und kommt
deshalb immer gratis zurueck - egal ob der Spieler inaktiv war oder die
Einheit voruebergehend aus dem Spiel genommen wurde. Bisher kostete der Fall
OTHER ein Guthaben, was die Regel unnoetig verkompliziert hat.
Damit der zweite Fall brauchbar wird, haelt inactiveNote den Grund im Klartext
fest ("Einheit bis Maerz entfernt"); die Notiz steht an der CC-Karte und wird
beim Reaktivieren wieder geleert.
This commit is contained in:
@@ -178,16 +178,46 @@ describe('Reaktivierung', () => {
|
||||
assert.equal(result.balances.CC, before.CC - 1);
|
||||
});
|
||||
|
||||
it('eine bezahlte Reaktivierung wird bei Gratis-Faellen verweigert', async () => {
|
||||
it('auch ein aus anderem Grund entfernter CC kommt gratis zurueck', async () => {
|
||||
const playerId = await freshPlayer('Einheit-weg');
|
||||
await credits.bookCcPackage(playerId, ctx);
|
||||
const created = await characters.createCharacter(playerId, { name: 'MTF-Operativer' }, ctx);
|
||||
|
||||
await characters.deactivateCharacter(
|
||||
created.character.id,
|
||||
'OTHER',
|
||||
ctx,
|
||||
'Einheit bis Maerz entfernt',
|
||||
);
|
||||
|
||||
const deactivated = await db.prisma.character.findUniqueOrThrow({
|
||||
where: { id: created.character.id },
|
||||
});
|
||||
assert.equal(deactivated.inactiveNote, 'Einheit bis Maerz entfernt', 'der Grund bleibt lesbar');
|
||||
|
||||
const before = await credits.getBalances(playerId);
|
||||
const result = await characters.reactivateFree(created.character.id, ctx);
|
||||
|
||||
assert.equal(result.character.status, 'ACTIVE');
|
||||
assert.equal(result.character.inactiveNote, null, 'die Notiz wird beim Zurueckholen geloescht');
|
||||
assert.deepEqual(result.balances, before, 'kein Guthaben wurde bewegt');
|
||||
});
|
||||
|
||||
it('eine bezahlte Reaktivierung wird bei jedem Gratis-Fall verweigert', async () => {
|
||||
const playerId = await freshPlayer('Gratis-Fall');
|
||||
await credits.bookCcPackage(playerId, ctx);
|
||||
const created = await characters.createCharacter(playerId, { name: 'Geputzt' }, ctx);
|
||||
await characters.deactivateCharacter(created.character.id, 'PLAYER_INACTIVITY', ctx);
|
||||
await credits.bookCcPackage(playerId, ctx);
|
||||
|
||||
await assert.rejects(
|
||||
() => characters.reactivatePaid(created.character.id, 'CC', ctx),
|
||||
(error: Error & { code?: string }) => error.code === 'IS_FREE',
|
||||
);
|
||||
for (const reason of ['PLAYER_INACTIVITY', 'OTHER'] as const) {
|
||||
const created = await characters.createCharacter(playerId, { name: `CC-${reason}` }, ctx);
|
||||
await characters.deactivateCharacter(created.character.id, reason, ctx);
|
||||
|
||||
await assert.rejects(
|
||||
() => characters.reactivatePaid(created.character.id, 'CC', ctx),
|
||||
(error: Error & { code?: string }) => error.code === 'IS_FREE',
|
||||
`Grund ${reason} darf nichts kosten`,
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user