public RunResponse start(
      @NotNull String workflowId, @NotNull String version, @NotNull RunRequest runRequest) {
    WorkflowDefinition definition = workflowDao.getWorkflowDefinition(workflowId, version);

    validateRequest(version, definition, runRequest);

    RunProperties runProperties =
        RunProperties.from(
            Checks.notNull(
                definition.getPropertiesSnapshot(),
                "property snapshot cannot be null for workflow: " + workflowId));
    // create and initiate a new instance with overrides and param evaluation
    WorkflowInstance instance =
        workflowHelper.createWorkflowInstance(
            definition.getWorkflow(),
            definition.getInternalId(),
            definition.getMetadata().getWorkflowVersionId(),
            runProperties,
            runRequest);
    RunStrategy runStrategy = definition.getRunStrategyOrDefault();
    int ret = runStrategyDao.startWithRunStrategy(instance, runStrategy);
    RunResponse response = RunResponse.from(instance, ret);
    LOG.info("Created a workflow instance with response {}", response);
    return response;
  }
@Test
  public void testStartWithInvalidStepRunParams() {
    RunRequest request =
        RunRequest.builder()
            .initiator(new ManualInitiator())
            .currentPolicy(RunPolicy.START_FRESH_NEW_RUN)
            .requestId(UUID.fromString("41f0281e-41a2-468d-b830-56141b2f768b"))
            .stepRunParams(Collections.singletonMap("job1", Collections.emptyMap()))
            .build();
    AssertHelper.assertThrows(
        "caller cannot be null to activate workflow",
        IllegalArgumentException.class,
        "non-existing step id detected in step param overrides: inputs [job1] vs dag",
        () -> actionHandler.start("sample-minimal-wf", "active", request));

    verify(workflowDao, times(1)).getWorkflowDefinition("sample-minimal-wf", "active");
    verify(dagTranslator, times(1)).translate(any());
  }