feat(combat): migrate combat_event_type_enum for Slice 0.6 event types
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class ExtendCombatEventTypes1790000000000 implements MigrationInterface {
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TYPE "combat_event_type_enum" ADD VALUE 'HEAL'`);
|
||||
await queryRunner.query(`ALTER TYPE "combat_event_type_enum" ADD VALUE 'DEFEND'`);
|
||||
await queryRunner.query(`ALTER TYPE "combat_event_type_enum" ADD VALUE 'TELEGRAPH'`);
|
||||
await queryRunner.query(`ALTER TYPE "combat_event_type_enum" ADD VALUE 'INTERRUPT'`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
// Postgres has no "DROP VALUE"; rebuild the type from scratch instead.
|
||||
// This fails if any row already uses one of the new values -- expected
|
||||
// for a dev rollback, same tradeoff Postgres migrations always make here.
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "combat_events" ALTER COLUMN "type" TYPE varchar USING "type"::text`,
|
||||
);
|
||||
await queryRunner.query(`DROP TYPE "combat_event_type_enum"`);
|
||||
await queryRunner.query(
|
||||
`CREATE TYPE "combat_event_type_enum" AS ENUM ('DAMAGE', 'COMBAT_WON', 'COMBAT_LOST')`,
|
||||
);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "combat_events" ALTER COLUMN "type" TYPE "combat_event_type_enum" USING "type"::"combat_event_type_enum"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import 'reflect-metadata';
|
||||
import { getMetadataArgsStorage } from 'typeorm';
|
||||
import { CombatEvent } from '../../combat/entities/combat-event.entity';
|
||||
import { CombatEventType } from '../../combat/combat-event-type.enum';
|
||||
|
||||
describe('combat_events.type enum', () => {
|
||||
it('includes the Playable Slice 0.6 event types', () => {
|
||||
const metadata = getMetadataArgsStorage();
|
||||
const column = metadata.columns.find(
|
||||
(candidate) => candidate.target === CombatEvent && candidate.propertyName === 'type',
|
||||
);
|
||||
|
||||
expect(column).toBeDefined();
|
||||
expect(column?.options.enum).toBe(CombatEventType);
|
||||
expect(Object.values(CombatEventType)).toEqual(
|
||||
expect.arrayContaining([
|
||||
'DAMAGE',
|
||||
'HEAL',
|
||||
'DEFEND',
|
||||
'TELEGRAPH',
|
||||
'INTERRUPT',
|
||||
'COMBAT_WON',
|
||||
'COMBAT_LOST',
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user