UNPKG

2.43 kBJavaScriptView Raw
1"use strict";
2
3const testimServicesApi = require('../commons/testimServicesApi');
4
5const _ = require('lodash');
6const cliJsStepPlayback = require('./cliJsStepPlayback');
7const logger = require('../commons/logger').getLogger('step-playback');
8
9const playbacks = {
10 'cli-validation-code-step': cliJsStepPlayback,
11 'cli-wait-for-code-step': cliJsStepPlayback,
12 'cli-action-code-step': cliJsStepPlayback,
13 "cli-api-code-step": cliJsStepPlayback,
14 "cli-condition-step": cliJsStepPlayback,
15 "cli-download-code-step": cliJsStepPlayback,
16 'node-package': require('./nodePackageStepPlayback'),
17 'tdk-hybrid': require('./hybridStepPlayback')
18};
19
20function saveRemoteStep(projectId, resultId, stepId, remoteStepData) {
21 return testimServicesApi.saveRemoteStep(projectId, resultId, stepId, remoteStepData);
22}
23
24function onCompleted(projectId, resultId, stepId, runResult, sessionId) {
25 logger.info("finished to run remote step", {stepId, sessionId});
26 const remoteStepData = {
27 status: 'completed',
28 success: true,
29 failureReason: null,
30 data: runResult
31 };
32
33 return saveRemoteStep(projectId, resultId, stepId, remoteStepData);
34}
35
36function onFailed(projectId, resultId, stepId, failureReason, sessionId) {
37 logger.info("failed to run remote step", {stepId, sessionId, failureReason});
38 const remoteStepData = {
39 status: 'completed',
40 success: false,
41 failureReason: failureReason
42 };
43
44 return saveRemoteStep(projectId, resultId, stepId, remoteStepData);
45}
46
47async function executeStep(options, driver, step, resultId) {
48 if (!step || !step.type || step.status === 'completed') {
49 return;
50 }
51
52 const {project: projectId, projectData, userData} = options;
53 const stepType = step.type;
54 const sessionId = driver.getSessionId();
55 const stepId = step.id;
56 logger.info("start play remote step", {stepType, stepId, sessionId});
57
58 const playback = playbacks[stepType];
59 if (!playback) {
60 return onFailed(projectId, resultId, stepId, `Failed to find step type ${stepType}`, sessionId);
61 }
62
63 try {
64 const runResult = await playback.run(driver, step, projectData, userData);
65 return onCompleted(projectId, resultId, stepId, runResult, sessionId);
66 } catch (err) {
67 return onFailed(projectId, resultId, stepId, err.message, sessionId);
68 }
69}
70
71module.exports = {
72 executeStep
73};