export async function createMockEventGenerator()

in src/eventSubscription/commands/mock/createMockEventGenerator.ts [27:117]


export async function createMockEventGenerator(actionContext: IActionContext, node?: EventSubscriptionTreeItem): Promise<void> {
    let eventType: string;
    let topic: string;
    let destination: {};
    let fileName: string;
    if (node) {
        eventType = getEventTypeFromTopic(node.topic);
        topic = node.topic;
        destination = {
            eventSubscriptionId: node.id
        };
        fileName = node.label;
    } else {
        eventType = await promptForEventType();
        topic = '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testgroup/providers/Microsoft.Provider/namespaces/testresource';
        const urlContext: IEndpointUrlWizardContext = {};
        const urlStep: EndpointUrlStep<IEndpointUrlWizardContext> = new EndpointUrlStep();
        await urlStep.prompt(urlContext);
        destination = {
            endpointUrl: urlContext.endpointUrl
        };
        fileName = 'test';
    }

    actionContext.properties.eventType = eventType;

    let schemaFileName: string | undefined;
    let eventSubTypePattern: string;
    let subjectPattern: string;
    switch (eventType) {
        case EventType.Storage:
            schemaFileName = 'Storage';
            eventSubTypePattern = 'Blob(Created|Deleted)';
            subjectPattern = '/blobServices/default/containers/[a-zA-Z0-9]+/blobs/[a-zA-Z0-9]+';
            break;
        case EventType.Resources:
            schemaFileName = 'Resource';
            eventSubTypePattern = 'Resource(Write|Delete)(Success|Failure|Cancel)';
            subjectPattern = '/subscriptions\/[a-zA-Z0-9]+\/resourceGroups\/[a-zA-Z0-9]+\/providers\/Microsoft\\.[a-zA-Z0-9]+\/[a-zA-Z0-9]+';
            break;
        case EventType.ContainerRegistry:
            schemaFileName = 'ContainerRegistry';
            eventSubTypePattern = 'Image(Pushed|Deleted)';
            subjectPattern = '[a-zA-Z0-9]+:[0-9]\\.[0-9]\\.[0-9]';
            break;
        case EventType.Devices:
            schemaFileName = 'IotHub';
            eventSubTypePattern = 'Device(Created|Deleted)';
            subjectPattern = 'devices/[a-zA-Z0-9]+';
            break;
        case EventType.EventHub:
            schemaFileName = 'EventHub';
            eventSubTypePattern = 'CaptureFileCreated';
            // Get the event hub name from the topic id and use that as the subject
            subjectPattern = topic.substring(topic.lastIndexOf('/') + 1);
            break;
        case EventType.Custom:
            eventSubTypePattern = '[a-zA-Z0-9]+';
            subjectPattern = '[a-zA-Z0-9]+';
            break;
        default:
            throw new RangeError();
    }

    const templatesPath: string = ext.context.asAbsolutePath(path.join('resources', 'templates'));
    const eventSchema: IEventSchema = <IEventSchema>await fse.readJson(path.join(templatesPath, 'Event.json'));
    if (schemaFileName) {
        eventSchema.properties.data = <{}>await fse.readJson(path.join(templatesPath, `${schemaFileName}.json`));
    }

    eventSchema.properties.topic.default = topic;
    eventSchema.properties.eventType.pattern = `${eventType.replace('.', '\\.')}\\.${eventSubTypePattern}`;
    eventSchema.properties.subject.pattern = subjectPattern;

    const definitionsPath: string = path.join(templatesPath, 'definitions', `${schemaFileName}.json`);
    if (await fse.pathExists(definitionsPath)) {
        eventSchema.definitions = <{}>await fse.readJson(definitionsPath);
    }

    const eventGenerator: IMockEventGenerator = {
        destination: destination,
        numberOfEvents: 1,
        jsonSchemaFakerOptions: {
            useDefaultValue: true,
            alwaysFakeOptionals: true
        },
        schema: eventSchema
    };

    await fsUtils.showNewFile(JSON.stringify(eventGenerator, undefined, 2), fileName, '.eventGenerator.json');
}