Files
baiyue-firstleg/firstleg/src/test/java/com/baiyue/firstleg/controller/CustomerDimensionConfigControllerContractTest.java
T
2026-09-10 12:18:33 +08:00

69 lines
3.5 KiB
Java

package com.baiyue.firstleg.controller;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.firstleg.dto.CustomerDimensionConfigDtos.InitializeRequest;
import com.baiyue.firstleg.dto.CustomerDimensionConfigDtos.InitializeResponse;
import com.baiyue.firstleg.service.CustomerDimensionConfigService;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@SpringJUnitConfig(InternalCustomerDimensionConfigController.class)
class CustomerDimensionConfigControllerContractTest {
@Resource
private InternalCustomerDimensionConfigController internalController;
@MockBean
private CustomerDimensionConfigService service;
@BeforeEach
void initializeToken() {
ReflectionTestUtils.setField(internalController, "internalToken", "test-token");
internalController.initializeToken();
}
@Test
void internalInitializationRequiresTokenAndReturnsCreationIdentity() {
InitializeRequest request = new InitializeRequest(8L, 100L, "registration-1", "柏悦物流");
when(service.initializeDefault(8L, 100L, "registration-1", "柏悦物流"))
.thenReturn(new InitializeResponse(91L, 191L, true));
assertThatThrownBy(() -> internalController.initializeDefault("wrong", request))
.isInstanceOf(BizException.class);
assertThat(internalController.initializeDefault("test-token", request).data())
.isEqualTo(new InitializeResponse(91L, 191L, true));
verify(service).initializeDefault(8L, 100L, "registration-1", "柏悦物流");
}
@Test
void platformControllerKeepsScopeAndExistingPermissions() throws Exception {
RequestMapping mapping = PlatformCustomerDimensionConfigController.class
.getAnnotation(RequestMapping.class);
assertThat(mapping.value()).containsExactly("/api/platform/v1/first-leg/customer-dimension-config");
assertThat(PlatformCustomerDimensionConfigController.class
.getDeclaredMethod("get", com.baiyue.common.security.AuthenticatedUser.class, long.class)
.getAnnotation(PreAuthorize.class).value())
.isEqualTo("hasAuthority('firstleg:dimension-config:view')");
assertThat(PlatformCustomerDimensionConfigController.class
.getDeclaredMethod("update", com.baiyue.common.security.AuthenticatedUser.class,
long.class, com.baiyue.firstleg.dto.CustomerDimensionConfigDtos.UpdateRequest.class)
.getAnnotation(PreAuthorize.class).value())
.isEqualTo("hasAuthority('firstleg:dimension-config:edit')");
assertThat(PlatformCustomerDimensionConfigController.class
.getDeclaredMethod("updateDefaultCalculationMode",
com.baiyue.common.security.AuthenticatedUser.class, long.class,
com.baiyue.firstleg.dto.CustomerDimensionConfigDtos.DefaultCalculationModeUpdateRequest.class)
.getAnnotation(PreAuthorize.class).value())
.isEqualTo("hasAuthority('firstleg:dimension-config:edit')");
}
}