feat(wcs): wire core module into RuoYi
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package com.ruoyi.wcs;
|
||||
|
||||
import com.tngtech.archunit.core.domain.JavaClasses;
|
||||
import com.tngtech.archunit.core.importer.ClassFileImporter;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
|
||||
|
||||
class AdminWcsBoundaryArchitectureTest {
|
||||
|
||||
@Test
|
||||
void adminAdaptersCannotReachCorePersistenceImplementations() {
|
||||
JavaClasses classes = new ClassFileImporter()
|
||||
.importPackages("com.ruoyi.api", "com.ruoyi.project");
|
||||
|
||||
noClasses().should().dependOnClassesThat()
|
||||
.resideInAPackage("com.ruoyi.wcs.infrastructure.persistence..")
|
||||
.check(classes);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ruoyi.wcs;
|
||||
|
||||
import com.ruoyi.wcs.port.out.DomainEventPublisher;
|
||||
import com.ruoyi.wcs.port.out.WorkflowDefinitionProvider;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class TestPersistenceConfiguration {
|
||||
|
||||
@Bean
|
||||
public WorkflowDefinitionProvider workflowDefinitionProvider() {
|
||||
return Mockito.mock(WorkflowDefinitionProvider.class);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DomainEventPublisher domainEventPublisher() {
|
||||
return Mockito.mock(DomainEventPublisher.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.ruoyi.wcs;
|
||||
|
||||
import com.ruoyi.wcs.application.task.TransportOrderApplicationService;
|
||||
import com.ruoyi.wcs.domain.shared.IdGenerator;
|
||||
import com.ruoyi.wcs.domain.shared.WcsClock;
|
||||
import com.ruoyi.wcs.infrastructure.persistence.task.MyBatisTransportOrderRepository;
|
||||
import com.ruoyi.wcs.port.in.TransportOrderUseCase;
|
||||
import com.ruoyi.wcs.port.out.TransportOrderRepository;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class WcsCoreWiringTest {
|
||||
|
||||
@Test
|
||||
void exposesTheTransportOrderUseCaseFromTheWcsModule() {
|
||||
try (AnnotationConfigApplicationContext context =
|
||||
new AnnotationConfigApplicationContext()) {
|
||||
context.register(WcsCoreConfiguration.class,
|
||||
TestPersistenceConfiguration.class);
|
||||
context.refresh();
|
||||
|
||||
assertTrue(context.getBean(TransportOrderUseCase.class)
|
||||
instanceof TransportOrderApplicationService);
|
||||
assertTrue(context.getBean(TransportOrderRepository.class)
|
||||
instanceof MyBatisTransportOrderRepository);
|
||||
assertTrue(context.containsBeanDefinition("transportOrderMapper"));
|
||||
|
||||
WcsClock clock = context.getBean(WcsClock.class);
|
||||
IdGenerator ids = context.getBean(IdGenerator.class);
|
||||
assertNotNull(clock.now());
|
||||
String firstId = ids.nextId();
|
||||
String secondId = ids.nextId();
|
||||
assertFalse(firstId.trim().isEmpty());
|
||||
assertFalse(firstId.equals(secondId));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void startsWithoutCoreAdaptersAndRejectsNewOrdersWithoutAffectingLegacyStartup() {
|
||||
try (AnnotationConfigApplicationContext context =
|
||||
new AnnotationConfigApplicationContext()) {
|
||||
context.register(WcsCoreConfiguration.class);
|
||||
context.refresh();
|
||||
|
||||
TransportOrderUseCase useCase = context.getBean(TransportOrderUseCase.class);
|
||||
IllegalStateException error = assertThrows(IllegalStateException.class,
|
||||
() -> useCase.cancel("REQ-1"));
|
||||
assertTrue(error.getMessage().contains("not configured"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user