package com.dalab.adminservice.service.impl; import com.dalab.adminservice.dto.RoleDTO; import com.dalab.adminservice.mapper.RoleMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.admin.client.resource.RolesResource; import org.keycloak.representations.idm.RoleRepresentation; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.ArgumentMatchers.anyList; @ExtendWith(MockitoExtension.class) class RoleServiceImplTest { @Mock private Keycloak keycloakAdminClient; @Mock private RoleMapper roleMapper; @InjectMocks private RoleServiceImpl roleService; @Mock private RealmResource realmResource; @Mock private RolesResource rolesResource; private String testRealmName = "test-realm"; private RoleRepresentation roleRepresentation; private RoleDTO roleDTO; @BeforeEach void setUp() { ReflectionTestUtils.setField(roleService, "realmName", testRealmName); roleRepresentation = new RoleRepresentation(); roleRepresentation.setId("role-id"); roleRepresentation.setName("TEST_ROLE"); roleRepresentation.setDescription("A test role"); roleDTO = RoleDTO.builder() .id("role-id") .name("TEST_ROLE") .description("A test role") .build(); when(keycloakAdminClient.realm(testRealmName)).thenReturn(realmResource); when(realmResource.roles()).thenReturn(rolesResource); } @Test void getAllRealmRoles_shouldReturnRoleDtoList() { when(rolesResource.list()).thenReturn(Collections.singletonList(roleRepresentation)); when(roleMapper.toDtoList(anyList())).thenReturn(Collections.singletonList(roleDTO)); List result = roleService.getAllRealmRoles(); assertNotNull(result); assertEquals(1, result.size()); assertEquals(roleDTO.getName(), result.get(0).getName()); verify(rolesResource).list(); verify(roleMapper).toDtoList(Collections.singletonList(roleRepresentation)); } }