I need to do a server-to-server graphQL call. Thanks to the advice received on this SO post, and also documented here, I'm approaching it like this:
async function () {
const {data, errors} = await graphql(
schema,
CRON_JOB_TO_FIND_USERS_WHO_HAVE_GONE_OFFLINE_MUTATION,
{},
{caller: 'synced-cron'},
{timeStarted: new Date().toISOString().slice(0, 19).replace('T', ' ')}
)
console.log('data', data)
console.log('errors', errors)
return true;
}
It's not throwing any errors, but it's returning null data:
Also, a debugger
breakpoint in the resolver isn't being hit.
SCHEMA
cronJobToFindUsersWhoHaveGoneOffline(timeStarted: String): epUserData
QUERY
// note -- no gql``. This string is passed directly to graphql() function
// where it gets gql applied to it.
const CRON_JOB_TO_FIND_USERS_WHO_HAVE_GONE_OFFLINE_MUTATION = `
mutation ($timeStarted: String){
cronJobToFindUsersWhoHaveGoneOffline(timeStarted: $timeStarted){
id,
user_presence,
user_presence_time_of_last_update
},
}
`;
RESOLVER
cronJobToFindUsersWhoHaveGoneOffline(parent, args, context){
debugger; <== NEVER GETS ACTIVATED
return Promise.resolve()
.then(() => {
debugger;
//CODE TO FIND USERS AND MARK THEM AS BEING OFFLINE GOES HERE
return usersWhoWentOffline;
})
.then((usersWhoWentOffline) => {
debugger;
return usersWhoWentOffline;
})
.catch((err) => {
debugger;
console.log(err);
});
},
What am I missing?
It should work. Here is a completed working example:
server.ts
:
import { ApolloServer } from 'apollo-server';
import { schema } from './schema';
const server = new ApolloServer({ schema });
export { server };
schema.ts
:
import { gql, makeExecutableSchema } from 'apollo-server';
const typeDefs = gql`
type EpUserData {
id: ID!
user_presence: String
user_presence_time_of_last_update: String
}
type Query {
dummy: String
}
type Mutation {
cronJobToFindUsersWhoHaveGoneOffline(timeStarted: String): EpUserData
}
`;
const resolvers = {
Mutation: {
async cronJobToFindUsersWhoHaveGoneOffline(parent, args, context) {
const usersWhoWentOffline = { id: 1, user_presence: 'test', user_presence_time_of_last_update: '2020' };
return Promise.resolve()
.then(() => {
return usersWhoWentOffline;
})
.catch((err) => {
console.log(err);
});
},
},
};
const schema = makeExecutableSchema({ typeDefs, resolvers });
export { schema };
server.test.ts
:
import { graphql } from 'graphql';
import { schema } from './schema';
import { server } from './server';
const CRON_JOB_TO_FIND_USERS_WHO_HAVE_GONE_OFFLINE_MUTATION = `
mutation ($timeStarted: String){
cronJobToFindUsersWhoHaveGoneOffline(timeStarted: $timeStarted){
id,
user_presence,
user_presence_time_of_last_update
},
}
`;
describe('62122142', () => {
beforeAll(async () => {
const { url } = await server.listen();
console.log(`server is listening on ${url}`);
});
afterAll(async () => {
await server.stop();
});
it('should pass', async () => {
const { data, errors } = await graphql(
schema,
CRON_JOB_TO_FIND_USERS_WHO_HAVE_GONE_OFFLINE_MUTATION,
{},
{ caller: 'synced-cron' },
{
timeStarted: new Date()
.toISOString()
.slice(0, 19)
.replace('T', ' '),
},
);
console.log('data', data);
console.log('errors', errors);
return true;
});
});
integration test result:
PASS apollo-graphql-tutorial src/stackoverflow/62122142/server.test.ts (7.143s)
62122142
✓ should pass (12ms)
console.log src/stackoverflow/62122142/server.test.ts:18
server is listening on http://localhost:4000/
console.log src/stackoverflow/62122142/server.test.ts:36
data [Object: null prototype] {
cronJobToFindUsersWhoHaveGoneOffline:
[Object: null prototype] {
id: '1',
user_presence: 'test',
user_presence_time_of_last_update: '2020' } }
console.log src/stackoverflow/62122142/server.test.ts:37
errors undefined
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 7.226s
source code: https://github.com/mrdulin/apollo-graphql-tutorial/tree/master/src/stackoverflow/62122142