Skip to content

Commit

Permalink
Integration tests for survey instance action queue
Browse files Browse the repository at this point in the history
#CTCTOWALTZ-2680
finos#6860
  • Loading branch information
jessica-woodland-scott-db committed Nov 21, 2023
1 parent 333c6a9 commit c3299bf
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package org.finos.waltz.data.survey;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.finos.waltz.common.DateTimeUtilities;
import org.finos.waltz.model.survey.ImmutableSurveyInstanceActionQueueItem;
import org.finos.waltz.model.survey.SurveyInstanceAction;
import org.finos.waltz.model.survey.SurveyInstanceActionParams;
import org.finos.waltz.model.survey.SurveyInstanceActionQueueItem;
import org.finos.waltz.model.survey.SurveyInstanceActionStatus;
import org.finos.waltz.model.survey.SurveyInstanceStatus;
Expand All @@ -19,9 +22,11 @@

import java.sql.Timestamp;
import java.util.List;
import java.util.Optional;

import static java.lang.String.format;
import static java.util.Optional.ofNullable;
import static org.finos.waltz.common.JacksonUtilities.getJsonMapper;
import static org.finos.waltz.schema.Tables.SURVEY_INSTANCE_ACTION_QUEUE;

@Repository
Expand All @@ -30,12 +35,16 @@ public class SurveyInstanceActionQueueDao {
private final DSLContext dsl;

public static final RecordMapper<Record, SurveyInstanceActionQueueItem> TO_DOMAIN_MAPPER = r -> {

SurveyInstanceActionQueueRecord record = r.into(SURVEY_INSTANCE_ACTION_QUEUE);

Optional<SurveyInstanceActionParams> surveyInstanceActionParams = readParams(getJsonMapper(), record.getActionParams());

return ImmutableSurveyInstanceActionQueueItem.builder()
.id(record.getId())
.action(SurveyInstanceAction.valueOf(record.getAction()))
.surveyInstanceId(record.getSurveyInstanceId())
.actionParams(record.getActionParams())
.actionParams(surveyInstanceActionParams)
.initialState(SurveyInstanceStatus.valueOf(record.getInitialState()))
.submittedAt(DateTimeUtilities.toLocalDateTime(record.getSubmittedAt()))
.submittedBy(record.getSubmittedBy())
Expand All @@ -47,6 +56,19 @@ public class SurveyInstanceActionQueueDao {
};


private static Optional<SurveyInstanceActionParams> readParams(ObjectMapper jsonMapper, String actionParams) {
if(actionParams == null) {
return Optional.empty();
} else {
try {
return Optional.ofNullable(jsonMapper.readValue(actionParams, SurveyInstanceActionParams.class));
} catch (JsonProcessingException e) {
return Optional.empty();
}
}
}


@Autowired
SurveyInstanceActionQueueDao(DSLContext dsl) {
this.dsl = dsl;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package org.finos.waltz.integration_test.inmem.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import org.finos.waltz.common.DateTimeUtilities;
import org.finos.waltz.common.JacksonUtilities;
import org.finos.waltz.common.exception.InsufficientPrivelegeException;
import org.finos.waltz.integration_test.inmem.BaseInMemoryIntegrationTest;
import org.finos.waltz.model.EntityKind;
import org.finos.waltz.model.EntityReference;
import org.finos.waltz.model.IdSelectionOptions;
import org.finos.waltz.model.ReleaseLifecycleStatus;
import org.finos.waltz.model.changelog.ChangeLog;
import org.finos.waltz.model.survey.ImmutableInstancesAndRecipientsCreateCommand;
import org.finos.waltz.model.survey.ImmutableSurveyInstanceActionParams;
import org.finos.waltz.model.survey.ImmutableSurveyQuestionResponse;
import org.finos.waltz.model.survey.ImmutableSurveyRunCreateCommand;
import org.finos.waltz.model.survey.InstancesAndRecipientsCreateCommand;
Expand All @@ -18,6 +22,7 @@
import org.finos.waltz.model.survey.SurveyInstanceStatus;
import org.finos.waltz.model.survey.SurveyIssuanceKind;
import org.finos.waltz.model.survey.SurveyQuestionResponse;
import org.finos.waltz.service.changelog.ChangeLogService;
import org.finos.waltz.service.survey.SurveyInstanceActionQueueService;
import org.finos.waltz.service.survey.SurveyInstanceService;
import org.finos.waltz.service.survey.SurveyRunService;
Expand All @@ -32,18 +37,22 @@
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.Set;

import static java.lang.String.format;
import static java.util.Collections.emptySet;
import static org.finos.waltz.common.CollectionUtilities.any;
import static org.finos.waltz.common.CollectionUtilities.find;
import static org.finos.waltz.common.DateTimeUtilities.nowUtcTimestamp;
import static org.finos.waltz.common.DateTimeUtilities.toLocalDate;
import static org.finos.waltz.model.EntityReference.mkRef;
import static org.finos.waltz.test_common.helpers.NameHelper.mkName;

@Service
public class SurveyInstanceActionQueueTest extends BaseInMemoryIntegrationTest {

public static final String REASON_TEXT = "test reason to capture";

@Autowired
private AppHelper appHelper;

Expand All @@ -68,6 +77,9 @@ public class SurveyInstanceActionQueueTest extends BaseInMemoryIntegrationTest {
@Autowired
private InvolvementHelper involvementHelper;

@Autowired
private ChangeLogService changeLogService;

@Test
public void processActionsCanSubmitSurveys() throws InsufficientPrivelegeException {
String username = mkName("submitSurvey");
Expand Down Expand Up @@ -306,14 +318,50 @@ public void processActionsCanDoAllActions() throws InsufficientPrivelegeExceptio
Assertions.assertEquals(SurveyInstanceActionStatus.SUCCESS, submit.status());

// Approve
Long approvalId = actionQueueHelper.addActionToQueue(instance.id().get(), SurveyInstanceAction.APPROVING, "reason", SurveyInstanceStatus.COMPLETED, username);
Long approvalId = actionQueueHelper.addActionToQueue(instance.id().get(), SurveyInstanceAction.APPROVING, null, SurveyInstanceStatus.COMPLETED, username);
actionQueueService.performActions();

SurveyInstance postApproval = instanceService.getById(instance.id().get());
Assertions.assertEquals(SurveyInstanceStatus.APPROVED, postApproval.status(), "Action should be marked 'approved'");

SurveyInstanceActionQueueItem approval = actionQueueService.getById(approvalId);
Assertions.assertEquals(SurveyInstanceActionStatus.SUCCESS, approval.status());
}


@Test
public void processActionsAbleToParseReasonFromAction() throws InsufficientPrivelegeException {
String username = mkName("reason");
SurveyInstance instance = setupSurvey("reason", username);

actionQueueHelper.addActionToQueue(instance.id().get(), SurveyInstanceAction.SUBMITTING, null, SurveyInstanceStatus.NOT_STARTED, username);

ImmutableSurveyInstanceActionParams reasonParams = ImmutableSurveyInstanceActionParams
.builder()
.reason(REASON_TEXT)
.build();

String reason = mkReasonString(reasonParams);

Long approvalId = actionQueueHelper.addActionToQueue(instance.id().get(), SurveyInstanceAction.APPROVING, reason, SurveyInstanceStatus.COMPLETED, username);
actionQueueService.performActions();

SurveyInstance postApproval = instanceService.getById(instance.id().get());
Assertions.assertEquals(SurveyInstanceStatus.APPROVED, postApproval.status(), "Action should be marked 'approved'");

SurveyInstanceActionQueueItem approval = actionQueueService.getById(approvalId);
Assertions.assertEquals(SurveyInstanceActionStatus.SUCCESS, approval.status());

List<ChangeLog> changeLogs = changeLogService.findByParentReference(mkRef(EntityKind.SURVEY_INSTANCE, postApproval.id().get()), Optional.empty(), Optional.empty());
Assertions.assertTrue(any(changeLogs, d -> d.message().contains(REASON_TEXT)), "Reason should be captured in the change log");
}

private String mkReasonString(ImmutableSurveyInstanceActionParams reason) {
try {
return JacksonUtilities.getJsonMapper().writeValueAsString(reason);
} catch (JsonProcessingException e) {
return null;
}
}


Expand All @@ -335,7 +383,7 @@ private SurveyInstance setupSurvey(String nameStem, String username, boolean pop
long invKindId = involvementHelper.mkInvolvementKind(mkName("invKind"));
involvementHelper.createInvolvement(personId, invKindId, a1);

ImmutableSurveyRunCreateCommand runCmd = mkRunCommand(templateId, EntityReference.mkRef(EntityKind.ORG_UNIT, ouIds.a), invKindId);
ImmutableSurveyRunCreateCommand runCmd = mkRunCommand(templateId, mkRef(EntityKind.ORG_UNIT, ouIds.a), invKindId);
Long runId = runService.createSurveyRun(username, runCmd).id().get();

InstancesAndRecipientsCreateCommand createCmd = mkInstancesRecipCreateCmd(runId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.finos.waltz.model.survey;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.immutables.value.Value;

import java.util.Optional;

@Value.Immutable
@JsonSerialize(as = ImmutableSurveyInstanceActionParams.class)
@JsonDeserialize(as = ImmutableSurveyInstanceActionParams.class)
public abstract class SurveyInstanceActionParams {

public abstract Optional<String> reason();

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
import org.immutables.value.Value;

import java.time.LocalDateTime;
import java.util.Optional;

@Value.Immutable
public abstract class SurveyInstanceActionQueueItem implements IdProvider {

public abstract SurveyInstanceAction action();
public abstract Long surveyInstanceId();
@Nullable
public abstract String actionParams();
public abstract Optional<SurveyInstanceActionParams> actionParams();
public abstract SurveyInstanceStatus initialState();
public abstract LocalDateTime submittedAt();
public abstract String submittedBy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.finos.waltz.data.survey.SurveyInstanceActionQueueDao;
import org.finos.waltz.model.survey.ImmutableSurveyInstanceStatusChangeCommand;
import org.finos.waltz.model.survey.SurveyInstance;
import org.finos.waltz.model.survey.SurveyInstanceActionParams;
import org.finos.waltz.model.survey.SurveyInstanceActionQueueItem;
import org.finos.waltz.model.survey.SurveyInstanceActionStatus;
import org.finos.waltz.model.survey.SurveyInstanceStatus;
Expand All @@ -26,6 +27,7 @@ public class SurveyInstanceActionQueueService {
private final SurveyInstanceService surveyInstanceService;
private final DSLContext dslContext;


@Autowired
SurveyInstanceActionQueueService(SurveyInstanceActionQueueDao surveyInstanceActionQueueDao,
SurveyInstanceService surveyInstanceService,
Expand Down Expand Up @@ -90,10 +92,11 @@ public void performActions() {

String username = action.submittedBy();

Optional<String> reason = action.actionParams().map(SurveyInstanceActionParams::reason).orElse(Optional.empty());
ImmutableSurveyInstanceStatusChangeCommand updateCmd = ImmutableSurveyInstanceStatusChangeCommand
.builder()
.action(action.action())
.reason(Optional.ofNullable(action.actionParams()))
.reason(reason)
.build();

try {
Expand Down

0 comments on commit c3299bf

Please sign in to comment.