This is an automated email from the ASF dual-hosted git repository.

hefengen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 265107cc61 New API: supports batch modification of selector/rule 
status (#5499)
265107cc61 is described below

commit 265107cc61a73a5579cb8fdb2e8b18168017b2ab
Author: Kerwin Bryant <[email protected]>
AuthorDate: Tue Mar 19 15:02:07 2024 +0800

    New API: supports batch modification of selector/rule status (#5499)
---
 .../shenyu/admin/controller/RuleController.java    | 31 +++++++++++----
 .../admin/controller/SelectorController.java       | 31 +++++++++++----
 .../org/apache/shenyu/admin/mapper/RuleMapper.java | 46 +++++++++++++---------
 .../apache/shenyu/admin/mapper/SelectorMapper.java |  9 +++++
 .../apache/shenyu/admin/service/RuleService.java   | 11 +++++-
 .../shenyu/admin/service/SelectorService.java      |  9 +++++
 .../shenyu/admin/service/impl/RuleServiceImpl.java | 15 +++++++
 .../admin/service/impl/SelectorServiceImpl.java    | 15 +++++++
 .../src/main/resources/mappers/rule-sqlmap.xml     |  4 ++
 .../src/main/resources/mappers/selector-sqlmap.xml |  4 ++
 .../admin/controller/RuleControllerTest.java       | 39 ++++++++++++++++--
 .../admin/controller/SelectorControllerTest.java   | 38 ++++++++++++++++--
 12 files changed, 210 insertions(+), 42 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java
index 49be6a1069..307671f0c5 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/RuleController.java
@@ -19,6 +19,7 @@ package org.apache.shenyu.admin.controller;
 
 import org.apache.shenyu.admin.aspect.annotation.RestApi;
 import org.apache.shenyu.admin.mapper.RuleMapper;
+import org.apache.shenyu.admin.model.dto.BatchCommonDTO;
 import org.apache.shenyu.admin.model.dto.RuleDTO;
 import org.apache.shenyu.admin.model.page.CommonPager;
 import org.apache.shenyu.admin.model.page.PageCondition;
@@ -51,13 +52,13 @@ import java.util.List;
  */
 @RestApi("/rule")
 public class RuleController implements PagedController<RuleQueryCondition, 
RuleVO> {
-    
+
     private final RuleService ruleService;
-    
+
     public RuleController(final RuleService ruleService) {
         this.ruleService = ruleService;
     }
-    
+
     /**
      * query rules.
      *
@@ -77,7 +78,7 @@ public class RuleController implements 
PagedController<RuleQueryCondition, RuleV
         condition.setKeyword(name);
         return searchAdaptor(new PageCondition<>(currentPage, pageSize, 
condition));
     }
-    
+
     /**
      * detail rule.
      *
@@ -91,7 +92,7 @@ public class RuleController implements 
PagedController<RuleQueryCondition, RuleV
         RuleVO ruleVO = ruleService.findById(id);
         return ShenyuAdminResult.success(ShenyuResultMessage.DETAIL_SUCCESS, 
ruleVO);
     }
-    
+
     /**
      * create rule.
      *
@@ -103,7 +104,7 @@ public class RuleController implements 
PagedController<RuleQueryCondition, RuleV
         Integer createCount = ruleService.createOrUpdate(ruleDTO);
         return ShenyuAdminResult.success(ShenyuResultMessage.CREATE_SUCCESS, 
createCount);
     }
-    
+
     /**
      * update rule.
      *
@@ -120,7 +121,21 @@ public class RuleController implements 
PagedController<RuleQueryCondition, RuleV
         Integer updateCount = ruleService.createOrUpdate(ruleDTO);
         return ShenyuAdminResult.success(ShenyuResultMessage.UPDATE_SUCCESS, 
updateCount);
     }
-    
+
+    /**
+     * Batch enabled rule.
+     *
+     * @param batchCommonDTO the batch common dto
+     * @return the shenyu result
+     */
+    @PostMapping("/batchEnabled")
+    public ShenyuAdminResult batchEnabled(@Valid @RequestBody final 
BatchCommonDTO batchCommonDTO) {
+        if (!ruleService.enabled(batchCommonDTO.getIds(), 
batchCommonDTO.getEnabled())) {
+            return 
ShenyuAdminResult.error(ShenyuResultMessage.NOT_FOUND_EXCEPTION);
+        }
+        return ShenyuAdminResult.success(ShenyuResultMessage.ENABLE_SUCCESS);
+    }
+
     /**
      * delete rules.
      *
@@ -132,7 +147,7 @@ public class RuleController implements 
PagedController<RuleQueryCondition, RuleV
         Integer deleteCount = ruleService.delete(ids);
         return ShenyuAdminResult.success(ShenyuResultMessage.DELETE_SUCCESS, 
deleteCount);
     }
-    
+
     @Override
     public PageService<RuleQueryCondition, RuleVO> pageService() {
         return ruleService;
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java
index 4a14c24b95..891c1c770c 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/SelectorController.java
@@ -19,6 +19,7 @@ package org.apache.shenyu.admin.controller;
 
 import org.apache.shenyu.admin.aspect.annotation.RestApi;
 import org.apache.shenyu.admin.mapper.SelectorMapper;
+import org.apache.shenyu.admin.model.dto.BatchCommonDTO;
 import org.apache.shenyu.admin.model.dto.SelectorDTO;
 import org.apache.shenyu.admin.model.page.CommonPager;
 import org.apache.shenyu.admin.model.page.PageCondition;
@@ -51,13 +52,13 @@ import java.util.List;
  */
 @RestApi("/selector")
 public class SelectorController implements 
PagedController<SelectorQueryCondition, SelectorVO> {
-    
+
     private final SelectorService selectorService;
-    
+
     public SelectorController(final SelectorService selectorService) {
         this.selectorService = selectorService;
     }
-    
+
     /**
      * query Selectors.
      *
@@ -77,7 +78,7 @@ public class SelectorController implements 
PagedController<SelectorQueryConditio
         condition.setKeyword(name);
         return searchAdaptor(new PageCondition<>(currentPage, pageSize, 
condition));
     }
-    
+
     /**
      * detail selector.
      *
@@ -91,7 +92,7 @@ public class SelectorController implements 
PagedController<SelectorQueryConditio
         SelectorVO selectorVO = selectorService.findById(id);
         return ShenyuAdminResult.success(ShenyuResultMessage.DETAIL_SUCCESS, 
selectorVO);
     }
-    
+
     /**
      * create selector.
      *
@@ -103,7 +104,7 @@ public class SelectorController implements 
PagedController<SelectorQueryConditio
         selectorService.createOrUpdate(selectorDTO);
         return ShenyuAdminResult.success(ShenyuResultMessage.CREATE_SUCCESS, 
selectorDTO.getId());
     }
-    
+
     /**
      * update Selector.
      *
@@ -120,7 +121,21 @@ public class SelectorController implements 
PagedController<SelectorQueryConditio
         Integer updateCount = selectorService.createOrUpdate(selectorDTO);
         return ShenyuAdminResult.success(ShenyuResultMessage.UPDATE_SUCCESS, 
updateCount);
     }
-    
+
+    /**
+     * Batch enabled selector.
+     *
+     * @param batchCommonDTO the batch common dto
+     * @return the shenyu result
+     */
+    @PostMapping("/batchEnabled")
+    public ShenyuAdminResult batchEnabled(@Valid @RequestBody final 
BatchCommonDTO batchCommonDTO) {
+        if (!selectorService.enabled(batchCommonDTO.getIds(), 
batchCommonDTO.getEnabled())) {
+            return 
ShenyuAdminResult.error(ShenyuResultMessage.NOT_FOUND_EXCEPTION);
+        }
+        return ShenyuAdminResult.success(ShenyuResultMessage.ENABLE_SUCCESS);
+    }
+
     /**
      * delete Selectors.
      *
@@ -132,7 +147,7 @@ public class SelectorController implements 
PagedController<SelectorQueryConditio
         Integer deleteCount = selectorService.delete(ids);
         return ShenyuAdminResult.success(ShenyuResultMessage.DELETE_SUCCESS, 
deleteCount);
     }
-    
+
     @Override
     public PageService<SelectorQueryCondition, SelectorVO> pageService() {
         return selectorService;
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/RuleMapper.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/RuleMapper.java
index c6322561e5..a8490fa065 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/RuleMapper.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/RuleMapper.java
@@ -33,7 +33,7 @@ import java.util.List;
  */
 @Mapper
 public interface RuleMapper extends ExistProvider {
-    
+
     /**
      * rule existed.
      *
@@ -42,7 +42,7 @@ public interface RuleMapper extends ExistProvider {
      */
     @Override
     Boolean existed(@Param("id") Serializable id);
-    
+
     /**
      * select rule by id.
      *
@@ -50,7 +50,7 @@ public interface RuleMapper extends ExistProvider {
      * @return {@linkplain RuleDO}
      */
     RuleDO selectById(String id);
-    
+
     /**
      * select rule by query.
      *
@@ -58,7 +58,7 @@ public interface RuleMapper extends ExistProvider {
      * @return {@linkplain List}
      */
     List<RuleDO> selectByQuery(RuleQuery ruleQuery);
-    
+
     /**
      * Find by selector id list.
      *
@@ -66,7 +66,7 @@ public interface RuleMapper extends ExistProvider {
      * @return the list
      */
     List<RuleDO> findBySelectorId(String selectorId);
-    
+
     /**
      * Find by selector id list.
      *
@@ -74,7 +74,7 @@ public interface RuleMapper extends ExistProvider {
      * @return the list
      */
     List<RuleDO> findBySelectorIds(List<String> selectorIds);
-    
+
     /**
      * select rule by name.
      *
@@ -82,7 +82,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rule do
      */
     RuleDO findByName(String name);
-    
+
     /**
      * Find by selector id and name rule do.
      *
@@ -91,7 +91,7 @@ public interface RuleMapper extends ExistProvider {
      * @return the rule do
      */
     RuleDO findBySelectorIdAndName(@Param("selectorId") String selectorId, 
@Param("name") String name);
-    
+
     /**
      * count rule by query.
      *
@@ -99,7 +99,7 @@ public interface RuleMapper extends ExistProvider {
      * @return {@linkplain Integer}
      */
     Integer countByQuery(RuleQuery ruleQuery);
-    
+
     /**
      * insert rule.
      *
@@ -107,7 +107,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int insert(RuleDO ruleDO);
-    
+
     /**
      * insert selective rule.
      *
@@ -115,7 +115,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int insertSelective(RuleDO ruleDO);
-    
+
     /**
      * update rule.
      *
@@ -123,7 +123,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int update(RuleDO ruleDO);
-    
+
     /**
      * update selective rule.
      *
@@ -131,7 +131,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int updateSelective(RuleDO ruleDO);
-    
+
     /**
      * delete rule.
      *
@@ -139,7 +139,7 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int delete(String id);
-    
+
     /**
      * delete rule.
      *
@@ -147,14 +147,14 @@ public interface RuleMapper extends ExistProvider {
      * @return rows int
      */
     int deleteByIds(List<String> ids);
-    
+
     /**
      * list all.
      *
      * @return {@linkplain List}
      */
     List<RuleDO> selectAll();
-    
+
     /**
      * search by condition.
      *
@@ -162,7 +162,7 @@ public interface RuleMapper extends ExistProvider {
      * @return list
      */
     List<RuleVO> selectByCondition(@Param("condition") RuleQueryCondition 
condition);
-    
+
     /**
      * get plugin name by selectorId.
      *
@@ -170,7 +170,7 @@ public interface RuleMapper extends ExistProvider {
      * @return plugin name
      */
     String getPluginNameBySelectorId(@Param("selectorId") String selectorId);
-    
+
     /**
      * select by rule ids.
      *
@@ -178,5 +178,13 @@ public interface RuleMapper extends ExistProvider {
      * @return rules
      */
     List<RuleDO> selectByIds(@Param("ids") List<String> ids);
-    
+
+    /**
+     * update status.
+     *
+     * @param id id
+     * @param enabled enabled
+     * @return result
+     */
+    int updateEnable(@Param("id") String id, @Param("enabled") Boolean 
enabled);
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/SelectorMapper.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/SelectorMapper.java
index e2e0320921..871972c079 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/SelectorMapper.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/SelectorMapper.java
@@ -195,4 +195,13 @@ public interface SelectorMapper extends ExistProvider {
      * @return SelectorDOs
      */
     List<SelectorDO> selectByDiscoveryId(@Param("discoveryId") String 
discoveryId);
+
+    /**
+     * update status.
+     *
+     * @param id id
+     * @param enabled enabled
+     * @return result
+     */
+    int updateEnable(@Param("id") String id, @Param("enabled") Boolean 
enabled);
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/RuleService.java 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/RuleService.java
index 1323ad82e2..c903a42d06 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/RuleService.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/RuleService.java
@@ -148,7 +148,7 @@ public interface RuleService extends 
PageService<RuleQueryCondition, RuleVO> {
      * @return {@link RuleDO}
      */
     RuleDO findByName(String name);
-    
+
     /**
      * Find by selector id and name rule do.
      *
@@ -164,4 +164,13 @@ public interface RuleService extends 
PageService<RuleQueryCondition, RuleVO> {
      * @return config import result
      */
     ConfigImportResult importData(List<RuleDTO> ruleList);
+
+    /**
+     * Enabled string.
+     *
+     * @param ids     the ids
+     * @param enabled the enable
+     * @return the result
+     */
+    Boolean enabled(List<String> ids, Boolean enabled);
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SelectorService.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SelectorService.java
index 66dc68efb7..8e4e9a7f01 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SelectorService.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/SelectorService.java
@@ -227,4 +227,13 @@ public interface SelectorService extends 
PageService<SelectorQueryCondition, Sel
      * @return config import result
      */
     ConfigImportResult importData(List<SelectorDTO> selectorList);
+
+    /**
+     * Enabled string.
+     *
+     * @param ids     the ids
+     * @param enabled the enable
+     * @return the result
+     */
+    Boolean enabled(List<String> ids, Boolean enabled);
 }
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
index b170450c21..f724c79c20 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
@@ -50,6 +50,7 @@ import org.apache.shenyu.common.constant.AdminConstants;
 import org.apache.shenyu.common.dto.ConditionData;
 import org.apache.shenyu.common.dto.RuleData;
 import org.apache.shenyu.common.enums.MatchModeEnum;
+import org.apache.shenyu.common.utils.JsonUtils;
 import org.apache.shenyu.common.utils.ListUtil;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
@@ -289,6 +290,20 @@ public class RuleServiceImpl implements RuleService {
         return ConfigImportResult.success(successCount);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean enabled(final List<String> ids, final Boolean enabled) {
+        ids.forEach(id -> {
+            RuleDO ruleDO = ruleMapper.selectById(id);
+            RuleDO before = JsonUtils.jsonToObject(JsonUtils.toJson(ruleDO), 
RuleDO.class);
+            ruleDO.setEnabled(enabled);
+            if (ruleMapper.updateEnable(id, enabled) > 0) {
+                ruleEventPublisher.onUpdated(ruleDO, before);
+            }
+        });
+        return Boolean.TRUE;
+    }
+
     /**
      * delete rules.
      *
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
index 0cc09ecca3..4483c5a807 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java
@@ -70,6 +70,7 @@ import org.apache.shenyu.common.enums.DataEventTypeEnum;
 import org.apache.shenyu.common.enums.MatchModeEnum;
 import org.apache.shenyu.common.enums.SelectorTypeEnum;
 import org.apache.shenyu.common.utils.ContextPathUtils;
+import org.apache.shenyu.common.utils.JsonUtils;
 import org.apache.shenyu.common.utils.ListUtil;
 import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
 import org.slf4j.Logger;
@@ -473,6 +474,20 @@ public class SelectorServiceImpl implements 
SelectorService {
         return ConfigImportResult.success(successCount);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean enabled(final List<String> ids, final Boolean enabled) {
+        ids.forEach(id -> {
+            SelectorDO selectorDO = selectorMapper.selectById(id);
+            SelectorDO before = 
JsonUtils.jsonToObject(JsonUtils.toJson(selectorDO), SelectorDO.class);
+            selectorDO.setEnabled(enabled);
+            if (selectorMapper.updateEnable(id, enabled) > 0) {
+                selectorEventPublisher.onUpdated(selectorDO, before);
+            }
+        });
+        return Boolean.TRUE;
+    }
+
     /**
      * the plugin delete, synchronously delete selectors.
      *
diff --git a/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
index b932786033..9e3cf0714a 100644
--- a/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
@@ -335,6 +335,10 @@
         WHERE id = #{id, jdbcType=VARCHAR}
     </update>
 
+    <update id="updateEnable">
+        UPDATE rule SET enabled = #{enabled, jdbcType=TINYINT} WHERE id = 
#{id, jdbcType=VARCHAR}
+    </update>
+
     <delete id="delete" parameterType="java.lang.String">
         DELETE FROM rule
               WHERE id = #{id, jdbcType=VARCHAR}
diff --git a/shenyu-admin/src/main/resources/mappers/selector-sqlmap.xml 
b/shenyu-admin/src/main/resources/mappers/selector-sqlmap.xml
index d77447a83a..4e0f3d2592 100644
--- a/shenyu-admin/src/main/resources/mappers/selector-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/selector-sqlmap.xml
@@ -403,6 +403,10 @@
         WHERE id = #{id, jdbcType=VARCHAR}
     </update>
 
+    <update id="updateEnable">
+        UPDATE selector SET enabled = #{enabled, jdbcType=TINYINT} WHERE id = 
#{id, jdbcType=VARCHAR}
+    </update>
+
     <delete id="delete" parameterType="java.lang.String">
         DELETE FROM selector
               WHERE id = #{id, jdbcType=VARCHAR}
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/RuleControllerTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/RuleControllerTest.java
index 1381255645..4c6db890d8 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/RuleControllerTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/RuleControllerTest.java
@@ -21,6 +21,7 @@ import org.apache.shenyu.admin.exception.ExceptionHandlers;
 import org.apache.shenyu.admin.mapper.RuleMapper;
 import org.apache.shenyu.admin.mapper.SelectorMapper;
 import org.apache.shenyu.admin.model.custom.UserInfo;
+import org.apache.shenyu.admin.model.dto.BatchCommonDTO;
 import org.apache.shenyu.admin.model.dto.RuleConditionDTO;
 import org.apache.shenyu.admin.model.dto.RuleDTO;
 import org.apache.shenyu.admin.model.page.CommonPager;
@@ -49,6 +50,7 @@ import 
org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -74,10 +76,10 @@ public final class RuleControllerTest {
 
     @Mock
     private RuleService ruleService;
-    
+
     @Mock
     private RuleMapper ruleMapper;
-    
+
     @Mock
     private SelectorMapper selectorMapper;
 
@@ -89,7 +91,7 @@ public final class RuleControllerTest {
 
     private final RuleVO ruleVO = new RuleVO("666", "168", 0, "zero mode", 
"/http/test/**", true, true, 1, 
"{\"loadBalance\":\"random\",\"retry\":0,\"timeout\":3000}", false,
             rcList, DateUtils.localDateTimeToString(LocalDateTime.now()), 
DateUtils.localDateTimeToString(LocalDateTime.now()));
-    
+
     private final CommonPager<RuleVO> commonPager = new CommonPager<>(new 
PageParameter(), Collections.singletonList(ruleVO));
 
     @BeforeEach
@@ -219,4 +221,35 @@ public final class RuleControllerTest {
                 .andReturn();
     }
 
+    @Test
+    public void testEnableRule() throws Exception {
+        RuleDTO ruleDTO = RuleDTO.builder()
+            .id("666")
+            .selectorId("168")
+            .matchMode(0)
+            .name("/http/order/update")
+            .enabled(true)
+            .loged(true)
+            .matchRestful(false)
+            .sort(1)
+            
.handle("{\"loadBalance\":\"random\",\"retry\":0,\"timeout\":3000}")
+            .build();
+        
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
+        
when(SpringBeanUtils.getInstance().getBean(RuleMapper.class)).thenReturn(ruleMapper);
+        when(ruleMapper.existed(ruleDTO.getId())).thenReturn(true);
+        
when(SpringBeanUtils.getInstance().getBean(SelectorMapper.class)).thenReturn(selectorMapper);
+        when(selectorMapper.existed(ruleDTO.getSelectorId())).thenReturn(true);
+        given(this.ruleService.enabled(Arrays.asList(ruleDTO.getId()), 
false)).willReturn(true);
+        BatchCommonDTO batchCommonDTO = new BatchCommonDTO();
+        batchCommonDTO.setIds(Arrays.asList(ruleDTO.getId()));
+        batchCommonDTO.setEnabled(false);
+        this.mockMvc.perform(MockMvcRequestBuilders.post("/rule/batchEnabled")
+                .contentType(MediaType.APPLICATION_JSON)
+                .content(GsonUtils.getInstance().toJson(batchCommonDTO))
+            )
+            .andExpect(status().isOk())
+            .andExpect(jsonPath("$.message", 
is(ShenyuResultMessage.ENABLE_SUCCESS)))
+            .andReturn();
+    }
+
 }
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/SelectorControllerTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/SelectorControllerTest.java
index d9b1b79dd6..99a3468481 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/SelectorControllerTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/SelectorControllerTest.java
@@ -21,6 +21,7 @@ import org.apache.shenyu.admin.exception.ExceptionHandlers;
 import org.apache.shenyu.admin.mapper.PluginMapper;
 import org.apache.shenyu.admin.mapper.SelectorMapper;
 import org.apache.shenyu.admin.model.custom.UserInfo;
+import org.apache.shenyu.admin.model.dto.BatchCommonDTO;
 import org.apache.shenyu.admin.model.dto.SelectorDTO;
 import org.apache.shenyu.admin.model.page.CommonPager;
 import org.apache.shenyu.admin.model.page.PageParameter;
@@ -48,6 +49,7 @@ import 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.Collections;
 
 import static org.hamcrest.core.Is.is;
@@ -72,13 +74,13 @@ public final class SelectorControllerTest {
 
     @Mock
     private SelectorService selectorService;
-    
+
     @Mock
     private SelectorMapper selectorMapper;
-    
+
     @Mock
     private PluginMapper pluginMapper;
-    
+
     private final SelectorVO selectorVO = new SelectorVO("1", "2", 
"selector-1", MatchModeEnum.AND.getCode(),
             MatchModeEnum.AND.getName(), SelectorTypeEnum.FULL_FLOW.getCode(), 
SelectorTypeEnum.FULL_FLOW.getName(),
             1, true, true, true, false, "handle", Collections.emptyList(),
@@ -183,4 +185,34 @@ public final class SelectorControllerTest {
                 .andExpect(jsonPath("$.data.id", is(selectorVO.getId())))
                 .andReturn();
     }
+
+    @Test
+    public void enableSelector() throws Exception {
+        SelectorDTO selectorDTO = SelectorDTO.builder()
+            .id("123")
+            .name("test123")
+            .continued(true)
+            .type(1)
+            .loged(true)
+            .enabled(true)
+            .matchRestful(false)
+            .pluginId("2")
+            .sort(1)
+            .build();
+        
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
+        
when(SpringBeanUtils.getInstance().getBean(SelectorMapper.class)).thenReturn(selectorMapper);
+        when(selectorMapper.existed(selectorDTO.getId())).thenReturn(true);
+        
when(SpringBeanUtils.getInstance().getBean(PluginMapper.class)).thenReturn(pluginMapper);
+        when(pluginMapper.existed(selectorDTO.getPluginId())).thenReturn(true);
+        given(this.selectorService.enabled(Arrays.asList(selectorDTO.getId()), 
false)).willReturn(true);
+        BatchCommonDTO batchCommonDTO = new BatchCommonDTO();
+        batchCommonDTO.setIds(Arrays.asList(selectorDTO.getId()));
+        batchCommonDTO.setEnabled(false);
+        
this.mockMvc.perform(MockMvcRequestBuilders.post("/selector/batchEnabled")
+                .contentType(MediaType.APPLICATION_JSON)
+                .content(GsonUtils.getInstance().toJson(batchCommonDTO)))
+            .andExpect(status().isOk())
+            .andExpect(jsonPath("$.message", 
is(ShenyuResultMessage.ENABLE_SUCCESS)))
+            .andReturn();
+    }
 }

Reply via email to