diff --git a/VERSION.txt b/VERSION.txt index 46d9d4270eb3b8aeef571a85dd45b3f850c0c97b..8ce7a0b24905af13a0e7084bbd3e29fb675274a1 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,3 +1,7 @@ +2.2.5 Fix ATD update not setting createdAt. +2.2.4 Fix ATD simulator not accepting passkey content field. +2.2.3 Add allocation id to training run. +2.2.2 Add createdAt to training definition. Modify TD import to drop 'uploaded' prefix. 2.2.1 Added a fail-safe check for simulating tool incorrect input files. 22.12-rc.1 Changed sandboxId type to string, added automatic check if logging works for training events and commands. 2.1.3 Fix create, update and clone for training definitions diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java index 3d86a72f55789f49daa6c213e267e1ac02e54faa..bb85529f58704a2e93d6d1e4a98941815fbceaf7 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/simulator/PhaseEvent.java @@ -39,6 +39,7 @@ public class PhaseEvent { @ApiModelProperty(value = "Timestamp of event.", required = true, example = "151651561") @NotNull(message = "{phaseEvent.timestamp.NotNull.message}") private Long timestamp; + private String passkeyContent; private String answerContent; private String answers; private Long endTime; diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java index 08ff20149684d074fda6d48e502c76c6b85c492b..5262bb8cd70a2ef988c0d09c0934775d2f27e1af 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingDefinition.java @@ -71,6 +71,8 @@ public class TrainingDefinition implements Serializable { private LocalDateTime lastEdited; @Column(name = "last_edited_by", nullable = false) private String lastEditedBy; + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; /** @@ -294,6 +296,22 @@ public class TrainingDefinition implements Serializable { this.lastEditedBy = lastEditedBy; } + /** + * Gets the time the Training Definition was created at + * @return the time of Training Definition creation + */ + public LocalDateTime getCreatedAt() { + return createdAt; + } + + /** + * Sets the creation time of the Training Definition + * @param createdAt time of Training Definition creation + */ + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + @Override public int hashCode() { return Objects.hash(description, outcomes, prerequisites, state, title); @@ -327,6 +345,7 @@ public class TrainingDefinition implements Serializable { ", showStepperBar=" + this.isShowStepperBar() + ", estimatedDuration=" + this.getEstimatedDuration() + ", lastEdited=" + this.getLastEdited() + + ", createdAt=" + this.getCreatedAt() + '}'; } } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java index ffd173e61afffceb876063ddf7be206ce90a285f..2ba5fa31f4220b64b9e92c0bca77acbdc2333376 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/domain/training/TrainingRun.java @@ -130,6 +130,8 @@ public class TrainingRun implements Serializable { private TrainingInstance trainingInstance; @Column(name = "sandbox_instance_ref_id", length = 36) private String sandboxInstanceRefId; + @Column(name = "sandbox_instance_allocation_id") + private Integer sandboxInstanceAllocationId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id", nullable = false) private User participantRef; @@ -265,7 +267,7 @@ public class TrainingRun implements Serializable { /** * Gets id of sandbox instance associated with Training run * - * @return the sandbox instance ref id + * @return the sandbox instance reference id */ public String getSandboxInstanceRefId() { return sandboxInstanceRefId; @@ -274,12 +276,29 @@ public class TrainingRun implements Serializable { /** * Sets id of sandbox instance associated with Training run * - * @param sandboxInstanceRefId the sandbox instance ref id + * @param sandboxInstanceRefId the sandbox instance reference id */ public void setSandboxInstanceRefId(String sandboxInstanceRefId) { this.sandboxInstanceRefId = sandboxInstanceRefId; } + /** + * Gets sandbox instance allocation id associated with Training run + * + * @return the sandbox instance allocation id + */ + public Integer getSandboxInstanceAllocationId() { + return sandboxInstanceAllocationId; + } + + /** + * Sets sandbox instance allocation id associated with Training run + * @param sandboxInstanceAllocationId the sandbox instance allocation id + */ + public void setSandboxInstanceAllocationId(Integer sandboxInstanceAllocationId) { + this.sandboxInstanceAllocationId = sandboxInstanceAllocationId; + } + /** * Gets number of failed attempts by trainee to submit correct answer on current phase * @@ -392,6 +411,7 @@ public class TrainingRun implements Serializable { ", incorrectAnswerCount=" + this.getIncorrectAnswerCount() + ", solutionTaken=" + this.isSolutionTaken() + ", sandboxInstanceRefId=" + this.getSandboxInstanceRefId() + + ", sandboxInstanceAllocationId=" + this.getSandboxInstanceAllocationId() + ", phaseAnswered=" + this.isPhaseAnswered() + '}'; } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java index 27999a3b1863276556f9019e86abcbfe68b0168a..7138d98404c7b4d1339c7942a6b9507b99491715 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionByIdDTO.java @@ -47,6 +47,9 @@ public class TrainingDefinitionByIdDTO { private LocalDateTime lastEdited; @ApiModelProperty(value = "Name of the user who has done the last edit in definition.", example = "John Doe") private String lastEditedBy; + @ApiModelProperty(value = "Time of creation of definition.", example = "2017-10-19 10:23:54+02") + @JsonSerialize(using = LocalDateTimeUTCSerializer.class) + private LocalDateTime createdAt; /** * Gets id. @@ -264,6 +267,14 @@ public class TrainingDefinitionByIdDTO { this.lastEditedBy = lastEditedBy; } + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + @Override public boolean equals(Object object) { if (!(object instanceof TrainingDefinitionByIdDTO)) return false; @@ -293,6 +304,7 @@ public class TrainingDefinitionByIdDTO { ", canBeArchived=" + canBeArchived + ", estimatedDuration=" + estimatedDuration + ", lastEdited=" + lastEdited + + ", createdAt=" + createdAt + '}'; } } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java index a0486bbe0a5201a5bfd83f77d0e3e0c26150b724..865a5167595373d28dc54732614f00fd92b84816 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingdefinition/TrainingDefinitionDTO.java @@ -42,6 +42,9 @@ public class TrainingDefinitionDTO { private LocalDateTime lastEdited; @ApiModelProperty(value = "Name of the user who has done the last edit in definition.", example = "John Doe") private String lastEditedBy; + @ApiModelProperty(value = "Time of creation of definition.", example = "2017-10-19 10:23:54+02") + @JsonSerialize(using = LocalDateTimeUTCSerializer.class) + private LocalDateTime createdAt; /** * Gets id. @@ -241,6 +244,21 @@ public class TrainingDefinitionDTO { this.lastEditedBy = lastEditedBy; } + /** + * Gets the time the Training Definition was created at + * @return the time of Training Definition creation + */ + public LocalDateTime getCreatedAt() { + return createdAt; + } + + /** + * Sets the creation time of the Training Definition + * @param createdAt time of Training Definition creation + */ + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } @Override public String toString() { return "TrainingDefinitionDTO{" + @@ -254,6 +272,7 @@ public class TrainingDefinitionDTO { ", canBeArchived=" + canBeArchived + ", estimatedDuration=" + estimatedDuration + ", lastEdited=" + lastEdited + + ", createdAt=" + createdAt + '}'; } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java index 476e06ea469afa0ae71284a1b4af8c426983dbc5..66be6ef71e5f87d0aad63e31b9f4895cf8cbe176 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/dto/trainingrun/TrainingRunDTO.java @@ -31,6 +31,8 @@ public class TrainingRunDTO { private TRState state; @ApiModelProperty(value = "Reference to the received sandbox.") private String sandboxInstanceRefId; + @ApiModelProperty(value = "Allocation id to the received sandbox.") + private Integer sandboxInstanceAllocationId; @ApiModelProperty(value = "Reference to participant of training run.") private UserRefDTO participantRef; @ApiModelProperty(value = "Boolean to check whether event logging works.", example = "true") @@ -128,6 +130,24 @@ public class TrainingRunDTO { this.sandboxInstanceRefId = sandboxInstanceRefId; } + /** + * Gets sandbox instance allocation id. + * + * @return the sandbox instance allocation id + */ + public Integer getSandboxInstanceAllocationId() { + return sandboxInstanceAllocationId; + } + + /** + * Sets sandbox instance allocation id. + * + * @param sandboxInstanceAllocationId the sandbox instance allocation id + */ + public void setSandboxInstanceAllocationId(Integer sandboxInstanceAllocationId) { + this.sandboxInstanceAllocationId = sandboxInstanceAllocationId; + } + /** * Gets participant ref. * @@ -191,6 +211,7 @@ public class TrainingRunDTO { ", endTime=" + endTime + ", state=" + state + ", sandboxInstanceRefId=" + sandboxInstanceRefId + + ", sandboxInstanceAllocationId" + sandboxInstanceAllocationId + ", participantRef=" + participantRef + ", eventLoggingState=" + eventLoggingState + ", commandLoggingState=" + commandLoggingState + diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java index 0fd4f029abc476d1bfccd1ae12858e6a2aeb2cf2..dd025276c56cd35c5d5e1ef0ddb1c1d55a85f2b0 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/ExportImportFacade.java @@ -177,8 +177,8 @@ public class ExportImportFacade { @TransactionalWO public TrainingDefinitionByIdDTO dbImport(ImportTrainingDefinitionDTO importTrainingDefinitionDTO) { importTrainingDefinitionDTO.setState(TDState.UNRELEASED); - if (importTrainingDefinitionDTO.getTitle() != null && !importTrainingDefinitionDTO.getTitle().startsWith("Uploaded")) { - importTrainingDefinitionDTO.setTitle("Uploaded " + importTrainingDefinitionDTO.getTitle()); + if (importTrainingDefinitionDTO.getTitle() != null) { + importTrainingDefinitionDTO.setTitle(importTrainingDefinitionDTO.getTitle()); } TrainingDefinition newDefinition = exportImportMapper.mapToEntity(importTrainingDefinitionDTO); diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java index c8d71d57c5f72107c7a2b35fcbb1b35ad2bba6c8..9dff1a6bb0859642307b60a3c3d13d952e36d6ef 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/facade/TrainingDefinitionFacade.java @@ -215,6 +215,7 @@ public class TrainingDefinitionFacade { TrainingDefinition mappedTrainingDefinition = trainingDefinitionMapper.mapUpdateToEntity(trainingDefinitionUpdateDTO); TrainingDefinition trainingDefinition = trainingDefinitionService.findById(trainingDefinitionUpdateDTO.getId()); mappedTrainingDefinition.setAuthors(new HashSet<>(trainingDefinition.getAuthors())); + mappedTrainingDefinition.setCreatedAt(trainingDefinition.getCreatedAt()); trainingDefinitionService.update(mappedTrainingDefinition); } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java index c01432ea3f35ce500525db4dc4fc5865c0536913..68fa0c659d5ef431619b1316e27728e4a55a07d9 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/api/SandboxServiceApi.java @@ -7,6 +7,7 @@ import cz.muni.ics.kypo.training.adaptive.dto.responses.SandboxInfo; import cz.muni.ics.kypo.training.adaptive.exceptions.CustomWebClientException; import cz.muni.ics.kypo.training.adaptive.exceptions.ForbiddenException; import cz.muni.ics.kypo.training.adaptive.exceptions.MicroserviceApiException; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; @@ -36,7 +37,7 @@ public class SandboxServiceApi { } - public String getAndLockSandboxForTrainingRun(Long poolId) { + public Pair<Integer, String> getAndLockSandboxForTrainingRun(Long poolId) { try { SandboxInfo sandboxInfo = sandboxServiceWebClient .get() @@ -44,7 +45,7 @@ public class SandboxServiceApi { .retrieve() .bodyToMono(SandboxInfo.class) .block(); - return sandboxInfo.getId(); + return Pair.of(sandboxInfo.getAllocationUnitId(), sandboxInfo.getId()); } catch (CustomWebClientException ex) { if (ex.getStatusCode() == HttpStatus.CONFLICT) { throw new ForbiddenException("There is no available sandbox, wait a minute and try again or ask organizer to allocate more sandboxes."); diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java index 2656e723e98db670a40c45fc40e23d1489ee8f61..2648a26c8c6e39d74ab45e1fdb3af3803271d1f3 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingDefinitionService.java @@ -160,6 +160,7 @@ public class TrainingDefinitionService { */ public TrainingDefinition create(TrainingDefinition trainingDefinition) { addLoggedInUserToTrainingDefinitionAsAuthor(trainingDefinition); + trainingDefinition.setCreatedAt(getCurrentTimeInUTC()); LOG.info("Training definition with id: {} created.", trainingDefinition.getId()); return this.auditAndSave(trainingDefinition); } diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java index 7375dd9934b56d8bf6115c7fc5685b662ed97f1e..c47ae1efe42567f29e77d7bdc793db67a00bef6b 100644 --- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java +++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingRunService.java @@ -27,6 +27,7 @@ import cz.muni.ics.kypo.training.adaptive.service.api.SandboxServiceApi; import cz.muni.ics.kypo.training.adaptive.service.api.SmartAssistantServiceApi; import cz.muni.ics.kypo.training.adaptive.service.api.UserManagementServiceApi; import cz.muni.ics.kypo.training.adaptive.service.audit.AuditEventsService; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -604,8 +605,9 @@ public class TrainingRunService { * @throws MicroserviceApiException error calling OpenStack Sandbox Service API */ public TrainingRun assignSandbox(TrainingRun trainingRun, long poolId) { - String sandboxInstanceRef = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId); - trainingRun.setSandboxInstanceRefId(sandboxInstanceRef); + Pair<Integer, String> sandboxRefAndId = this.sandboxServiceApi.getAndLockSandboxForTrainingRun(poolId); + trainingRun.setSandboxInstanceRefId(sandboxRefAndId.getRight()); + trainingRun.setSandboxInstanceAllocationId(sandboxRefAndId.getLeft()); return trainingRunRepository.save(trainingRun); } @@ -827,6 +829,7 @@ public class TrainingRunService { trainingRun.setState(TRState.ARCHIVED); trainingRun.setPreviousSandboxInstanceRefId(trainingRun.getSandboxInstanceRefId()); trainingRun.setSandboxInstanceRefId(null); + trainingRun.setSandboxInstanceAllocationId(null); trAcquisitionLockRepository.deleteByParticipantRefIdAndTrainingInstanceId(trainingRun.getParticipantRef().getUserRefId(), trainingRun.getTrainingInstance().getId()); trainingRunRepository.save(trainingRun); } diff --git a/src/main/resources/db/migration/V11__db_training_definition_created_at.sql b/src/main/resources/db/migration/V11__db_training_definition_created_at.sql new file mode 100644 index 0000000000000000000000000000000000000000..5ffce87a4128349bdb6690be49f166c6aeecdb50 --- /dev/null +++ b/src/main/resources/db/migration/V11__db_training_definition_created_at.sql @@ -0,0 +1 @@ +alter table training_definition add column created_at timestamp not null default current_timestamp; diff --git a/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql b/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql new file mode 100644 index 0000000000000000000000000000000000000000..9aa9b61269601dbe6de7afb8c981125b273f5cbb --- /dev/null +++ b/src/main/resources/db/migration/V12__db_training_run_sandbox_allocation_id.sql @@ -0,0 +1 @@ +alter table training_run add column sandbox_instance_allocation_id int8; diff --git a/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java b/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java index 990aeffadc4fba8ffa6d4dc70e89175ca7e9eab3..eed6cc87eabaf1c8cb2023e76dd32512669bdc0a 100644 --- a/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java +++ b/src/test/java/cz/muni/ics/kypo/training/adaptive/util/TestDataFactory.java @@ -133,13 +133,13 @@ public class TestDataFactory { private TrainingDefinition unreleasedDefinition = generateTrainingDefinition("Unreleased definition", "Unreleased description", new String[]{"p1", "p2"}, new String[]{"o1", "o2"}, TDState.UNRELEASED, true, - LocalDateTime.now(Clock.systemUTC()).minusHours(1), "John Doe"); + LocalDateTime.now(Clock.systemUTC()).minusHours(1), "John Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(1)); private TrainingDefinition releasedDefinition = generateTrainingDefinition("Released definition", "Released description", new String[]{"p3", "p4"}, new String[]{"o3"}, TDState.RELEASED, true, - LocalDateTime.now(Clock.systemUTC()).minusHours(5), "John Doe"); + LocalDateTime.now(Clock.systemUTC()).minusHours(5), "John Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(5)); private TrainingDefinition archivedDefinition = generateTrainingDefinition("Archived definition", "Archived description", new String[]{"p5"}, new String[]{"o4", "o5", "o6"}, TDState.ARCHIVED, false, - LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Jane Doe"); + LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Jane Doe", LocalDateTime.now(Clock.systemUTC()).minusHours(10)); private TrainingDefinitionDTO unreleasedDefinitionDTO = generateTrainingDefinitionDTO(unreleasedDefinition); private TrainingDefinitionDTO releasedDefinitionDTO = generateTrainingDefinitionDTO(releasedDefinition); private TrainingDefinitionDTO archivedDefinitionDTO = generateTrainingDefinitionDTO(archivedDefinition); @@ -177,16 +177,16 @@ public class TestDataFactory { LocalDateTime.now(Clock.systemUTC()).minusHours(10), "Archived instance", "archived-6666"); private TrainingRun runningRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(2), LocalDateTime.now(Clock.systemUTC()).plusHours(2), - TRState.RUNNING, 2, true, "1L", true, + TRState.RUNNING, 2, true, "1L", 1, true, "20L"); private TrainingRun finishedRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(10), LocalDateTime.now(Clock.systemUTC()).minusHours(5), - TRState.FINISHED, 4, false, "3L", true, "30L"); + TRState.FINISHED, 4, false, "3L", 3, true, "30L"); private TrainingRun archivedRun = generateTrainingRun(LocalDateTime.now(Clock.systemUTC()).minusHours(20), LocalDateTime.now(Clock.systemUTC()).minusHours(10), - TRState.ARCHIVED, 0, false, "5L", false, "60L"); + TRState.ARCHIVED, 0, false, "5L", 5, false, "60L"); private TrainingRunByIdDTO trainingRunByIdDTO = generateTrainingRunByIdDTO(LocalDateTime.now(Clock.systemUTC()).minusHours(2), LocalDateTime.now(Clock.systemUTC()).plusHours(2), TRState.RUNNING, "5L"); private TrainingRunDTO trainingRunDTO = generateTrainingRunDTO(LocalDateTime.now(Clock.systemUTC()).minusHours(9), LocalDateTime.now(Clock.systemUTC()).minusHours(5), - TRState.FINISHED, "7L"); + TRState.FINISHED, "7L", 7); // private AccessedTrainingRunDTO accessedTrainingRunDTO = generateAccessedTrainingRunDTO("Accessed run", LocalDateTime.now(Clock.systemUTC()).minusHours(8), LocalDateTime.now(Clock.systemUTC()).minusHours(4), 5, // 6, Actions.RESUME); @@ -647,7 +647,8 @@ public class TestDataFactory { private TrainingDefinition generateTrainingDefinition(String title, String description, String[] prerequisites, String[] outcomes, TDState state, boolean showStepperBar, - LocalDateTime lastEdited, String lastEditedBy){ + LocalDateTime lastEdited, String lastEditedBy, + LocalDateTime createdAt){ TrainingDefinition newTrainingDefinition = new TrainingDefinition(); newTrainingDefinition.setTitle(title); newTrainingDefinition.setDescription(description); @@ -656,6 +657,7 @@ public class TestDataFactory { newTrainingDefinition.setShowStepperBar(showStepperBar); newTrainingDefinition.setLastEdited(lastEdited); newTrainingDefinition.setLastEditedBy(lastEditedBy); + newTrainingDefinition.setCreatedAt(createdAt); return newTrainingDefinition; } @@ -667,6 +669,7 @@ public class TestDataFactory { trainingDefinitionDTO.setState(trainingDefinition.getState()); trainingDefinitionDTO.setShowStepperBar(trainingDefinition.isShowStepperBar()); trainingDefinitionDTO.setLastEdited(trainingDefinition.getLastEdited()); + trainingDefinitionDTO.setCreatedAt(trainingDefinition.getCreatedAt()); return trainingDefinitionDTO; } @@ -691,7 +694,7 @@ public class TestDataFactory { } private TrainingRun generateTrainingRun(LocalDateTime startTime, LocalDateTime endTime, TRState state, - int incorrectAnswerCount, boolean solutionTaken, String SBIRefId, boolean phaseAnswered, String previousSBIRefId){ + int incorrectAnswerCount, boolean solutionTaken, String SBIRefId, Integer SBIAllocId, boolean phaseAnswered, String previousSBIRefId){ TrainingRun newTrainingRun = new TrainingRun(); newTrainingRun.setStartTime(startTime); newTrainingRun.setEndTime(endTime); @@ -699,6 +702,7 @@ public class TestDataFactory { newTrainingRun.setIncorrectAnswerCount(incorrectAnswerCount); newTrainingRun.setSolutionTaken(solutionTaken); newTrainingRun.setSandboxInstanceRefId(SBIRefId); + newTrainingRun.setSandboxInstanceAllocationId(SBIAllocId); newTrainingRun.setPhaseAnswered(phaseAnswered); newTrainingRun.setPreviousSandboxInstanceRefId(previousSBIRefId); return newTrainingRun; @@ -801,12 +805,13 @@ public class TestDataFactory { return trainingRunByIdDTO; } - private TrainingRunDTO generateTrainingRunDTO(LocalDateTime start, LocalDateTime end, TRState state, String SBIId){ + private TrainingRunDTO generateTrainingRunDTO(LocalDateTime start, LocalDateTime end, TRState state, String SBIRefId, Integer SBIAllocId){ TrainingRunDTO trainingRunDTO = new TrainingRunDTO(); trainingRunDTO.setStartTime(start); trainingRunDTO.setEndTime(end); trainingRunDTO.setState(state); - trainingRunDTO.setSandboxInstanceRefId(SBIId); + trainingRunDTO.setSandboxInstanceRefId(SBIRefId); + trainingRunDTO.setSandboxInstanceAllocationId(SBIAllocId); return trainingRunDTO; }