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

Aias00 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 574bc1e1eb fix(admin): publish namespace plugin creation (#7078)
574bc1e1eb is described below

commit 574bc1e1ebe4b6be24c7e20a93c76a967529cc30
Author: Liming Deng <[email protected]>
AuthorDate: Wed Sep 30 10:00:46 2026 +0800

    fix(admin): publish namespace plugin creation (#7078)
    
    * fix(admin): publish namespace plugin creation
    
    * fix(admin): publish namespace plugin after insert
---
 .../service/impl/NamespacePluginServiceImpl.java   |  8 +++-
 .../admin/service/NamespacePluginServiceTest.java  | 43 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
index 4f275f399b..c0c65d7c91 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/NamespacePluginServiceImpl.java
@@ -98,8 +98,12 @@ public class NamespacePluginServiceImpl implements 
NamespacePluginService {
         }
         PluginDO pluginDO = pluginMapper.selectById(pluginId);
         NamespacePluginRelDO namespacePluginRelDO = 
NamespacePluginRelDO.buildNamespacePluginRelDO(pluginDO, namespaceId);
-        namespacePluginRelMapper.insertSelective(namespacePluginRelDO);
-        return 
namespacePluginRelMapper.selectByPluginIdAndNamespaceId(pluginId, namespaceId);
+        if (namespacePluginRelMapper.insertSelective(namespacePluginRelDO) <= 
0) {
+            return null;
+        }
+        NamespacePluginVO namespacePluginVO = 
namespacePluginRelMapper.selectByPluginIdAndNamespaceId(pluginId, namespaceId);
+        namespacePluginEventPublisher.onCreated(namespacePluginVO);
+        return namespacePluginVO;
     }
     
     @Override
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/NamespacePluginServiceTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/NamespacePluginServiceTest.java
index e8bed44d35..4fcdc9a9f9 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/NamespacePluginServiceTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/NamespacePluginServiceTest.java
@@ -19,12 +19,15 @@ package org.apache.shenyu.admin.service;
 
 import org.apache.shenyu.admin.mapper.NamespacePluginRelMapper;
 import org.apache.shenyu.admin.mapper.PluginHandleMapper;
+import org.apache.shenyu.admin.mapper.PluginMapper;
 import org.apache.shenyu.admin.mapper.SelectorMapper;
+import org.apache.shenyu.admin.model.entity.PluginDO;
 import org.apache.shenyu.admin.model.entity.PluginHandleDO;
 import org.apache.shenyu.admin.model.entity.SelectorDO;
 import org.apache.shenyu.admin.model.vo.NamespacePluginVO;
 import org.apache.shenyu.admin.model.vo.PluginSnapshotVO;
 import org.apache.shenyu.admin.service.impl.NamespacePluginServiceImpl;
+import org.apache.shenyu.admin.service.publish.NamespacePluginEventPublisher;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -54,6 +57,46 @@ public final class NamespacePluginServiceTest {
     @Mock
     private PluginHandleMapper pluginHandleMapper;
 
+    @Mock
+    private PluginMapper pluginMapper;
+
+    @Mock
+    private NamespacePluginEventPublisher namespacePluginEventPublisher;
+
+    @Test
+    public void testCreatePublishesCreatedEvent() {
+        String namespaceId = "namespaceId";
+        String pluginId = "pluginId";
+        PluginDO pluginDO = Mockito.mock(PluginDO.class);
+        NamespacePluginVO created = Mockito.mock(NamespacePluginVO.class);
+        Mockito.when(pluginDO.getId()).thenReturn(pluginId);
+        Mockito.when(pluginMapper.selectById(pluginId)).thenReturn(pluginDO);
+        
Mockito.when(namespacePluginRelMapper.insertSelective(Mockito.any())).thenReturn(1);
+        
Mockito.when(namespacePluginRelMapper.selectByPluginIdAndNamespaceId(pluginId, 
namespaceId))
+                .thenReturn(null, created);
+
+        NamespacePluginVO result = namespacePluginService.create(namespaceId, 
pluginId);
+
+        Assertions.assertSame(created, result);
+        Mockito.verify(namespacePluginEventPublisher).onCreated(created);
+    }
+
+    @Test
+    public void testCreateDoesNotPublishWhenInsertFails() {
+        String namespaceId = "namespaceId";
+        String pluginId = "pluginId";
+        PluginDO pluginDO = Mockito.mock(PluginDO.class);
+        Mockito.when(pluginDO.getId()).thenReturn(pluginId);
+        Mockito.when(pluginMapper.selectById(pluginId)).thenReturn(pluginDO);
+        
Mockito.when(namespacePluginRelMapper.insertSelective(Mockito.any())).thenReturn(0);
+
+        NamespacePluginVO result = namespacePluginService.create(namespaceId, 
pluginId);
+
+        Assertions.assertNull(result);
+        Mockito.verify(namespacePluginEventPublisher, 
Mockito.never()).onCreated(Mockito.any(NamespacePluginVO.class));
+        
Mockito.verify(namespacePluginRelMapper).selectByPluginIdAndNamespaceId(pluginId,
 namespaceId);
+    }
+
     @Test
     public void testActivePluginSnapshot() {
         String namespaceId = "testNamespaceId";

Reply via email to