@@ -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,71 @@ 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+
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+
59127 @Test
60128 fun `Query for Single should invoke query method with correct generic parameters` () {
61129 val queryResult = subjectGateway.queryForSingle<String , ExampleQuery >(queryName = queryName, query = exampleQuery)
0 commit comments