You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/12/06 12:03:39 UTC

[isis] 01/05: ISIS-2216: adds some smoke tests to confirm interaction between @Order, @Primary and @Qualifier

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 57fbbe7934903e42aabd53a98701dd138ec94b63
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Dec 6 10:37:54 2019 +0000

    ISIS-2216: adds some smoke tests to confirm interaction between @Order, @Primary and @Qualifier
---
 .../SpringServiceInjectOrderTest.java              | 89 ++++++++++++++++------
 1 file changed, 67 insertions(+), 22 deletions(-)

diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceInjectOrderTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceInjectOrderTest.java
index cdb1855..f9945e8 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceInjectOrderTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceInjectOrderTest.java
@@ -22,9 +22,11 @@ import java.io.IOException;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
@@ -90,26 +92,32 @@ class SpringServiceInjectOrderTest {
     
     @Service
     @Order(1)
+    @Qualifier("tallest")
+    @Named("withExcellentName")
     static class Excellent implements Rating {
-     
+
         @Override
         public int getRating() {
             return 1;
         }
     }
-     
+
     @Service
     @Order(2) @Primary
+    @Qualifier("tall")
+    @Named("withGoodName")
     static class Good implements Rating {
-     
+
         @Override
         public int getRating() {
             return 2;
         }
     }
-     
+
     @Service
     @Order(Ordered.LOWEST_PRECEDENCE)
+    @Qualifier("middle")
+    @Named("withAverageName")
     static class Average implements Rating {
      
         @Override
@@ -123,13 +131,27 @@ class SpringServiceInjectOrderTest {
         @Inject @Getter MessageService messageService;
         @Inject @Getter List<Rating> ratings;
         @Inject @Getter Rating primaryRating;
+        @Inject @Getter Rating someArbitraryRating;
+        @Inject @Getter @Qualifier("tallest") Rating qualifiedRating1;
+        @Inject @Getter @Qualifier("tall") Rating qualifiedRating2;
+        @Inject @Getter @Qualifier("middle") Rating qualifiedRating3;
+        @Inject @Getter Rating tallest;
+        @Inject @Getter Rating mostExcellentName;
+
+        // this doesn't bootstrap, because matching is done using the service's @Qualifier, not the service's @Name
+        // @Inject @Getter @Qualifier("mostExcellentName") Rating namedRating1;
     }
     
     @DomainObject
     static class DummyObject {
         @Inject @Getter MessageService messageService;
         @Inject @Getter List<Rating> ratings;
-        @Inject @Getter Rating primaryRating;
+        @Inject @Getter Rating someArbitraryRating;
+        @Inject @Getter @Qualifier("tallest") Rating qualifiedRating1;
+        @Inject @Getter @Qualifier("tall") Rating qualifiedRating2;
+        @Inject @Getter @Qualifier("middle") Rating qualifiedRating3;
+        @Inject @Getter Rating tallest;
+        @Inject @Getter Rating mostExcellentName;
     }
     
     
@@ -150,18 +172,29 @@ class SpringServiceInjectOrderTest {
     @Test
     void injectionOnServices_shouldFollowOrder() throws IOException {
 
+        val messageService = dummyService.getMessageService();
+        assertNotNull(messageService);
+        assertTrue(messageService instanceof MessageServiceDefault);
+
+        // injected as per @Order
         val ratings = dummyService.getRatings();
-        val primaryRating = dummyService.getPrimaryRating();
-        
         assertThat(ratings.get(0).getRating(), is(equalTo(1)));
         assertThat(ratings.get(1).getRating(), is(equalTo(2)));
         assertThat(ratings.get(2).getRating(), is(equalTo(3)));
-        
-        assertThat(primaryRating.getRating(), is(equalTo(2)));
-        
-        val messageService = dummyService.getMessageService();
-        assertNotNull(messageService);
-        assertTrue(messageService instanceof MessageServiceDefault);
+
+        // uses the @Primary
+        assertThat(dummyService.getSomeArbitraryRating().getRating(), is(equalTo(2)));
+
+        // does match @Qualifier to @Qualifier
+        assertThat(dummyService.getQualifiedRating1().getRating(), is(equalTo(1)));
+        assertThat(dummyService.getQualifiedRating2().getRating(), is(equalTo(2)));
+        assertThat(dummyService.getQualifiedRating3().getRating(), is(equalTo(3)));
+
+        // does NOT match field name to @Qualifier
+        assertThat(dummyService.getTallest().getRating(), is(equalTo(2))); // rather than '1'... so defaulted to @Primary
+
+        // does NOT match field name to @Qualifier
+        assertThat(dummyService.getMostExcellentName().getRating(), is(equalTo(2)));  // rather than '1'... so defaulted to @Primary
     }
     
     @Test
@@ -169,19 +202,31 @@ class SpringServiceInjectOrderTest {
 
         val dummyObject = new DummyObject();
         serviceInjector.injectServicesInto(dummyObject);
-        
+
+        val messageService = dummyObject.getMessageService();
+        assertNotNull(messageService);
+        assertTrue(messageService instanceof MessageServiceDefault);
+
+        // injected as per @Order
         val ratings = dummyObject.getRatings();
-        val primaryRating = dummyObject.getPrimaryRating();
-        
         assertThat(ratings.get(0).getRating(), is(equalTo(1)));
         assertThat(ratings.get(1).getRating(), is(equalTo(2)));
         assertThat(ratings.get(2).getRating(), is(equalTo(3)));
-        
-        assertThat(primaryRating.getRating(), is(equalTo(2)));
-        
-        val messageService = dummyObject.getMessageService();
-        assertNotNull(messageService);
-        assertTrue(messageService instanceof MessageServiceDefault);
+
+        // uses the @Primary
+        assertThat(dummyObject.getSomeArbitraryRating().getRating(), is(equalTo(2)));
+
+        // does match @Qualifier to @Qualifier
+        assertThat(dummyObject.getQualifiedRating1().getRating(), is(equalTo(1)));
+        assertThat(dummyObject.getQualifiedRating2().getRating(), is(equalTo(2)));
+        assertThat(dummyObject.getQualifiedRating3().getRating(), is(equalTo(3)));
+
+        // does NOT match field name to @Qualifier
+        assertThat(dummyObject.getTallest().getRating(), is(equalTo(2))); // rather than '1'... so defaulted to @Primary
+
+        // does NOT match field name to @Qualifier
+        assertThat(dummyObject.getMostExcellentName().getRating(), is(equalTo(2)));  // rather than '1'... so defaulted to @Primary
+
     }
 
 }