Skip to content

Commit

Permalink
Makes the Spring PetClinic example easier to run.
Browse files Browse the repository at this point in the history
  • Loading branch information
simonbrowndotje committed Aug 21, 2024
1 parent 0f2b05f commit 69262cc
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 13 deletions.
30 changes: 20 additions & 10 deletions structurizr-dsl/src/test/java/com/structurizr/dsl/DslTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.structurizr.Workspace;
import com.structurizr.documentation.Section;
import com.structurizr.model.*;
import com.structurizr.util.StringUtils;
import com.structurizr.view.*;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
Expand Down Expand Up @@ -1145,11 +1146,11 @@ void test_Var_CannotOverrideConst() {

@Test
void springPetClinic() throws Exception {
File path = new File("/Users/simon/sandbox/spring-petclinic");
if (path.exists()) {
String springPetClinicHome = System.getenv().getOrDefault("SPRING_PETCLINIC_HOME", "");
System.out.println(springPetClinicHome);
if (!StringUtils.isNullOrEmpty(springPetClinicHome)) {
System.out.println("Running Spring PetClinic example...");
StructurizrDslParser parser = new StructurizrDslParser();
parser.addConstant("SPRING_PETCLINIC_DIR", path.getAbsolutePath());
parser.parse(new File("src/test/resources/dsl/spring-petclinic.dsl"));

Container webApplication = (Container)parser.getIdentifiersRegister().getElement("springPetClinic.webApplication");
Expand All @@ -1158,37 +1159,44 @@ void springPetClinic() throws Exception {
Component welcomeController = webApplication.getComponentWithName("Welcome Controller");
assertNotNull(welcomeController);
assertEquals("org.springframework.samples.petclinic.system.WelcomeController", welcomeController.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java").getAbsolutePath(), welcomeController.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java").getAbsolutePath(), welcomeController.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java", welcomeController.getUrl());

Component ownerController = webApplication.getComponentWithName("Owner Controller");
assertNotNull(ownerController);
assertEquals("org.springframework.samples.petclinic.owner.OwnerController", ownerController.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java").getAbsolutePath(), ownerController.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java").getAbsolutePath(), ownerController.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java", ownerController.getUrl());

Component petController = webApplication.getComponentWithName("Pet Controller");
assertNotNull(petController);
assertEquals("org.springframework.samples.petclinic.owner.PetController", petController.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/PetController.java").getAbsolutePath(), petController.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/PetController.java").getAbsolutePath(), petController.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/PetController.java", petController.getUrl());

Component vetController = webApplication.getComponentWithName("Vet Controller");
assertNotNull(vetController);
assertEquals("org.springframework.samples.petclinic.vet.VetController", vetController.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/vet/VetController.java").getAbsolutePath(), vetController.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/vet/VetController.java").getAbsolutePath(), vetController.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/vet/VetController.java", vetController.getUrl());

Component visitController = webApplication.getComponentWithName("Visit Controller");
assertNotNull(visitController);
assertEquals("org.springframework.samples.petclinic.owner.VisitController", visitController.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/VisitController.java").getAbsolutePath(), visitController.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/VisitController.java").getAbsolutePath(), visitController.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java", visitController.getUrl());

Component ownerRepository = webApplication.getComponentWithName("Owner Repository");
assertNotNull(ownerRepository);
assertEquals("org.springframework.samples.petclinic.owner.OwnerRepository", ownerRepository.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java").getAbsolutePath(), ownerRepository.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java").getAbsolutePath(), ownerRepository.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java", ownerRepository.getUrl());

Component vetRepository = webApplication.getComponentWithName("Vet Repository");
assertNotNull(vetRepository);
assertEquals("org.springframework.samples.petclinic.vet.VetRepository", vetRepository.getProperties().get("component.type"));
assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java").getAbsolutePath(), vetRepository.getProperties().get("component.src"));
assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java").getAbsolutePath(), vetRepository.getProperties().get("component.src"));
assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java", vetRepository.getUrl());

assertTrue(welcomeController.getRelationships().isEmpty());

Expand All @@ -1197,6 +1205,8 @@ void springPetClinic() throws Exception {
assertNotNull(ownerController.getEfferentRelationshipWith(ownerRepository));

assertNotNull(vetController.getEfferentRelationshipWith(vetRepository));
} else {
System.out.println("Skipping Spring PetClinic example...");
}
}

Expand Down
10 changes: 7 additions & 3 deletions structurizr-dsl/src/test/resources/dsl/spring-petclinic.dsl
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
workspace "Spring PetClinic" "A C4 model of the Spring PetClinic sample app (https://github.com/spring-projects/spring-petclinic/)" {

// this example requires an environment variable as follows:
// - Name: SPRING_PETCLINIC_HOME
// - Value: the full path to the location of the spring-petclinic example (e.g. /Users/simon/spring-petclinic)

!identifiers hierarchical

model {
Expand All @@ -16,8 +20,8 @@
technology "Java and Spring"

!components {
classes "${SPRING_PETCLINIC_DIR}/target/spring-petclinic-3.3.0-SNAPSHOT.jar"
source "${SPRING_PETCLINIC_DIR}/src/main/java"
classes "${SPRING_PETCLINIC_HOME}/target/spring-petclinic-3.3.0-SNAPSHOT.jar"
source "${SPRING_PETCLINIC_HOME}/src/main/java"
strategy {
matcher annotation "org.springframework.stereotype.Controller" "Spring MVC Controller"
filter excludeRegex ".*.CrashController"
Expand All @@ -28,7 +32,7 @@
}

!script groovy {
element.components.each { it.url = it.properties["component.src"].replace(context.dslParser.getConstant("SPRING_PETCLINIC_DIR") + "/src/main/java", "https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java") }
element.components.each { it.url = it.properties["component.src"].replace(System.getenv("SPRING_PETCLINIC_HOME") + "/src/main/java", "https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java") }
}

!elements "element.parent==webApplication && element.technology==Spring MVC Controller" {
Expand Down

0 comments on commit 69262cc

Please sign in to comment.