Skip to content

Commit

Permalink
chore: update way to get query resolvers and schema
Browse files Browse the repository at this point in the history
  • Loading branch information
mlaguardia committed Jun 7, 2022
1 parent f62591d commit 3dccbe7
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 44 deletions.
33 changes: 23 additions & 10 deletions src/schema/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
import { gql } from 'apollo-server-express';
import { DocumentNode } from "graphql";

const typeDefs = gql`
scalar Date
import * as glob from "glob";
import * as path from "path";
import { gql } from "apollo-server-express";

const queries = [];

let queryFiles = glob
.sync(path.resolve(__dirname, "./resolvers/Query/*.ts"))
.map((p) => path.basename(p));

type Query {
me: User
}
queryFiles.forEach((queryFile) => {
const Query = require(`./resolvers/Query/${queryFile}`).default; // eslint-disable-line global-require,import/no-dynamic-require
queries.push(Query);
});

type User {
example: String!
}
const rootQuery = gql`
scalar Date
`;

export default [typeDefs];
export const queryTypeDefs: Array<DocumentNode> = [rootQuery];

queries.forEach((q) => {
queryTypeDefs.push(q.typeDef);
});

export default queryTypeDefs;
5 changes: 0 additions & 5 deletions src/schema/resolvers/Query/index.ts

This file was deleted.

20 changes: 16 additions & 4 deletions src/schema/resolvers/Query/me.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
import errors from '../../../errors';
export default {
name: "me",
typeDef: `
type Query {
me: User
}
export default async (_, args, { dataSources }) => {

return dataSources.User.me();
type User {
example: String!
}
`,
query: `
me: User
`,
resolver: async (_, args, { dataSources }) => {
return dataSources.User.me();
},
};
6 changes: 6 additions & 0 deletions src/schema/resolvers/QueryResolvers/User/example.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
name: "example",
resolver: async (user, args, { dataSources }) => {
return user.example + "_WithResolver";
},
};
4 changes: 0 additions & 4 deletions src/schema/resolvers/User/example.ts

This file was deleted.

5 changes: 0 additions & 5 deletions src/schema/resolvers/User/index.ts

This file was deleted.

41 changes: 33 additions & 8 deletions src/schema/resolvers/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,39 @@
import { GraphQLScalarType, Kind } from 'graphql';
import { GraphQLScalarType, Kind } from "graphql";

// Importing ROOT resolvers
import Query from './Query';
import User from './User';
import * as glob from "glob";
import * as path from "path";

const queries = [];

let queryFiles = glob
.sync(path.resolve(__dirname, "./Query/*.ts"))
.map((p) => path.basename(p));

queryFiles.forEach((queryFile) => {
const Query = require(`./Query/${queryFile}`).default; // eslint-disable-line global-require,import/no-dynamic-require
queries.push(Query);
});

let queryResolverFiles = glob
.sync(path.resolve(__dirname, "./QueryResolvers/*.ts"))
.map((p) => path.basename(p));

queryResolverFiles.forEach((queryResolverFile) => {
const QueryResolver = require(`./QueryResolvers/${queryResolverFile}`)
.default; // eslint-disable-line global-require,import/no-dynamic-require
queries.push(QueryResolver);
});

export const allQueryResolvers = { Query: {} };

queries.forEach((q) => {
allQueryResolvers.Query[q.name] = q.resolver;
});

export default {
Query,
User,
Date: new GraphQLScalarType({
name: 'Date',
description: 'Date custom scalar type',
name: "Date",
description: "Date custom scalar type",
parseValue(value) {
return new Date(value); // value from the client
},
Expand All @@ -23,4 +47,5 @@ export default {
return null;
},
}),
...allQueryResolvers,
};
18 changes: 10 additions & 8 deletions tests/resolvers/Query/me.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
import * as chai from 'chai';
import * as sinon from 'sinon';
import * as chai from "chai";
import * as sinon from "sinon";

import meResolver from '../../../src/schema/resolvers/Query/me';
import meResolver from "../../../src/schema/resolvers/Query/me";

const { expect } = chai;

describe('[resolver] Query { me() }', () => {
it('Should pass me', async () => {
describe("[resolver] Query { me() }", () => {
it("Should pass me", async () => {
const dataSources = {
User: {
me: sinon.stub().returns({ data: { user: {example: 'example'} } }),
me: sinon.stub().returns({ data: { user: { example: "example" } } }),
},
};
const args = null;

const spyCall = await meResolver(null, args, { dataSources });
expect(JSON.stringify(spyCall)).to.be.equals(JSON.stringify({"data":{"user":{"example": "example"}}}));
const spyCall = await meResolver.resolver(null, args, { dataSources });
expect(JSON.stringify(spyCall)).to.be.equals(
JSON.stringify({ data: { user: { example: "example" } } })
);
});
});

0 comments on commit 3dccbe7

Please sign in to comment.