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
+
}
}