Skip to content

Commit b8e3ae4

Browse files
authored
fix: [REGAPIC] Fix snake_case nested resource names in generated unit tests (#990)
1 parent f7ceab9 commit b8e3ae4

File tree

10 files changed

+343
-18
lines changed

10 files changed

+343
-18
lines changed

src/main/java/com/google/api/generator/gapic/composer/defaultvalue/DefaultValueComposer.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,10 @@ public static Expr createValue(
145145
String nestedFieldName = field.name();
146146
Map<String, String> nestedValuePatterns = new HashMap<>();
147147
for (Map.Entry<String, String> entry : valuePatterns.entrySet()) {
148-
if (entry.getKey().startsWith(nestedFieldName + '.')) {
148+
String lowerCamelNestedFieldName = JavaStyle.toLowerCamelCase(nestedFieldName);
149+
if (entry.getKey().startsWith(lowerCamelNestedFieldName + '.')) {
149150
nestedValuePatterns.put(
150-
entry.getKey().substring(nestedFieldName.length() + 1), entry.getValue());
151+
entry.getKey().substring(lowerCamelNestedFieldName.length() + 1), entry.getValue());
151152
}
152153
}
153154

src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoClient.golden

+55-4
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ public class EchoClient implements BackgroundResource {
360360
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
361361
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
362362
* .setSeverity(Severity.forNumber(0))
363-
* .setFoobar(Foobar.newBuilder().build())
363+
* .setFooBar(Foobar.newBuilder().build())
364364
* .build();
365365
* EchoResponse response = echoClient.echo(request);
366366
* }
@@ -386,7 +386,7 @@ public class EchoClient implements BackgroundResource {
386386
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
387387
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
388388
* .setSeverity(Severity.forNumber(0))
389-
* .setFoobar(Foobar.newBuilder().build())
389+
* .setFooBar(Foobar.newBuilder().build())
390390
* .build();
391391
* ApiFuture<EchoResponse> future = echoClient.echoCallable().futureCall(request);
392392
* // Do something.
@@ -772,7 +772,7 @@ public class EchoClient implements BackgroundResource {
772772
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
773773
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
774774
* .setSeverity(Severity.forNumber(0))
775-
* .setFoobar(Foobar.newBuilder().build())
775+
* .setFooBar(Foobar.newBuilder().build())
776776
* .build();
777777
* Object response = echoClient.collideName(request);
778778
* }
@@ -798,7 +798,7 @@ public class EchoClient implements BackgroundResource {
798798
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
799799
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
800800
* .setSeverity(Severity.forNumber(0))
801-
* .setFoobar(Foobar.newBuilder().build())
801+
* .setFooBar(Foobar.newBuilder().build())
802802
* .build();
803803
* ApiFuture<Object> future = echoClient.collideNameCallable().futureCall(request);
804804
* // Do something.
@@ -810,6 +810,57 @@ public class EchoClient implements BackgroundResource {
810810
return stub.collideNameCallable();
811811
}
812812

813+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
814+
/**
815+
* Sample code:
816+
*
817+
* <pre>{@code
818+
* // This snippet has been automatically generated for illustrative purposes only.
819+
* // It may require modifications to work in your environment.
820+
* try (EchoClient echoClient = EchoClient.create()) {
821+
* EchoRequest request =
822+
* EchoRequest.newBuilder()
823+
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
824+
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
825+
* .setSeverity(Severity.forNumber(0))
826+
* .setFooBar(Foobar.newBuilder().build())
827+
* .build();
828+
* Object response = echoClient.nestedBinding(request);
829+
* }
830+
* }</pre>
831+
*
832+
* @param request The request object containing all of the parameters for the API call.
833+
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
834+
*/
835+
public final Object nestedBinding(EchoRequest request) {
836+
return nestedBindingCallable().call(request);
837+
}
838+
839+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
840+
/**
841+
* Sample code:
842+
*
843+
* <pre>{@code
844+
* // This snippet has been automatically generated for illustrative purposes only.
845+
* // It may require modifications to work in your environment.
846+
* try (EchoClient echoClient = EchoClient.create()) {
847+
* EchoRequest request =
848+
* EchoRequest.newBuilder()
849+
* .setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
850+
* .setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
851+
* .setSeverity(Severity.forNumber(0))
852+
* .setFooBar(Foobar.newBuilder().build())
853+
* .build();
854+
* ApiFuture<Object> future = echoClient.nestedBindingCallable().futureCall(request);
855+
* // Do something.
856+
* Object response = future.get();
857+
* }
858+
* }</pre>
859+
*/
860+
public final UnaryCallable<EchoRequest, Object> nestedBindingCallable() {
861+
return stub.nestedBindingCallable();
862+
}
863+
813864
@Override
814865
public final void close() {
815866
stub.close();

src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoClientHttpJsonTest.golden

+64-3
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public class EchoClientHttpJsonTest {
106106
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
107107
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
108108
.setSeverity(Severity.forNumber(0))
109-
.setFoobar(Foobar.newBuilder().build())
109+
.setFooBar(Foobar.newBuilder().build())
110110
.build();
111111
client.echo(request);
112112
Assert.fail("No exception raised");
@@ -702,7 +702,7 @@ public class EchoClientHttpJsonTest {
702702
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
703703
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
704704
.setSeverity(Severity.forNumber(0))
705-
.setFoobar(Foobar.newBuilder().build())
705+
.setFooBar(Foobar.newBuilder().build())
706706
.build();
707707

708708
Object actualResponse = client.collideName(request);
@@ -736,12 +736,73 @@ public class EchoClientHttpJsonTest {
736736
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
737737
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
738738
.setSeverity(Severity.forNumber(0))
739-
.setFoobar(Foobar.newBuilder().build())
739+
.setFooBar(Foobar.newBuilder().build())
740740
.build();
741741
client.collideName(request);
742742
Assert.fail("No exception raised");
743743
} catch (InvalidArgumentException e) {
744744
// Expected exception.
745745
}
746746
}
747+
748+
@Test
749+
public void nestedBindingTest() throws Exception {
750+
Object expectedResponse = Object.newBuilder().setContent("content951530617").build();
751+
mockService.addResponse(expectedResponse);
752+
753+
EchoRequest request =
754+
EchoRequest.newBuilder()
755+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
756+
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
757+
.setSeverity(Severity.forNumber(0))
758+
.setFooBar(
759+
Foobar.newBuilder()
760+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
761+
.setInfo("info3237038")
762+
.build())
763+
.build();
764+
765+
Object actualResponse = client.nestedBinding(request);
766+
Assert.assertEquals(expectedResponse, actualResponse);
767+
768+
List<String> actualRequests = mockService.getRequestPaths();
769+
Assert.assertEquals(1, actualRequests.size());
770+
771+
String apiClientHeaderKey =
772+
mockService
773+
.getRequestHeaders()
774+
.get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey())
775+
.iterator()
776+
.next();
777+
Assert.assertTrue(
778+
GaxHttpJsonProperties.getDefaultApiClientHeaderPattern()
779+
.matcher(apiClientHeaderKey)
780+
.matches());
781+
}
782+
783+
@Test
784+
public void nestedBindingExceptionTest() throws Exception {
785+
ApiException exception =
786+
ApiExceptionFactory.createException(
787+
new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false);
788+
mockService.addException(exception);
789+
790+
try {
791+
EchoRequest request =
792+
EchoRequest.newBuilder()
793+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
794+
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
795+
.setSeverity(Severity.forNumber(0))
796+
.setFooBar(
797+
Foobar.newBuilder()
798+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
799+
.setInfo("info3237038")
800+
.build())
801+
.build();
802+
client.nestedBinding(request);
803+
Assert.fail("No exception raised");
804+
} catch (InvalidArgumentException e) {
805+
// Expected exception.
806+
}
807+
}
747808
}

src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoClientTest.golden

+56-4
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public class EchoClientTest {
107107
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
108108
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
109109
.setSeverity(Severity.forNumber(0))
110-
.setFoobar(Foobar.newBuilder().build())
110+
.setFooBar(Foobar.newBuilder().build())
111111
.build();
112112
client.echo(request);
113113
Assert.fail("No exception raised");
@@ -679,7 +679,7 @@ public class EchoClientTest {
679679
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
680680
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
681681
.setSeverity(Severity.forNumber(0))
682-
.setFoobar(Foobar.newBuilder().build())
682+
.setFooBar(Foobar.newBuilder().build())
683683
.build();
684684

685685
Object actualResponse = client.collideName(request);
@@ -694,7 +694,7 @@ public class EchoClientTest {
694694
Assert.assertEquals(request.getContent(), actualRequest.getContent());
695695
Assert.assertEquals(request.getError(), actualRequest.getError());
696696
Assert.assertEquals(request.getSeverity(), actualRequest.getSeverity());
697-
Assert.assertEquals(request.getFoobar(), actualRequest.getFoobar());
697+
Assert.assertEquals(request.getFooBar(), actualRequest.getFooBar());
698698
Assert.assertTrue(
699699
channelProvider.isHeaderSent(
700700
ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
@@ -712,12 +712,64 @@ public class EchoClientTest {
712712
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
713713
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
714714
.setSeverity(Severity.forNumber(0))
715-
.setFoobar(Foobar.newBuilder().build())
715+
.setFooBar(Foobar.newBuilder().build())
716716
.build();
717717
client.collideName(request);
718718
Assert.fail("No exception raised");
719719
} catch (InvalidArgumentException e) {
720720
// Expected exception.
721721
}
722722
}
723+
724+
@Test
725+
public void nestedBindingTest() throws Exception {
726+
Object expectedResponse = Object.newBuilder().setContent("content951530617").build();
727+
mockEcho.addResponse(expectedResponse);
728+
729+
EchoRequest request =
730+
EchoRequest.newBuilder()
731+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
732+
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
733+
.setSeverity(Severity.forNumber(0))
734+
.setFooBar(Foobar.newBuilder().build())
735+
.build();
736+
737+
Object actualResponse = client.nestedBinding(request);
738+
Assert.assertEquals(expectedResponse, actualResponse);
739+
740+
List<AbstractMessage> actualRequests = mockEcho.getRequests();
741+
Assert.assertEquals(1, actualRequests.size());
742+
EchoRequest actualRequest = ((EchoRequest) actualRequests.get(0));
743+
744+
Assert.assertEquals(request.getName(), actualRequest.getName());
745+
Assert.assertEquals(request.getParent(), actualRequest.getParent());
746+
Assert.assertEquals(request.getContent(), actualRequest.getContent());
747+
Assert.assertEquals(request.getError(), actualRequest.getError());
748+
Assert.assertEquals(request.getSeverity(), actualRequest.getSeverity());
749+
Assert.assertEquals(request.getFooBar(), actualRequest.getFooBar());
750+
Assert.assertTrue(
751+
channelProvider.isHeaderSent(
752+
ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
753+
GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
754+
}
755+
756+
@Test
757+
public void nestedBindingExceptionTest() throws Exception {
758+
StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);
759+
mockEcho.addException(exception);
760+
761+
try {
762+
EchoRequest request =
763+
EchoRequest.newBuilder()
764+
.setName(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
765+
.setParent(FoobarName.ofProjectFoobarName("[PROJECT]", "[FOOBAR]").toString())
766+
.setSeverity(Severity.forNumber(0))
767+
.setFooBar(Foobar.newBuilder().build())
768+
.build();
769+
client.nestedBinding(request);
770+
Assert.fail("No exception raised");
771+
} catch (InvalidArgumentException e) {
772+
// Expected exception.
773+
}
774+
}
723775
}

src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoSettings.golden

+10
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public class EchoSettings extends ClientSettings<EchoSettings> {
103103
return ((EchoStubSettings) getStubSettings()).collideNameSettings();
104104
}
105105

106+
/** Returns the object with the settings used for calls to nestedBinding. */
107+
public UnaryCallSettings<EchoRequest, Object> nestedBindingSettings() {
108+
return ((EchoStubSettings) getStubSettings()).nestedBindingSettings();
109+
}
110+
106111
public static final EchoSettings create(EchoStubSettings stub) throws IOException {
107112
return new EchoSettings.Builder(stub.toBuilder()).build();
108113
}
@@ -262,6 +267,11 @@ public class EchoSettings extends ClientSettings<EchoSettings> {
262267
return getStubSettingsBuilder().collideNameSettings();
263268
}
264269

270+
/** Returns the builder for the settings used for calls to nestedBinding. */
271+
public UnaryCallSettings.Builder<EchoRequest, Object> nestedBindingSettings() {
272+
return getStubSettingsBuilder().nestedBindingSettings();
273+
}
274+
265275
@Override
266276
public EchoSettings build() throws IOException {
267277
return new EchoSettings(this);

src/test/java/com/google/api/generator/gapic/composer/grpcrest/goldens/EchoStubSettings.golden

+10
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ public class EchoSettings extends ClientSettings<EchoSettings> {
103103
return ((EchoStubSettings) getStubSettings()).collideNameSettings();
104104
}
105105

106+
/** Returns the object with the settings used for calls to nestedBinding. */
107+
public UnaryCallSettings<EchoRequest, Object> nestedBindingSettings() {
108+
return ((EchoStubSettings) getStubSettings()).nestedBindingSettings();
109+
}
110+
106111
public static final EchoSettings create(EchoStubSettings stub) throws IOException {
107112
return new EchoSettings.Builder(stub.toBuilder()).build();
108113
}
@@ -262,6 +267,11 @@ public class EchoSettings extends ClientSettings<EchoSettings> {
262267
return getStubSettingsBuilder().collideNameSettings();
263268
}
264269

270+
/** Returns the builder for the settings used for calls to nestedBinding. */
271+
public UnaryCallSettings.Builder<EchoRequest, Object> nestedBindingSettings() {
272+
return getStubSettingsBuilder().nestedBindingSettings();
273+
}
274+
265275
@Override
266276
public EchoSettings build() throws IOException {
267277
return new EchoSettings(this);

0 commit comments

Comments
 (0)