11import * as request from "supertest" ;
22
33import { Test } from "@nestjs/testing" ;
4- import { INestMicroservice } from "@nestjs/common" ;
4+ import { INestMicroservice , ServiceUnavailableException } from "@nestjs/common" ;
55
66import { TestService } from "./test-handler" ;
7- import { JSONRPCServer } from "." ;
7+ import { JSONRPCServer , CodedRpcException } from "." ;
8+ import { JSONRPCClient } from "./client-proxy" ;
89
910describe ( "json-rpc-e2e" , ( ) => {
1011 let app : INestMicroservice ;
1112 let server : JSONRPCServer ;
13+ let client : JSONRPCClient ;
14+ let service : TestService ;
1215
1316 beforeAll ( async ( ) => {
1417 let moduleRef = await Test . createTestingModule ( {
@@ -20,34 +23,30 @@ describe("json-rpc-e2e", () => {
2023 port : 8080
2124 } ) ;
2225
26+ client = new JSONRPCClient ( "http://localhost:8080/rpc/v1" ) ;
27+
28+ service = client . getService < TestService > ( "test" ) ;
29+
2330 app = moduleRef . createNestMicroservice ( { strategy : server } ) ;
2431 await new Promise ( resolve => app . listen ( resolve ) ) ;
2532 } ) ;
2633
27- it ( `/rpc/v1/ test.invoke (POST)` , ( ) => {
28- return request ( server . server )
29- . post ( "/rpc/v1" )
30- . send ( { method : "test.invoke" , params : { data : "hi" } } )
31- . expect ( 200 )
32- . expect ( {
33- data : "hi"
34- } ) ;
34+ it ( `should make and RPC call with the JSONRPCClient` , ( ) => {
35+ return service
36+ . invokeClientService ( { data : "hi" } )
37+ . then ( res => expect ( res . result . data ) . toStrictEqual ( { data : "hi" } ) ) ;
3538 } ) ;
3639
37- it ( `should throw an error on /rpc/v1/ test.testError (POST)` , ( ) => {
38- const errorObj = {
39- message : "RPC EXCEPTION" ,
40- code : 403 ,
41- data : {
40+ it ( `should return an error and check error data from JSONRPCClient call` , async ( ) => {
41+ const expectedCodedException = expect . objectContaining (
42+ new CodedRpcException ( "RPC EXCEPTION" , 403 , {
4243 fromService : "Test Service" ,
4344 params : { data : "hi" }
44- }
45- } ;
46- return request ( server . server )
47- . post ( "/rpc/v1" )
48- . send ( { method : "test.testError" , params : { data : "hi" } } )
49- . expect ( 403 )
50- . expect ( errorObj ) ;
45+ } )
46+ ) ;
47+
48+ const resp = service . testError ( { data : "hi" } ) ;
49+ return expect ( resp ) . rejects . toThrowError ( expectedCodedException ) ;
5150 } ) ;
5251
5352 afterAll ( async ( ) => {
0 commit comments