11import { HttpService } from '@nestjs/axios' ;
2+ import { ConfigService } from '@nestjs/config' ;
23import { Test } from '@nestjs/testing' ;
34import { of } from 'rxjs' ;
45import { Web3Service } from '../web3/web3.service' ;
56import { JobService } from './job.service' ;
6- import {
7- EscrowClient ,
8- KVStoreClient ,
9- StorageClient ,
10- } from '@human-protocol/sdk' ;
7+ import { EscrowClient , KVStoreClient } from '@human-protocol/sdk' ;
118
129jest . mock ( '@human-protocol/sdk' , ( ) => ( {
1310 ...jest . requireActual ( '@human-protocol/sdk' ) ,
@@ -27,8 +24,10 @@ jest.mock('axios', () => ({
2724} ) ) ;
2825
2926describe ( 'JobService' , ( ) => {
27+ let configService : ConfigService ;
3028 let jobService : JobService ;
3129 let web3Service : Web3Service ;
30+ let httpService : HttpService ;
3231
3332 const chainId = 1 ;
3433 const escrowAddress = '0x1234567890123456789012345678901234567890' ;
@@ -39,6 +38,11 @@ describe('JobService', () => {
3938 getNetwork : jest . fn ( ) . mockResolvedValue ( { chainId : 1 } ) ,
4039 } ;
4140
41+ const reputationOracleURL = 'https://example.com/reputationoracle' ;
42+ const configServiceMock = {
43+ get : jest . fn ( ) . mockReturnValue ( reputationOracleURL ) ,
44+ } ;
45+
4246 const httpServicePostMock = jest
4347 . fn ( )
4448 . mockReturnValue ( of ( { status : 200 , data : { } } ) ) ;
@@ -47,6 +51,10 @@ describe('JobService', () => {
4751 const moduleRef = await Test . createTestingModule ( {
4852 providers : [
4953 JobService ,
54+ {
55+ provide : ConfigService ,
56+ useValue : configServiceMock ,
57+ } ,
5058 {
5159 provide : Web3Service ,
5260 useValue : {
@@ -57,13 +65,18 @@ describe('JobService', () => {
5765 provide : HttpService ,
5866 useValue : {
5967 post : httpServicePostMock ,
68+ axiosRef : {
69+ get : jest . fn ( ) ,
70+ } ,
6071 } ,
6172 } ,
6273 ] ,
6374 } ) . compile ( ) ;
6475
76+ configService = moduleRef . get < ConfigService > ( ConfigService ) ;
6577 jobService = moduleRef . get < JobService > ( JobService ) ;
6678 web3Service = moduleRef . get < Web3Service > ( Web3Service ) ;
79+ httpService = moduleRef . get < HttpService > ( HttpService ) ;
6780 } ) ;
6881
6982 describe ( 'getDetails' , ( ) => {
@@ -74,14 +87,10 @@ describe('JobService', () => {
7487 fortunesRequested : 5 ,
7588 fundAmount : 100 ,
7689 } ;
77- ( EscrowClient . build as any ) . mockImplementation ( ( ) => ( {
78- getManifestUrl : jest
79- . fn ( )
80- . mockResolvedValue ( 'https://example.com/manifest.json' ) ,
81- } ) ) ;
82- ( StorageClient . downloadFileFromUrl as any ) . mockResolvedValue ( {
83- ...manifest ,
84- fortunesRequired : manifest . fortunesRequested ,
90+
91+ httpService . axiosRef . get = jest . fn ( ) . mockResolvedValue ( {
92+ status : 200 ,
93+ data : { ...manifest , fortunesRequired : manifest . fortunesRequested } ,
8594 } ) ;
8695
8796 const result = await jobService . getDetails ( chainId , escrowAddress ) ;
@@ -91,37 +100,14 @@ describe('JobService', () => {
91100 chainId,
92101 manifest,
93102 } ) ;
94- expect ( web3Service . getSigner ) . toHaveBeenCalledWith ( chainId ) ;
95103 } ) ;
96104
97- it ( 'should fail if the escrow address is invalid' , async ( ) => {
98- const escrowAddress = 'invalid_address' ;
99- ( EscrowClient . build as any ) . mockImplementation ( ( ) => ( {
100- getManifestUrl : jest
101- . fn ( )
102- . mockRejectedValue ( new Error ( 'Invalid address' ) ) ,
103- } ) ) ;
105+ it ( 'should fail if reputation oracle url is empty' , async ( ) => {
106+ configService . get = jest . fn ( ) . mockReturnValue ( '' ) ;
104107
105108 await expect (
106109 jobService . getDetails ( chainId , escrowAddress ) ,
107- ) . rejects . toThrow ( 'Invalid address' ) ;
108- expect ( web3Service . getSigner ) . toHaveBeenCalledWith ( chainId ) ;
109- } ) ;
110-
111- it ( 'should fail if the file does not exist' , async ( ) => {
112- ( EscrowClient . build as any ) . mockImplementation ( ( ) => ( {
113- getManifestUrl : jest
114- . fn ( )
115- . mockResolvedValue ( 'https://example.com/manifest.json' ) ,
116- } ) ) ;
117- ( StorageClient . downloadFileFromUrl as any ) . mockRejectedValue (
118- new Error ( 'File not found' ) ,
119- ) ;
120-
121- await expect (
122- jobService . getDetails ( chainId , escrowAddress ) ,
123- ) . rejects . toThrow ( 'File not found' ) ;
124- expect ( web3Service . getSigner ) . toHaveBeenCalledWith ( chainId ) ;
110+ ) . rejects . toThrow ( 'Unable to get Reputation Oracle URL' ) ;
125111 } ) ;
126112 } ) ;
127113
0 commit comments