diff --git a/src/main/java/org/codelibs/fess/app/web/api/admin/elevateword/ApiAdminElevatewordAction.java b/src/main/java/org/codelibs/fess/app/web/api/admin/elevateword/ApiAdminElevatewordAction.java index 9b5ca8df1..87bfe69ea 100644 --- a/src/main/java/org/codelibs/fess/app/web/api/admin/elevateword/ApiAdminElevatewordAction.java +++ b/src/main/java/org/codelibs/fess/app/web/api/admin/elevateword/ApiAdminElevatewordAction.java @@ -38,6 +38,8 @@ import org.codelibs.fess.app.service.ElevateWordService; import org.codelibs.fess.app.web.CrudMode; import org.codelibs.fess.app.web.admin.elevateword.UploadForm; import org.codelibs.fess.app.web.api.ApiResult; +import org.codelibs.fess.app.web.api.ApiResult.ApiUpdateResponse; +import org.codelibs.fess.app.web.api.ApiResult.Status; import org.codelibs.fess.app.web.api.admin.FessApiAdminAction; import org.codelibs.fess.es.config.exentity.ElevateWord; import org.codelibs.fess.exception.FessSystemException; @@ -112,20 +114,21 @@ public class ApiAdminElevatewordAction extends FessApiAdminAction { public JsonResponse post$setting(final EditBody body) { validateApi(body, messages -> {}); body.crudMode = CrudMode.EDIT; - final ElevateWord entity = getElevateWord(body).orElseGet(() -> { - throwValidationErrorApi(messages -> { - messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id); - }); + final ElevateWord elevateWord = getElevateWord(body).map(entity -> { + try { + elevateWordService.store(entity); + suggestHelper.deleteAllElevateWord(); + suggestHelper.storeAllElevateWords(); + } catch (final Exception e) { + throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e))); + } + return entity; + }).orElseGet(() -> { + throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id)); return null; }); - try { - elevateWordService.store(entity); - suggestHelper.deleteAllElevateWord(); - suggestHelper.storeAllElevateWords(); - } catch (final Exception e) { - throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e))); - } - return asJson(new ApiResult.ApiUpdateResponse().id(entity.getId()).created(false).status(ApiResult.Status.OK).result()); + + return asJson(new ApiUpdateResponse().id(elevateWord.getId()).created(false).status(Status.OK).result()); } // DELETE /api/admin/elevateword/setting/{id} @@ -187,21 +190,14 @@ public class ApiAdminElevatewordAction extends FessApiAdminAction { protected EditBody createEditBody(final ElevateWord entity) { final EditBody body = new EditBody(); - body.id = entity.getId(); - body.versionNo = entity.getVersionNo(); - body.createdBy = entity.getCreatedBy(); - body.createdTime = entity.getCreatedTime(); - body.suggestWord = entity.getSuggestWord(); - body.updatedBy = entity.getUpdatedBy(); - body.updatedTime = entity.getUpdatedTime(); - body.labelTypeIds = entity.getLabelTypeIds(); + copyBeanToBean(entity, body, copyOp -> { + copyOp.excludeNull(); + }); final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper(); body.permissions = stream(entity.getPermissions()).get( stream -> stream.map(s -> permissionHelper.decode(s)).filter(StringUtil::isNotBlank).distinct() .collect(Collectors.joining("\n"))); - body.targetLabel = entity.getTargetLabel(); - body.reading = entity.getReading(); return body; } diff --git a/src/test/java/org/codelibs/fess/it/admin/ElevateWordTests.java b/src/test/java/org/codelibs/fess/it/admin/ElevateWordTests.java new file mode 100644 index 000000000..619e0c440 --- /dev/null +++ b/src/test/java/org/codelibs/fess/it/admin/ElevateWordTests.java @@ -0,0 +1,83 @@ +/* + * Copyright 2012-2017 CodeLibs Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.codelibs.fess.it.admin; + +import java.util.HashMap; +import java.util.Map; + +import org.codelibs.fess.it.CrudTestBase; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +@Tag("it") +public class ElevateWordTests extends CrudTestBase { + + private static final String NAME_PREFIX = "elevateWordTest_"; + private static final String API_PATH = "/api/admin/elevateword"; + private static final String LIST_ENDPOINT_SUFFIX = "settings"; + private static final String ITEM_ENDPOINT_SUFFIX = "setting"; + + private static final String KEY_PROPERTY = "suggest_word"; + + @Override + protected String getNamePrefix() { + return NAME_PREFIX; + } + + @Override + protected String getApiPath() { + return API_PATH; + } + + @Override + protected String getKeyProperty() { + return KEY_PROPERTY; + } + + @Override + protected String getListEndpointSuffix() { + return LIST_ENDPOINT_SUFFIX; + } + + @Override + protected String getItemEndpointSuffix() { + return ITEM_ENDPOINT_SUFFIX; + } + + @Override + protected Map createTestParam(int id) { + final Map requestBody = new HashMap<>(); + final String keyProp = NAME_PREFIX + id; + requestBody.put(KEY_PROPERTY, keyProp); + requestBody.put("boost", id); + return requestBody; + } + + @Override + protected Map getUpdateMap() { + final Map updateMap = new HashMap<>(); + updateMap.put(KEY_PROPERTY, NAME_PREFIX + "new"); + return updateMap; + } + + @Test + void crudTest() { + testCreate(); + testRead(); + testUpdate(); + testDelete(); + } +}