package io.delphi.qa.auto.awsmfrw.tests.slz;

import com.amazonaws.services.stepfunctions.model.*;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaCommonMethods;
import io.delphi.qa.auto.awsmfrw.common_baby.delphi.aws.EnAwsSfStateMachines;
import io.delphi.qa.auto.awsmfrw.tests.BsTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class StepFunctions_UnitTest extends BsTestCase {

  @Override
  public String genTestRunId() {
    return IsaCommonMethods.testRunId();
  }

  @Test
  public void tc1_givenStepFunctions_whenListAllStateMachines_thenListSizeGreaterThanZero() {
    ListStateMachinesResult listStateMachinesResult =
        delphi.aws().sf().getListStateMachinesResult();
    Assert.assertTrue(listStateMachinesResult.getStateMachines().size() > 0);
  }

  @Test
  public void tc2_givenFlow_whenListAllStateMachines_thenListSizeGreaterThanZero() {
    StateMachineListItem stateMachine =
        delphi.aws().sf().getStateMachine(EnAwsSfStateMachines.SLZ_META_FLOW.get());
    ListExecutionsResult listExecutionsResult =
        delphi.aws().sf().getListExecutionsResult(stateMachine);
    List<ExecutionListItem> collect =
        listExecutionsResult.getExecutions().stream()
            .filter(
                o ->
                    o.getName().startsWith("amazon")
                        || o.getName().startsWith("apple")
                        || o.getName().startsWith("youtube")
                        || o.getName().startsWith("spotify")
                        || o.getName().startsWith("gras"))
            .sorted(Comparator.comparing(ExecutionListItem::getStartDate).reversed())
            .collect(Collectors.toList());
    String arn =
        collect.stream()
            .filter(o -> !o.getStatus().equalsIgnoreCase("RUNNING"))
            .collect(Collectors.toList())
            .get(0)
            .getName();
    List<HistoryEvent> historyEvents =
        delphi.aws().sf().listEvents(EnAwsSfStateMachines.SLZ_META_FLOW.get(), arn, "RUNNING");
    Assert.assertTrue(historyEvents.size() > 0);
  }
}
