@@ -46,6 +46,9 @@ class QueryGatewayExtensionsTest {
4646
4747 @BeforeTest
4848 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
4952 every { subjectGateway.query(queryName, exampleQuery, matchInstanceResponseType<String >()) } returns instanceReturnValue
5053 every { subjectGateway.query(queryName, exampleQuery, matchOptionalResponseType<String >()) } returns optionalReturnValue
5154 every { subjectGateway.query(queryName, exampleQuery, matchMultipleInstancesResponseType<String >()) } returns listReturnValue
@@ -56,6 +59,70 @@ class QueryGatewayExtensionsTest {
5659 clearMocks(subjectGateway)
5760 }
5861
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+ @Test
80+ fun `Query without queryName for Optional should invoke query method with correct generic parameters` () {
81+ val queryResult = subjectGateway.queryForOptional<String , ExampleQuery >(query = exampleQuery)
82+
83+ assertSame(queryResult, optionalReturnValue)
84+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
85+ }
86+
87+ @Test
88+ fun `Query without queryName for Optional should invoke query method and not require explicit generic types` () {
89+ val queryResult: CompletableFuture <Optional <String >> = subjectGateway.queryForOptional(query = exampleQuery)
90+
91+ assertSame(queryResult, optionalReturnValue)
92+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
93+ }
94+
95+ @Test
96+ fun `Query without queryName for Multiple should invoke query method with correct generic parameters` () {
97+ val queryResult = subjectGateway.queryForMultiple<String , ExampleQuery >(query = exampleQuery)
98+
99+ assertSame(queryResult, listReturnValue)
100+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
101+ }
102+
103+ @Test
104+ fun `Query without queryName for Multiple should invoke query method and not require explicit generic types` () {
105+ val queryResult: CompletableFuture <List <String >> = subjectGateway.queryForMultiple(query = exampleQuery)
106+
107+ assertSame(queryResult, listReturnValue)
108+ verify(exactly = 1 ) { subjectGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
109+ }
110+
111+ @Test
112+ fun `Query without queryName for Single should handle nullable responses` () {
113+ val nullInstanceReturnValue: CompletableFuture <String ?> = CompletableFuture .completedFuture(null )
114+ val nullableQueryGateway = mockk<QueryGateway > {
115+ every { query(exampleQuery, match { i: AbstractResponseType <String ?> -> i is InstanceResponseType }) } returns nullInstanceReturnValue
116+ }
117+
118+ val queryResult = nullableQueryGateway.queryForSingle<String ?, ExampleQuery >(query = exampleQuery)
119+
120+ assertSame(queryResult, nullInstanceReturnValue)
121+ assertTrue(nullInstanceReturnValue.get() == null )
122+ verify(exactly = 1 ) { nullableQueryGateway.query(exampleQuery, matchExpectedResponseType(String ::class .java)) }
123+ }
124+
125+
59126 @Test
60127 fun `Query for Single should invoke query method with correct generic parameters` () {
61128 val queryResult = subjectGateway.queryForSingle<String , ExampleQuery >(queryName = queryName, query = exampleQuery)
0 commit comments