expandAdminFunction

Change-Id: If3b875b3017d1922b15150dd735ca2ce5a3a77f0
diff --git a/src/test/java/com/example/g8backend/service/AdminServiceImplTest.java b/src/test/java/com/example/g8backend/service/AdminServiceImplTest.java
index f8e6229..a8983ba 100644
--- a/src/test/java/com/example/g8backend/service/AdminServiceImplTest.java
+++ b/src/test/java/com/example/g8backend/service/AdminServiceImplTest.java
@@ -1,5 +1,6 @@
 package com.example.g8backend.service;
 
+import com.example.g8backend.entity.Post;
 import com.example.g8backend.entity.User;
 import com.example.g8backend.mapper.UserMapper;
 import com.example.g8backend.service.impl.AdminServiceImpl;
@@ -8,6 +9,10 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import com.example.g8backend.mapper.PostMapper;
+
+import java.time.LocalDateTime;
+
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
@@ -17,6 +22,8 @@
     private UserMapper userMapper;
     @InjectMocks
     private AdminServiceImpl adminService;
+    @Mock
+    private PostMapper postMapper;
 
     @Test
     public void testGrantVip_Success() {
@@ -35,4 +42,106 @@
         boolean result = adminService.grantVip(1L);
         assertFalse(result);
     }
+
+    void testBanUser_Success() {
+        User user = new User().setUserId(1L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+        when(userMapper.updateById(any(User.class))).thenReturn(1);
+
+        boolean result = adminService.banUser(1L, "违规操作", 1001L);
+        assertTrue(result);
+
+        assertTrue(user.getIsBanned());
+        assertEquals("违规操作", user.getBannedReason());
+        assertNotNull(user.getBannedAt());
+        assertEquals(1001L, user.getBannedBy());
+        verify(userMapper).updateById(any(User.class));
+    }
+
+    @Test
+    void testBanUser_UserNotFound() {
+        when(userMapper.selectById(1L)).thenReturn(null);
+        boolean result = adminService.banUser(1L, "原因", 1001L);
+        assertFalse(result);
+        verify(userMapper, never()).updateById(any(User.class));
+    }
+
+    @Test
+    void testUnbanUser_Success() {
+        User user = new User().setUserId(1L)
+                .setIsBanned(true)
+                .setBannedReason("原因")
+                .setBannedAt(LocalDateTime.now())
+                .setBannedBy(1001L);
+        when(userMapper.selectById(1L)).thenReturn(user);
+        when(userMapper.updateById(any(User.class))).thenReturn(1);
+
+        boolean result = adminService.unbanUser(1L, 1001L);
+        assertTrue(result);
+
+        assertFalse(user.getIsBanned());
+        assertNull(user.getBannedReason());
+        assertNull(user.getBannedAt());
+        assertNull(user.getBannedBy());
+        verify(userMapper).updateById(any(User.class));
+    }
+
+    @Test
+    void testUnbanUser_UserNotFound() {
+        when(userMapper.selectById(1L)).thenReturn(null);
+        boolean result = adminService.unbanUser(1L, 1001L);
+        assertFalse(result);
+        verify(userMapper, never()).updateById(any(User.class));
+    }
+
+    @Test
+    void testLockPost_Success() {
+        Post post = new Post().setPostId(1L);
+        when(postMapper.selectById(1L)).thenReturn(post);
+        when(postMapper.updateById(any(Post.class))).thenReturn(1);
+
+        boolean result = adminService.lockPost(1L, "违规内容", 1001L);
+        assertTrue(result);
+
+        assertTrue(post.getIsLocked());
+        assertEquals("违规内容", post.getLockedReason());
+        assertNotNull(post.getLockedAt());
+        assertEquals(1001L, post.getLockedBy());
+        verify(postMapper).updateById(any(Post.class));
+    }
+
+    @Test
+    void testLockPost_PostNotFound() {
+        when(postMapper.selectById(1L)).thenReturn(null);
+        boolean result = adminService.lockPost(1L, "原因", 1001L);
+        assertFalse(result);
+        verify(postMapper, never()).updateById(any(Post.class));
+    }
+
+    @Test
+    void testUnlockPost_Success() {
+        Post post = new Post().setPostId(1L)
+                .setIsLocked(true)
+                .setLockedReason("原因")
+                .setLockedAt(LocalDateTime.now())
+                .setLockedBy(1001L);
+        when(postMapper.selectById(1L)).thenReturn(post);
+        when(postMapper.updateById(any(Post.class))).thenReturn(1);
+
+        boolean result = adminService.unlockPost(1L, 1001L);
+        assertTrue(result);
+
+        assertFalse(post.getIsLocked());
+        assertNull(post.getLockedReason());
+        assertNull(post.getLockedAt());
+        assertNull(post.getLockedBy());
+        verify(postMapper).updateById(any(Post.class));
+    }
+    @Test
+    void testUnlockPost_PostNotFound() {
+        when(postMapper.selectById(1L)).thenReturn(null);
+        boolean result = adminService.unlockPost(1L, 1001L);
+        assertFalse(result);
+        verify(postMapper, never()).updateById(any(Post.class));
+    }
 }
\ No newline at end of file