Skip to content

Commit 21a1bb7

Browse files
committed
Update testFromUntypedWithExplicitTypePassesTypeToInterceptor to make sure type is forwarded
1 parent cbf33f6 commit 21a1bb7

2 files changed

Lines changed: 15 additions & 8 deletions

File tree

temporal-sdk/src/test/java/io/temporal/client/ActivityClientOptionsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,4 @@ public void testNewBuilderFromOptionsCopiesAllFields() {
6262
assertSame(original.getDataConverter(), copy.getDataConverter());
6363
assertEquals(original.getInterceptors(), copy.getInterceptors());
6464
}
65-
6665
}

temporal-sdk/src/test/java/io/temporal/internal/client/ActivityHandleImplTest.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
import static org.junit.Assert.*;
44
import static org.mockito.Mockito.*;
55

6+
import com.google.common.reflect.TypeToken;
67
import io.temporal.client.ActivityExecutionDescription;
78
import io.temporal.client.ActivityFailedException;
89
import io.temporal.client.ActivityHandle;
910
import io.temporal.client.UntypedActivityHandle;
1011
import io.temporal.common.interceptors.ActivityClientCallsInterceptor;
1112
import io.temporal.common.interceptors.ActivityClientCallsInterceptor.*;
13+
import java.lang.reflect.Type;
14+
import java.util.Collections;
15+
import java.util.List;
1216
import java.util.concurrent.CompletableFuture;
1317
import java.util.concurrent.TimeUnit;
1418
import org.junit.Before;
@@ -49,7 +53,7 @@ public void testGetResultAsync() throws Exception {
4953
}
5054

5155
@Test
52-
public void testDescribeNoOptions() {
56+
public void testDescribeNoToken() {
5357
ActivityExecutionDescription desc = mock(ActivityExecutionDescription.class);
5458
DescribeActivityOutput output = new DescribeActivityOutput(desc);
5559
when(interceptor.describeActivity(any(DescribeActivityInput.class))).thenReturn(output);
@@ -121,14 +125,18 @@ public void testFromUntypedWrapsHandle() throws ActivityFailedException {
121125
@SuppressWarnings("unchecked")
122126
public void testFromUntypedWithExplicitTypePassesTypeToInterceptor()
123127
throws ActivityFailedException {
124-
GetActivityResultOutput<String> output = mock(GetActivityResultOutput.class);
125-
when(output.getResult()).thenReturn("generic-result");
128+
// explicitType is a parameterized List<String> — distinct from List.class — so the verify
129+
// below can only pass if the implementation forwards the Type arg, not the Class arg.
130+
Type explicitType = new TypeToken<List<String>>() {}.getType();
131+
GetActivityResultOutput<List<String>> output = mock(GetActivityResultOutput.class);
132+
when(output.getResult()).thenReturn(Collections.singletonList("item"));
126133
when(interceptor.getActivityResult(any(GetActivityResultInput.class))).thenReturn(output);
127134

128-
java.lang.reflect.Type explicitType = String.class;
129135
UntypedActivityHandle untyped = new ActivityHandleImpl("id", "run", interceptor);
130-
ActivityHandle<String> typed = ActivityHandle.fromUntyped(untyped, String.class, explicitType);
131-
assertEquals("generic-result", typed.getResult());
136+
ActivityHandle<List<String>> typed =
137+
ActivityHandle.fromUntyped(
138+
untyped, (Class<List<String>>) (Class<?>) List.class, explicitType);
139+
typed.getResult();
132140
verify(interceptor).getActivityResult(argThat(i -> explicitType.equals(i.getResultType())));
133141
}
134142

@@ -199,7 +207,7 @@ public void testGetResultAsyncTimeoutSuccessPopulatesCache() throws Exception {
199207

200208
@Test
201209
@SuppressWarnings("unchecked")
202-
public void testGetResultAsyncWrapsActivityFailedExceptionInRuntimeException() throws Exception {
210+
public void testGetResultAsyncPropagatesActivityFailedExceptionAsCause() throws Exception {
203211
ActivityFailedException failure =
204212
new ActivityFailedException(
205213
"activity failed", "id", "run", new RuntimeException("root cause"));

0 commit comments

Comments
 (0)