add more tests
This commit is contained in:
parent
49abd4e5b0
commit
e250f340d8
4 changed files with 1194 additions and 1108 deletions
|
@ -1,110 +1,110 @@
|
|||
/*
|
||||
* Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package ch.ethz.seb.sebserver.gbl.model.sebconfig;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import ch.ethz.seb.sebserver.gbl.api.EntityType;
|
||||
import ch.ethz.seb.sebserver.gbl.model.Domain.CONFIGURATION_NODE;
|
||||
import ch.ethz.seb.sebserver.gbl.model.Entity;
|
||||
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode.ConfigurationType;
|
||||
|
||||
public final class ConfigCreationInfo implements Entity {
|
||||
|
||||
public static final String ATTR_COPY_WITH_HISTORY = "with-history";
|
||||
|
||||
@NotNull
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_ID)
|
||||
public final Long configurationNodeId;
|
||||
|
||||
@NotNull(message = "configurationNode:name:notNull")
|
||||
@Size(min = 3, max = 255, message = "configurationNode:name:size:{min}:{max}:${validatedValue}")
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_NAME)
|
||||
public final String name;
|
||||
|
||||
@Size(max = 4000, message = "configurationNode:description:size:{min}:{max}:${validatedValue}")
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_DESCRIPTION)
|
||||
public final String description;
|
||||
|
||||
@JsonProperty(ATTR_COPY_WITH_HISTORY)
|
||||
public final Boolean withHistory;
|
||||
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_TYPE)
|
||||
public final ConfigurationType configurationType;
|
||||
|
||||
protected ConfigCreationInfo(
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_ID) final Long configurationNodeId,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_NAME) final String name,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_DESCRIPTION) final String description,
|
||||
@JsonProperty(ATTR_COPY_WITH_HISTORY) final Boolean withHistory,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_TYPE) final ConfigurationType configurationType) {
|
||||
|
||||
this.configurationNodeId = configurationNodeId;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.withHistory = withHistory;
|
||||
this.configurationType = (configurationType != null)
|
||||
? configurationType
|
||||
: ConfigurationType.EXAM_CONFIG;
|
||||
}
|
||||
|
||||
public Long getConfigurationNodeId() {
|
||||
return this.configurationNodeId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
public Boolean getWithHistory() {
|
||||
return this.withHistory;
|
||||
}
|
||||
|
||||
public ConfigurationType getConfigurationType() {
|
||||
return this.configurationType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModelId() {
|
||||
return (this.configurationNodeId != null)
|
||||
? String.valueOf(this.configurationNodeId)
|
||||
: null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType entityType() {
|
||||
return EntityType.CONFIGURATION_NODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
builder.append("ConfigCopyInfo [configurationNodeId=");
|
||||
builder.append(this.configurationNodeId);
|
||||
builder.append(", name=");
|
||||
builder.append(this.name);
|
||||
builder.append(", description=");
|
||||
builder.append(this.description);
|
||||
builder.append(", withHistory=");
|
||||
builder.append(this.withHistory);
|
||||
builder.append(", configurationType=");
|
||||
builder.append(this.configurationType);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET)
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package ch.ethz.seb.sebserver.gbl.model.sebconfig;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import ch.ethz.seb.sebserver.gbl.api.EntityType;
|
||||
import ch.ethz.seb.sebserver.gbl.model.Domain.CONFIGURATION_NODE;
|
||||
import ch.ethz.seb.sebserver.gbl.model.Entity;
|
||||
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode.ConfigurationType;
|
||||
|
||||
public final class ConfigCreationInfo implements Entity {
|
||||
|
||||
public static final String ATTR_COPY_WITH_HISTORY = "with-history";
|
||||
|
||||
@NotNull
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_ID)
|
||||
public final Long configurationNodeId;
|
||||
|
||||
@NotNull(message = "configurationNode:name:notNull")
|
||||
@Size(min = 3, max = 255, message = "configurationNode:name:size:{min}:{max}:${validatedValue}")
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_NAME)
|
||||
public final String name;
|
||||
|
||||
@Size(max = 4000, message = "configurationNode:description:size:{min}:{max}:${validatedValue}")
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_DESCRIPTION)
|
||||
public final String description;
|
||||
|
||||
@JsonProperty(ATTR_COPY_WITH_HISTORY)
|
||||
public final Boolean withHistory;
|
||||
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_TYPE)
|
||||
public final ConfigurationType configurationType;
|
||||
|
||||
public ConfigCreationInfo(
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_ID) final Long configurationNodeId,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_NAME) final String name,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_DESCRIPTION) final String description,
|
||||
@JsonProperty(ATTR_COPY_WITH_HISTORY) final Boolean withHistory,
|
||||
@JsonProperty(CONFIGURATION_NODE.ATTR_TYPE) final ConfigurationType configurationType) {
|
||||
|
||||
this.configurationNodeId = configurationNodeId;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.withHistory = withHistory;
|
||||
this.configurationType = (configurationType != null)
|
||||
? configurationType
|
||||
: ConfigurationType.EXAM_CONFIG;
|
||||
}
|
||||
|
||||
public Long getConfigurationNodeId() {
|
||||
return this.configurationNodeId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
public Boolean getWithHistory() {
|
||||
return this.withHistory;
|
||||
}
|
||||
|
||||
public ConfigurationType getConfigurationType() {
|
||||
return this.configurationType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModelId() {
|
||||
return (this.configurationNodeId != null)
|
||||
? String.valueOf(this.configurationNodeId)
|
||||
: null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType entityType() {
|
||||
return EntityType.CONFIGURATION_NODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
builder.append("ConfigCopyInfo [configurationNodeId=");
|
||||
builder.append(this.configurationNodeId);
|
||||
builder.append(", name=");
|
||||
builder.append(this.name);
|
||||
builder.append(", description=");
|
||||
builder.append(this.description);
|
||||
builder.append(", withHistory=");
|
||||
builder.append(this.withHistory);
|
||||
builder.append(", configurationType=");
|
||||
builder.append(this.configurationType);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@ public class ExamAPI_V1_Controller {
|
|||
@RequestParam(required = false) final MultiValueMap<String, String> formParams,
|
||||
final Principal principal,
|
||||
final HttpServletRequest request,
|
||||
final HttpServletResponse response) throws IOException {
|
||||
final HttpServletResponse response) {
|
||||
|
||||
return CompletableFuture.runAsync(
|
||||
() -> streamExamConfig(connectionToken, formParams, principal, response),
|
||||
|
|
|
@ -23,6 +23,8 @@ import java.util.Map;
|
|||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigCreationInfo;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.*;
|
||||
import org.apache.commons.codec.Charsets;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
|
@ -103,29 +105,6 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.
|
|||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.GetClientConfigPage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.NewClientConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.SaveClientConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.ExportPlainXML;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigAttributes;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigurationPage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigurationTableValues;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigurationValuePage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigurationValues;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetConfigurations;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetExamConfigNode;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetExamConfigNodePage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetFollowupConfiguration;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetOrientationPage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetOrientations;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetViewList;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetViewPage;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.GetViews;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.ImportExamConfigOnExistingConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.ImportNewExamConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.NewExamConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfig;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigHistory;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigTableValues;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigValue;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SebExamConfigUndo;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ActivateUserAccount;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ChangePassword;
|
||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.GetUserAccount;
|
||||
|
@ -1342,6 +1321,9 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
|||
"examAdmin2",
|
||||
"examAdmin2",
|
||||
new GetConfigAttributes(),
|
||||
new GetConfigurationValues(),
|
||||
new GetConfigurationValuePage(),
|
||||
new GetConfigurationTableValues(),
|
||||
new GetExamConfigNodePage(),
|
||||
new SaveExamConfigHistory(),
|
||||
new ExportExamConfig(),
|
||||
|
@ -1407,6 +1389,64 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
|||
|
||||
assertNotNull(importedConfig);
|
||||
|
||||
// Check imported value
|
||||
final Configuration fallow_up = restService.getBuilder(GetFollowupConfiguration.class)
|
||||
.withURIVariable(API.PARAM_MODEL_ID, String.valueOf(importedConfig.configurationNodeId))
|
||||
.call()
|
||||
.getOrThrow();
|
||||
assertNotNull(fallow_up);
|
||||
|
||||
List<ConfigurationValue> values = restService.getBuilder(GetConfigurationValues.class)
|
||||
.withQueryParam(
|
||||
ConfigurationValue.FILTER_ATTR_CONFIGURATION_ID,
|
||||
String.valueOf(fallow_up.id))
|
||||
.call()
|
||||
.getOrThrow();
|
||||
|
||||
assertNotNull(values);
|
||||
attributes
|
||||
.stream()
|
||||
.filter(attr -> "URLFilterEnable".equals(attr.name))
|
||||
.findFirst()
|
||||
.ifPresentOrElse(
|
||||
attr -> {
|
||||
values.stream()
|
||||
.filter(cv -> cv.attributeId.equals(attr.id))
|
||||
.findFirst()
|
||||
.ifPresentOrElse(
|
||||
val -> assertEquals(Constants.TRUE_STRING, val.value),
|
||||
() -> fail("Expect to find one value")
|
||||
);
|
||||
},
|
||||
() -> fail("Expect to find one attribute")
|
||||
);
|
||||
|
||||
attributes
|
||||
.stream()
|
||||
.filter(attr -> "URLFilterRules".equals(attr.name))
|
||||
.findFirst()
|
||||
.ifPresentOrElse(
|
||||
parent -> {
|
||||
attributes.stream()
|
||||
.filter(attr -> parent.id.equals(attr.parentId) && "URLFilterRules.expression".equals(attr.name))
|
||||
.findFirst()
|
||||
.ifPresentOrElse(
|
||||
tAttr -> {
|
||||
values.stream()
|
||||
.filter(tVal -> tVal.attributeId.equals(tAttr.id) && tVal.listIndex == 0)
|
||||
.findFirst()
|
||||
.ifPresentOrElse(
|
||||
firstTVal -> assertEquals("jrtjrtzj", firstTVal.value),
|
||||
() -> fail("Expect to find one value")
|
||||
);
|
||||
},
|
||||
() -> fail("Expect to find one attribute")
|
||||
);
|
||||
|
||||
},
|
||||
() -> fail("Expect to find one attribute")
|
||||
);
|
||||
|
||||
// import with the same name should cause an exception
|
||||
try {
|
||||
restService
|
||||
|
@ -1488,6 +1528,7 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
|||
// *************************************
|
||||
// Use Case 15: Login as examAdmin2 and get views and orientations
|
||||
// - test Views API
|
||||
// - create configuration template form existing configuration
|
||||
public void testUsecase15() throws IOException {
|
||||
final RestServiceImpl restService = createRestServiceForUser(
|
||||
"examAdmin2",
|
||||
|
@ -1495,7 +1536,11 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
|||
new GetViews(),
|
||||
new GetViewPage(),
|
||||
new GetOrientationPage(),
|
||||
new GetOrientations());
|
||||
new GetOrientations(),
|
||||
new CopyConfiguration(),
|
||||
new GetTemplateAttributePage(),
|
||||
new GetExamConfigNodePage(),
|
||||
new GetTemplateAttribute());
|
||||
|
||||
final List<View> views = restService
|
||||
.getBuilder(GetViews.class)
|
||||
|
@ -1503,12 +1548,53 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
|||
.getOrThrow();
|
||||
|
||||
assertNotNull(views);
|
||||
assertTrue(views.size() == 11);
|
||||
assertEquals(11, views.size());
|
||||
views.forEach(v -> assertEquals(v.templateId, ConfigurationNode.DEFAULT_TEMPLATE_ID));
|
||||
|
||||
final List<Orientation> orientations = restService
|
||||
.getBuilder(GetOrientations.class)
|
||||
.call()
|
||||
.getOrThrow();
|
||||
orientations.forEach(o -> assertEquals(o.templateId, ConfigurationNode.DEFAULT_TEMPLATE_ID));
|
||||
|
||||
// get configuration page and first config from the page to copy as template
|
||||
final Result<Page<ConfigurationNode>> pageResponse = restService
|
||||
.getBuilder(GetExamConfigNodePage.class)
|
||||
.call();
|
||||
|
||||
assertNotNull(pageResponse);
|
||||
assertFalse(pageResponse.hasError());
|
||||
final Page<ConfigurationNode> page = pageResponse.get();
|
||||
assertFalse(page.content.isEmpty());
|
||||
|
||||
final ConfigurationNode configurationNode = page.content.get(0);
|
||||
assertEquals("New Exam Config", configurationNode.name);
|
||||
|
||||
ConfigCreationInfo copyInfo = new ConfigCreationInfo(
|
||||
configurationNode.id,
|
||||
"Config Template",
|
||||
"Test Config Template creation",
|
||||
false,
|
||||
ConfigurationType.TEMPLATE
|
||||
);
|
||||
|
||||
ConfigurationNode template = restService
|
||||
.getBuilder(CopyConfiguration.class)
|
||||
.withBody(copyInfo)
|
||||
.call()
|
||||
.getOrThrow();
|
||||
assertNotNull(template);
|
||||
// get template page and check new template is available
|
||||
Page<ConfigurationNode> templates = restService
|
||||
.getBuilder(GetExamConfigNodePage.class)
|
||||
.withQueryParam(ConfigurationNode.FILTER_ATTR_TYPE, ConfigurationType.TEMPLATE.name())
|
||||
.call()
|
||||
.getOrThrow();
|
||||
assertNotNull(templates);
|
||||
assertFalse(templates.isEmpty());
|
||||
ConfigurationNode newTemplate = templates.content.get(0);
|
||||
assertNotNull(newTemplate);
|
||||
assertEquals("Config Template", newTemplate.name);
|
||||
|
||||
assertNotNull(orientations);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue