@@ -46,6 +46,9 @@ class QueryGatewayExtensionsTest {
46
46
47
47
@BeforeTest
48
48
fun before () {
49
+ every { subjectGateway.query(exampleQuery, matchInstanceResponseType<String >()) } returns instanceReturnValue
50
+ every { subjectGateway.query(exampleQuery, matchOptionalResponseType<String >()) } returns optionalReturnValue
51
+ every { subjectGateway.query(exampleQuery, matchMultipleInstancesResponseType<String >()) } returns listReturnValue
49
52
every { subjectGateway.query(queryName, exampleQuery, matchInstanceResponseType<String >()) } returns instanceReturnValue
50
53
every { subjectGateway.query(queryName, exampleQuery, matchOptionalResponseType<String >()) } returns optionalReturnValue
51
54
every { subjectGateway.query(queryName, exampleQuery, matchMultipleInstancesResponseType<String >()) } returns listReturnValue
@@ -56,6 +59,71 @@ class QueryGatewayExtensionsTest {
56
59
clearMocks(subjectGateway)
57
60
}
58
61
62
+ @Test
63
+ fun `Query without queryName for Single should invoke query method with correct generic parameters` () {
64
+ val queryResult = subjectGateway.queryForSingle<String , ExampleQuery >(query = exampleQuery)
65
+ assertSame(queryResult, instanceReturnValue)
66
+ verify(exactly = 1 ) {
67
+ subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java))
68
+ }
69
+ }
70
+
71
+ @Test
72
+ fun `Query without queryName for Single should invoke query method and not require explicit generic types` () {
73
+ val queryResult: CompletableFuture <String > = subjectGateway.queryForSingle(query = exampleQuery)
74
+ assertSame(queryResult, instanceReturnValue)
75
+ verify(exactly = 1 ) {
76
+ subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java))
77
+ }
78
+ }
79
+
80
+ @Test
81
+ fun `Query without queryName for Optional should invoke query method with correct generic parameters` () {
82
+ val queryResult = subjectGateway.queryForOptional<String , ExampleQuery >(query = exampleQuery)
83
+
84
+ assertSame(queryResult, optionalReturnValue)
85
+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
86
+ }
87
+
88
+ @Test
89
+ fun `Query without queryName for Optional should invoke query method and not require explicit generic types` () {
90
+ val queryResult: CompletableFuture <Optional <String >> = subjectGateway.queryForOptional(query = exampleQuery)
91
+
92
+ assertSame(queryResult, optionalReturnValue)
93
+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
94
+ }
95
+
96
+ @Test
97
+ fun `Query without queryName for Multiple should invoke query method with correct generic parameters` () {
98
+ val queryResult = subjectGateway.queryForMultiple<String , ExampleQuery >(query = exampleQuery)
99
+
100
+ assertSame(queryResult, listReturnValue)
101
+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
102
+ }
103
+
104
+ @Test
105
+ fun `Query without queryName for Multiple should invoke query method and not require explicit generic types` () {
106
+ val queryResult: CompletableFuture <List <String >> = subjectGateway.queryForMultiple(query = exampleQuery)
107
+
108
+ assertSame(queryResult, listReturnValue)
109
+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
110
+ }
111
+
112
+ @Test
113
+ fun `Query without queryName for Single should handle nullable responses` () {
114
+ val nullInstanceReturnValue: CompletableFuture <String ?> = CompletableFuture .completedFuture(null )
115
+ val nullableQueryGateway = mockk<QueryGateway > {
116
+ every { query(exampleQuery, match { i: AbstractResponseType <String ?> -> i is InstanceResponseType }) } returns nullInstanceReturnValue
117
+ }
118
+
119
+ val queryResult = nullableQueryGateway.queryForSingle<String ?, ExampleQuery >(query = exampleQuery)
120
+
121
+ assertSame(queryResult, nullInstanceReturnValue)
122
+ assertTrue(nullInstanceReturnValue.get() == null )
123
+ verify(exactly = 1 ) { nullableQueryGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
124
+ }
125
+
126
+
59
127
@Test
60
128
fun `Query for Single should invoke query method with correct generic parameters` () {
61
129
val queryResult = subjectGateway.queryForSingle<String , ExampleQuery >(queryName = queryName, query = exampleQuery)
0 commit comments