use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_computation_rule_is_applied_to_container.
@Test
void assert_that_computation_rule_is_applied_to_container() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(defaultContainerDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getArtifacts().stream().map(Artifact::getContainer).filter(Optional::isPresent).map(Optional::get).distinct().forEach(c4ModelBuilder::container);
application.getBuildingBlocksOfType(buildingBlockType1).forEach(c4ModelBuilder::artifact);
c4ModelBuilder.containerRule().predicate(a -> true).computation((container, lookup) -> Set.of(lookup.softwareSystem().addContainer("CustomName1", null, "CustomTechnology1"), lookup.softwareSystem().addContainer("CustomName2", null, "CustomTechnology2")));
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(2).extracting(Container::getName, Container::getTechnology).containsExactlyInAnyOrder(tuple("CustomName1", "CustomTechnology1"), tuple("CustomName2", "CustomTechnology2"));
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_an_IllegalStateException_is_thrown_if_a_building_block_does_not_have_a_container.
@Test
void assert_that_an_IllegalStateException_is_thrown_if_a_building_block_does_not_have_a_container() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getBuildingBlocksOfType(buildingBlockType1).forEach(c4ModelBuilder::artifact);
assertThatIllegalStateException().isThrownBy(() -> c4ModelBuilder.build()).withMessage("No container present for <BuildingBlockType1> org.archifacts.integration.c4.model.domain.Class1ForBuildingBlockType1");
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_containers_are_added_automatically.
@Test
void assert_that_containers_are_added_automatically() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getBuildingBlocksOfType(buildingBlockType1).forEach(c4ModelBuilder::artifact);
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
final Set<Component> components = containers.iterator().next().getComponents();
assertThat(components).hasSize(1).extracting(Component::getName, Component::getTechnology).containsExactly(tuple("Class1ForBuildingBlockType1", "BuildingBlockType1"));
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_relationships_are_added_to_the_c4_model.
@Test
void assert_that_relationships_are_added_to_the_c4_model() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).descriptor(referenceDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getArtifacts().stream().forEach(c4ModelBuilder::artifact);
application.getRelationships().stream().forEach(c4ModelBuilder::relationship);
final C4Model c4Model = c4ModelBuilder.build();
final Set<Container> containers = c4Model.softwareSystem().getContainers();
assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
final Container container = containers.iterator().next();
final Component class1ForBuildingBlockType1 = container.getComponentWithName("Class1ForBuildingBlockType1");
assertThat(class1ForBuildingBlockType1).isNotNull();
final Component miscArtifact1 = container.getComponentWithName("MiscArtifact1");
assertThat(miscArtifact1).isNotNull();
assertThat(container.getComponents()).flatMap(Component::getRelationships).hasSize(1).extracting(Relationship::getDescription, Relationship::getSource, Relationship::getDestination).containsExactly(tuple("references", class1ForBuildingBlockType1, miscArtifact1));
}
use of com.tngtech.archunit.core.importer.ClassFileImporter in project archifacts by archifacts.
the class C4ModelBuilderTest method assert_that_an_IllegalStateException_is_thrown_if_an_Archifact_is_not_mapped_to_the_expected_type.
@Test
void assert_that_an_IllegalStateException_is_thrown_if_an_Archifact_is_not_mapped_to_the_expected_type() {
final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).buildApplication(javaClasses);
final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
application.getBuildingBlocksOfType(buildingBlockType1).forEach(c4ModelBuilder::artifact);
final C4Model c4Model = c4ModelBuilder.build();
final Artifact miscArtifact1 = application.getArtifacts().stream().filter(artifact -> artifact.getName().equals("MiscArtifact1")).findFirst().get();
final Artifact class1ForBuildingBlockType1 = application.getArtifacts().stream().filter(artifact -> artifact.getName().equals("Class1ForBuildingBlockType1")).findFirst().get();
assertThatIllegalStateException().isThrownBy(() -> c4Model.component(miscArtifact1)).withMessage("<MiscArtifact> org.archifacts.integration.c4.model.domain.MiscArtifact1 is not mapped to a C4 model item of type com.structurizr.model.Component");
assertThatIllegalStateException().isThrownBy(() -> c4Model.relationship(miscArtifact1)).withMessage("<MiscArtifact> org.archifacts.integration.c4.model.domain.MiscArtifact1 is not mapped to a C4 model item of type com.structurizr.model.Relationship");
assertThatIllegalStateException().isThrownBy(() -> c4Model.container(miscArtifact1)).withMessage("<MiscArtifact> org.archifacts.integration.c4.model.domain.MiscArtifact1 is not mapped to a C4 model item of type com.structurizr.model.Container");
assertThatNoException().isThrownBy(() -> c4Model.component(class1ForBuildingBlockType1));
assertThatIllegalStateException().isThrownBy(() -> c4Model.relationship(class1ForBuildingBlockType1)).withMessage("<BuildingBlockType1> org.archifacts.integration.c4.model.domain.Class1ForBuildingBlockType1 is not mapped to a C4 model item of type com.structurizr.model.Relationship");
assertThatIllegalStateException().isThrownBy(() -> c4Model.container(class1ForBuildingBlockType1)).withMessage("<BuildingBlockType1> org.archifacts.integration.c4.model.domain.Class1ForBuildingBlockType1 is not mapped to a C4 model item of type com.structurizr.model.Container");
}
Aggregations