|
| 1 | +import { ExecutionContext } from '@nestjs/common' |
1 | 2 | import { Query, Resolver } from '@nestjs/graphql' |
2 | 3 | import { ReferenceResolver, ReferenceResolverOpts } from '@ptc-org/nestjs-query-graphql' |
3 | | -import { when } from 'ts-mockito' |
| 4 | +import { anything, when } from 'ts-mockito' |
4 | 5 |
|
5 | 6 | import { createResolverFromNest, generateSchema, TestResolverDTO, TestService } from '../__fixtures__' |
6 | 7 |
|
@@ -33,33 +34,48 @@ describe('ReferenceResolver', () => { |
33 | 34 | }) |
34 | 35 |
|
35 | 36 | describe('#resolveReference', () => { |
36 | | - it('should call the service getById with the provided input', async () => { |
| 37 | + const createContext = (): ExecutionContext => ({}) as unknown as ExecutionContext |
| 38 | + |
| 39 | + it('should use DataLoader to resolve reference', async () => { |
37 | 40 | const { resolver, mockService } = await createResolverFromNest(TestResolver) |
| 41 | + const context = createContext() |
38 | 42 | const id = 'id-1' |
39 | 43 | const output: TestResolverDTO = { |
40 | 44 | id, |
41 | 45 | stringField: 'foo' |
42 | 46 | } |
43 | | - when(mockService.getById(id)).thenResolve(output) |
| 47 | + |
| 48 | + when(mockService.query(anything())).thenResolve([output]) |
| 49 | + |
44 | 50 | // @ts-ignore |
45 | 51 | // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/naming-convention |
46 | | - const result = await resolver.resolveReference({ __type: 'TestReference', id }) |
| 52 | + const result = await resolver.resolveReference({ __type: 'TestReference', id }, context) |
47 | 53 | return expect(result).toEqual(output) |
48 | 54 | }) |
49 | 55 |
|
50 | 56 | it('should reject if the id is not found', async () => { |
51 | | - const { resolver, mockService } = await createResolverFromNest(TestResolver) |
52 | | - const id = 'id-1' |
53 | | - const output: TestResolverDTO = { |
54 | | - id, |
55 | | - stringField: 'foo' |
56 | | - } |
57 | | - when(mockService.getById(id)).thenResolve(output) |
| 57 | + const { resolver } = await createResolverFromNest(TestResolver) |
| 58 | + const context = createContext() |
| 59 | + |
58 | 60 | // @ts-ignore |
59 | 61 | // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/naming-convention |
60 | | - return expect(resolver.resolveReference({ __type: 'TestReference' })).rejects.toThrow( |
| 62 | + return expect(resolver.resolveReference({ __type: 'TestReference' }, context)).rejects.toThrow( |
61 | 63 | 'Unable to resolve reference, missing required key id for TestResolverDTO' |
62 | 64 | ) |
63 | 65 | }) |
| 66 | + |
| 67 | + it('should reject if entity is not found', async () => { |
| 68 | + const { resolver, mockService } = await createResolverFromNest(TestResolver) |
| 69 | + const context = createContext() |
| 70 | + const id = 'id-not-found' |
| 71 | + |
| 72 | + when(mockService.query(anything())).thenResolve([]) |
| 73 | + |
| 74 | + // @ts-ignore |
| 75 | + // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/naming-convention |
| 76 | + return expect(resolver.resolveReference({ __type: 'TestReference', id }, context)).rejects.toThrow( |
| 77 | + 'Unable to find TestResolverDTO with id: id-not-found' |
| 78 | + ) |
| 79 | + }) |
64 | 80 | }) |
65 | 81 | }) |
0 commit comments