暂存提交
This commit is contained in:
+55
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user