diff --git a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java index 80b1a7a..e1738cb 100644 --- a/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java +++ b/backend/src/main/java/com/imeeting/service/biz/impl/PromptTemplateServiceImpl.java @@ -79,7 +79,7 @@ public class PromptTemplateServiceImpl extends ServiceImpl hotWordGroupMap = queryHotWordGroupMap(records.stream().map(PromptTemplate::getHotWordGroupId).toList()); List vos = records.stream() - .map(template -> toVO(template, effectiveStatus(template.getStatus(), userStatusMap.get(template.getId())), hotWordGroupMap)) + .map(template -> toVO(template, effectiveStatus(template.getIsSystem(), template.getStatus(), userStatusMap.get(template.getId())), hotWordGroupMap)) .collect(Collectors.toList()); PageResult> result = new PageResult<>(); @@ -111,6 +111,9 @@ public class PromptTemplateServiceImpl extends ServiceImpl() .eq(PromptTemplateUserConfig::getTenantId, tenantId) @@ -139,6 +142,9 @@ public class PromptTemplateServiceImpl extends ServiceImpl() .eq(PromptTemplateUserConfig::getTenantId, tenantId) @@ -146,7 +152,7 @@ public class PromptTemplateServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.and(w -> w .eq(PromptTemplate::getCreatorId, userId) - .or(sw -> sw.eq(PromptTemplate::getTenantId, 0L).eq(PromptTemplate::getIsSystem, 1)) - .or(sw -> sw.eq(PromptTemplate::getTenantId, tenantId).eq(PromptTemplate::getIsSystem, 1)) + .or(sw -> { + sw.eq(PromptTemplate::getTenantId, 0L).eq(PromptTemplate::getIsSystem, 1); + if (!Boolean.TRUE.equals(isPlatformAdmin)) { + sw.eq(PromptTemplate::getStatus, 1); + } + }) + .or(sw -> { + sw.eq(PromptTemplate::getTenantId, tenantId).eq(PromptTemplate::getIsSystem, 1); + if (!Boolean.TRUE.equals(isPlatformAdmin) && !Boolean.TRUE.equals(isTenantAdmin)) { + sw.eq(PromptTemplate::getStatus, 1); + } + }) ); return wrapper; } @@ -222,7 +238,10 @@ public class PromptTemplateServiceImpl extends ServiceImpl page = new Page<>(1, 10); + page.setRecords(List.of()); + page.setTotal(0); + + doReturn(page).when(service).page(any(Page.class), any(LambdaQueryWrapper.class)); + when(userConfigMapper.selectList(any())).thenReturn(List.of()); + + assertEquals(0, service.pageTemplates(1, 10, null, null, 9L, 7L, false, false).getRecords().size()); + } + + @Test + void updateUserTemplateStatusShouldRejectDisabledSystemTemplate() { + PromptTemplateUserConfigMapper userConfigMapper = mock(PromptTemplateUserConfigMapper.class); + HotWordGroupMapper hotWordGroupMapper = mock(HotWordGroupMapper.class); + HotWordService hotWordService = mock(HotWordService.class); + PromptTemplateServiceImpl service = spy(new PromptTemplateServiceImpl(userConfigMapper, hotWordGroupMapper, hotWordService)); + + PromptTemplate template = new PromptTemplate(); + template.setId(51L); + template.setTenantId(0L); + template.setCreatorId(1L); + template.setIsSystem(1); + template.setStatus(0); + + doReturn(template).when(service).getOne(any(LambdaQueryWrapper.class)); + + boolean result = service.updateUserTemplateStatus(51L, 1, 9L, 7L, true, false); + + assertFalse(result); + verify(userConfigMapper, never()).selectOne(any()); + verify(userConfigMapper, never()).insert(any(PromptTemplateUserConfig.class)); + } + + @Test + void isTemplateEnabledForUserShouldRespectSystemStatusFirst() { + PromptTemplateUserConfigMapper userConfigMapper = mock(PromptTemplateUserConfigMapper.class); + HotWordGroupMapper hotWordGroupMapper = mock(HotWordGroupMapper.class); + HotWordService hotWordService = mock(HotWordService.class); + PromptTemplateServiceImpl service = spy(new PromptTemplateServiceImpl(userConfigMapper, hotWordGroupMapper, hotWordService)); + + PromptTemplate template = new PromptTemplate(); + template.setId(61L); + template.setTenantId(9L); + template.setCreatorId(1L); + template.setIsSystem(1); + template.setStatus(0); + + doReturn(template).when(service).getOne(any(LambdaQueryWrapper.class)); + + boolean result = service.isTemplateEnabledForUser(61L, 9L, 7L, false, true); + + assertFalse(result); + verify(userConfigMapper, never()).selectOne(any()); + } }