/** * Copyright 2023 Kapeta Inc. * SPDX-License-Identifier: BUSL-1.1 */ import predefinedUserEvents from './predefined-user-events.json'; import { StormEventParser } from '../../src/storm/event-parser'; import { parserOptions } from './event-parser.test'; import { StormEvent } from '../../src/storm/events'; import { StormCodegen } from '../../src/storm/codegen'; import uuid from 'node-uuid'; import { StormStream } from '../../src/storm/stream'; describe('codegen', () => { it('predefined components', async () => { const events = predefinedUserEvents as StormEvent[]; const parser = new StormEventParser(parserOptions); for (const event of events) { await parser.processEvent('kapeta', event); } const result = await parser.toResult('kapeta'); const conversationId = uuid.v4().toString(); let codegen = new StormCodegen(conversationId, '', result.blocks, parser.getEvents()); let codegenPromise: Promise = consumeStream(codegen.getStream()); await codegen.process(); const stormEvents = await codegenPromise; expect(stormEvents.filter((event) => event.type === 'FILE_DONE').length).toBeGreaterThan(1); expect( stormEvents.filter((event) => event.type === 'FILE_DONE' && event.payload.filename.endsWith('UserDTO.java')) .length ).toBe(1); expect(stormEvents.at(-1)!.type).toBe('BLOCK_READY'); }); }); async function consumeStream(stream: StormStream): Promise { const events: StormEvent[] = []; return new Promise((resolve) => { stream.on('data', (data) => { events.push(data); }); stream.waitForDone(); resolve(events); }); }