Skip to content

Instantly share code, notes, and snippets.

@ramapalani
ramapalani / ArgumentsAcrossSubgraphs.MD
Last active October 11, 2022 04:06
How to pass Arguments of a two level higher type across Subgraphs

How to pass argument of a two level higher type across subgraphs?

Subgraph1 (Show) Schema

extend schema
  @link(url: "https://specs.apollo.dev/federation/v2.0",
        import: ["@key", "@shareable"])

type Show @key(fields: "id"){
private static final ConcurrentMap<AppDescriptor, TestContainer> cache = new ConcurrentHashMap<AppDescriptor, TestContainer>();
private final TestContainerFactory tcf;
public OnePerAppDescriptorTestContainerFactory(TestContainerFactory tcf) {
this.tcf = tcf;
}
@Override
public Class<? extends AppDescriptor> supports() {
private static final ConcurrentMap<AppDescriptor, TestContainer> cache = new ConcurrentHashMap<AppDescriptor, TestContainer>();
private final TestContainerFactory tcf;
public OnePerAppDescriptorTestContainerFactory(TestContainerFactory tcf) {
this.tcf = tcf;
}
@Override
public Class<? extends AppDescriptor> supports() {
@Test
public void testGetAllByClientResponseMockService() {
WebResource resource = resource();
ClientResponse response = resource.path("users").get(
ClientResponse.class);
Assert.assertEquals(response.getStatus(),
Response.Status.OK.getStatusCode());
Users users = response.getEntity(Users.class);
Assert.assertTrue(users.getUsers().size() > 0);
}
@Test
public void testGetAllByClientResponseMockService() {
WebResource resource = resource();
ClientResponse response = resource.path("users").get(
ClientResponse.class);
Assert.assertEquals(response.getStatus(),
Response.Status.OK.getStatusCode());
Users users = response.getEntity(Users.class);
Assert.assertTrue(users.getUsers().size() > 0);
}
<bean id="userResource" class="ramp.sample.springjersey.resource.UsersResourceImpl">
<property name="userService" ref="mockUserService"></property>
</bean>
<bean id="mockUserService" class="ramp.sample.springjersey.resource.UsersServiceMock"/>
private static final AppDescriptor APP_DESCRIPTOR = new WebAppDescriptor.Builder()
.servletClass(SpringServlet.class)
.contextListenerClass(ContextLoaderListener.class)
//Use actual applicationContext.xml which will call actual service implementation
// .contextParam("contextConfigLocation",
// "classpath:applicationContext.xml")
//Use test application context.xml which will use actual resource but mock service
.contextParam("contextConfigLocation",
"classpath:testApplicationContext.xml")
.requestListenerClass(RequestContextListener.class).build();