Skip to content

Commit

Permalink
feat: ✨ Move users.resolver to users/presentation
Browse files Browse the repository at this point in the history
  • Loading branch information
zhumeisongsong committed Nov 18, 2024
1 parent dede2aa commit 2787002
Show file tree
Hide file tree
Showing 11 changed files with 169 additions and 1 deletion.
7 changes: 7 additions & 0 deletions libs/users/presentation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# users-presentation

This library was generated with [Nx](https://nx.dev).

## Running unit tests

Run `nx test users-presentation` to execute the unit tests via [Jest](https://jestjs.io).
3 changes: 3 additions & 0 deletions libs/users/presentation/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const baseConfig = require('../../../eslint.config.js');

module.exports = [...baseConfig];
10 changes: 10 additions & 0 deletions libs/users/presentation/jest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export default {
displayName: 'users-presentation',
preset: '../../../jest.preset.js',
testEnvironment: 'node',
transform: {
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../../coverage/libs/users/presentation',
};
9 changes: 9 additions & 0 deletions libs/users/presentation/project.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "users-presentation",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/users/presentation/src",
"projectType": "library",
"tags": [],
"// targets": "to see all targets run: nx show project users-presentation --web",
"targets": {}
}
1 change: 1 addition & 0 deletions libs/users/presentation/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './lib/users.resolver';
68 changes: 68 additions & 0 deletions libs/users/presentation/src/lib/users.resolver.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UsersResolver } from './users.resolver';
import { UsersService } from '../../../application/src/lib/users.service';
import { User } from '@user/domain';

describe('UsersResolver', () => {
let resolver: UsersResolver;
let service: UsersService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UsersResolver,
{
provide: UsersService,
useValue: {
findById: jest.fn(),
},
},
],
}).compile();

resolver = module.get<UsersResolver>(UsersResolver);
service = module.get<UsersService>(UsersService);
});

it('should be defined', () => {
expect(resolver).toBeDefined();
});

describe('getUser', () => {
it('should return a user by id', () => {
const user: User = { id: '1', name: 'John Doe' };
jest.spyOn(service, 'findById').mockReturnValue(user);

expect(resolver.getUser('1')).toEqual(user);
expect(service.findById).toHaveBeenCalledWith('1');
});

it('should return undefined if user not found', () => {
jest.spyOn(service, 'findById').mockReturnValue(undefined);

expect(resolver.getUser('2')).toBeUndefined();
expect(service.findById).toHaveBeenCalledWith('2');
});
});

describe('resolveReference', () => {
it('should return a user by reference id', () => {
const user: User = { id: '1', name: 'John Doe' };
jest.spyOn(service, 'findById').mockReturnValue(user);

expect(
resolver.resolveReference({ __typename: 'User', id: '1' }),
).toEqual(user);
expect(service.findById).toHaveBeenCalledWith('1');
});

it('should return undefined if user not found by reference id', () => {
jest.spyOn(service, 'findById').mockReturnValue(undefined);

expect(
resolver.resolveReference({ __typename: 'User', id: '2' }),
).toBeUndefined();
expect(service.findById).toHaveBeenCalledWith('2');
});
});
});
22 changes: 22 additions & 0 deletions libs/users/presentation/src/lib/users.resolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Args, ID, Query, Resolver, ResolveReference } from '@nestjs/graphql';
import { User } from '@user/domain';

import { UsersService } from '../../../application/src/lib/users.service';

@Resolver(() => User)
export class UsersResolver {
constructor(private usersService: UsersService) {}

@Query(() => User, { nullable: true })
getUser(@Args({ name: 'id', type: () => ID }) id: string): User | undefined {
return this.usersService.findById(id);
}

@ResolveReference()
resolveReference(reference: {
__typename: string;
id: string;
}): User | undefined {
return this.usersService.findById(reference.id);
}
}
22 changes: 22 additions & 0 deletions libs/users/presentation/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}
11 changes: 11 additions & 0 deletions libs/users/presentation/tsconfig.lib.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}
14 changes: 14 additions & 0 deletions libs/users/presentation/tsconfig.spec.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../dist/out-tsc",
"module": "commonjs",
"types": ["jest", "node"]
},
"include": [
"jest.config.ts",
"src/**/*.test.ts",
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}
3 changes: 2 additions & 1 deletion tsconfig.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
"@libs/config": ["libs/config/src/index.ts"],
"@prompt/domain": ["libs/prompt/domain/src/index.ts"],
"@user/domain": ["libs/user/domain/src/index.ts"],
"@users/application": ["libs/users/application/src/index.ts"]
"@users/application": ["libs/users/application/src/index.ts"],
"@users/presentation": ["libs/users/presentation/src/index.ts"]
}
},
"exclude": ["node_modules", "tmp"]
Expand Down

0 comments on commit 2787002

Please sign in to comment.