暂存提交

This commit is contained in:
2026-07-31 14:57:09 +08:00
parent 7a19e2f096
commit f8804fbc52
53 changed files with 3771 additions and 0 deletions
@@ -0,0 +1,55 @@
package com.baiyue.firstleg.controller;
import com.baiyue.common.security.AuthenticatedUser;
import com.baiyue.firstleg.dto.AssignRequest;
import com.baiyue.firstleg.dto.FulfillmentTaskQuery;
import org.junit.jupiter.api.Test;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.core.io.ClassPathResource;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
class FulfillmentTaskControllerContractTest {
@Test
void 查询和分配接口声明对应权限码() throws Exception {
assertAuthority("page", "hasAuthority('platform:firstleg:task:list')",
AuthenticatedUser.class, long.class, FulfillmentTaskQuery.class);
assertAuthority("detail", "hasAuthority('platform:firstleg:task:view')",
AuthenticatedUser.class, long.class, long.class);
assertAuthority("byOrder", "hasAuthority('platform:firstleg:task:view')",
AuthenticatedUser.class, long.class, long.class);
assertAuthority("assignmentHistory", "hasAuthority('platform:firstleg:assignment:history')",
AuthenticatedUser.class, long.class, long.class, long.class, long.class);
assertAuthority("assign", "hasAuthority('platform:firstleg:assignment:assign')",
AuthenticatedUser.class, long.class, long.class, AssignRequest.class);
}
@Test
void 分页查询缺省值为第一页每页二十条() {
FulfillmentTaskQuery query = new FulfillmentTaskQuery(null, null, null, 0, 0);
assertThat(query.page()).isEqualTo(1);
assertThat(query.size()).isEqualTo(20);
}
@Test
void OpenAPI覆盖四类只读接口和对应权限() throws Exception {
String openapi = new ClassPathResource("openapi/firstleg-v1.yaml")
.getContentAsString(StandardCharsets.UTF_8);
assertThat(openapi)
.contains("/api/platform/v1/first-leg/tasks:")
.contains("/api/platform/v1/first-leg/tasks/{taskId}:")
.contains("/api/platform/v1/first-leg/tasks/by-order/{orderId}:")
.contains("/api/platform/v1/first-leg/tasks/{taskId}/assignment-history:")
.contains("platform:firstleg:task:list")
.contains("platform:firstleg:assignment:history");
}
private void assertAuthority(String methodName, String permission, Class<?>... parameterTypes)
throws NoSuchMethodException {
Method method = PlatformFulfillmentAssignmentController.class.getDeclaredMethod(methodName, parameterTypes);
assertThat(method.getAnnotation(PreAuthorize.class).value()).isEqualTo(permission);
}
}
@@ -0,0 +1,65 @@
package com.baiyue.firstleg.service;
import com.baiyue.common.core.api.PageResult;
import com.baiyue.common.core.api.ResultCode;
import com.baiyue.common.core.exception.BizException;
import com.baiyue.firstleg.dto.FulfillmentTaskQuery;
import com.baiyue.firstleg.entity.FulfillmentTaskEntity;
import com.baiyue.firstleg.repository.FulfillmentTaskRepository;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
class FulfillmentTaskServiceTest {
@Test
void 列表查询保留租户和分页条件() {
FulfillmentTaskRepository repository = mock(FulfillmentTaskRepository.class);
FulfillmentTaskQuery query = new FulfillmentTaskQuery(null, null, null, 1, 20);
PageResult<FulfillmentTaskEntity> expected = new PageResult<>(List.of(), 1, 20, 0, 0);
when(repository.page(10001L, query)).thenReturn(expected);
assertThat(service(repository).page(10001L, query)).isSameAs(expected);
verify(repository).page(10001L, query);
}
@Test
void 详情和按订单查询不存在时返回404() {
FulfillmentTaskRepository repository = mock(FulfillmentTaskRepository.class);
FulfillmentTaskService service = service(repository);
assertThatThrownBy(() -> service.detail(10001L, 1L))
.isInstanceOf(BizException.class)
.extracting(exception -> ((BizException) exception).getResultCode())
.isEqualTo(ResultCode.NOT_FOUND);
assertThatThrownBy(() -> service.byOrder(10001L, 2L))
.isInstanceOf(BizException.class)
.extracting(exception -> ((BizException) exception).getResultCode())
.isEqualTo(ResultCode.NOT_FOUND);
}
@Test
void 查询分配历史前先校验任务归属租户() {
FulfillmentTaskRepository repository = mock(FulfillmentTaskRepository.class);
FulfillmentTaskEntity task = new FulfillmentTaskEntity();
when(repository.findOwned(10001L, 1L)).thenReturn(task);
PageResult<com.baiyue.firstleg.entity.AssignmentHistoryEntity> expected =
new PageResult<>(List.of(), 1, 20, 0, 0);
when(repository.pageHistory(10001L, 1L, 1, 20)).thenReturn(expected);
assertThat(service(repository).assignmentHistory(10001L, 1L, 1, 20)).isSameAs(expected);
verify(repository).findOwned(10001L, 1L);
}
private FulfillmentTaskService service(FulfillmentTaskRepository repository) {
FulfillmentTaskService service = new FulfillmentTaskService();
ReflectionTestUtils.setField(service, "repository", repository);
return service;
}
}