From bb828b954cf1c691b412eefb03d4f937105af8e6 Mon Sep 17 00:00:00 2001 From: Bogdan Fazakas Date: Fri, 26 Nov 2021 16:40:29 +0200 Subject: [PATCH] updated fetch decouple strategy and added some tests --- src/provider/Provider.ts | 19 +++++--------- src/provider/index.ts | 1 + src/utils/FetchHelper.ts | 12 +++++++++ src/utils/index.ts | 1 + test/integration/.mocharc.json | 6 +++++ test/integration/Provider.test.ts | 25 +++++++++++++++++++ test/integration/config.ts | 3 --- test/unit/Lib.test.ts | 0 test/unit/{ => datatoken}/Datatoken.test.ts | 10 ++++---- .../unit/{ => datatoken}/NFTDatatoken.test.ts | 8 +++--- 10 files changed, 60 insertions(+), 25 deletions(-) create mode 100644 src/utils/FetchHelper.ts create mode 100644 test/integration/.mocharc.json create mode 100644 test/integration/Provider.test.ts delete mode 100644 test/unit/Lib.test.ts rename test/unit/{ => datatoken}/Datatoken.test.ts (97%) rename test/unit/{ => datatoken}/NFTDatatoken.test.ts (97%) diff --git a/src/provider/Provider.ts b/src/provider/Provider.ts index 22981325..284ede3a 100644 --- a/src/provider/Provider.ts +++ b/src/provider/Provider.ts @@ -20,7 +20,7 @@ export class Provider { */ async getEndpoints(providerUri: string, fetchMethod: any): Promise { try { - const endpoints = await await fetchMethod.get(providerUri).json() + const endpoints = await await fetchMethod(providerUri).json() return endpoints } catch (e) { LoggerInstance.error('Finding the service endpoints failed:', e) @@ -80,7 +80,7 @@ export class Provider { : null if (!path) return null try { - const response = await fetchMethod.get(path + `?userAddress=${consumerAddress}`) + const response = await fetchMethod(path + `?userAddress=${consumerAddress}`) return String((await response.json()).nonce) } catch (e) { LoggerInstance.error(e) @@ -108,13 +108,6 @@ export class Provider { providerUri, providerEndpoints ) - // await this.getNonce( - // providerUri, - // accountId, - // fetchMethod, - // providerEndpoints, - // serviceEndpoints - // ) const args = { documentId: did, document: JSON.stringify(document), @@ -125,7 +118,7 @@ export class Provider { : null if (!path) return null try { - const response = await fetchMethod.post(path, decodeURI(JSON.stringify(args))) + const response = await fetchMethod(path, decodeURI(JSON.stringify(args))) return (await response.json()).encryptedDocument } catch (e) { LoggerInstance.error(e) @@ -156,7 +149,7 @@ export class Provider { : null if (!path) return null try { - const response = await fetchMethod.post(path, JSON.stringify(args)) + const response = await fetchMethod(path, JSON.stringify(args)) const results: FileMetadata[] = await response.json() for (const result of results) { files.push(result) @@ -204,7 +197,7 @@ export class Provider { if (userCustomParameters) initializeUrl += '&userdata=' + encodeURI(JSON.stringify(userCustomParameters)) try { - const response = await fetchMethod.get(initializeUrl) + const response = await fetchMethod(initializeUrl) return await response.text() } catch (e) { LoggerInstance.error(e) @@ -219,7 +212,7 @@ export class Provider { */ public async isValidProvider(url: string, fetchMethod: any): Promise { try { - const response = await fetchMethod.get(url) + const response = await fetchMethod(url) if (response?.ok) { const params = await response.json() if (params && params.providerAddress) return true diff --git a/src/provider/index.ts b/src/provider/index.ts index e69de29b..0ce7b023 100644 --- a/src/provider/index.ts +++ b/src/provider/index.ts @@ -0,0 +1 @@ +export * from './Provider' diff --git a/src/utils/FetchHelper.ts b/src/utils/FetchHelper.ts new file mode 100644 index 00000000..8a9c75d7 --- /dev/null +++ b/src/utils/FetchHelper.ts @@ -0,0 +1,12 @@ +import fetch from 'cross-fetch' +import LoggerInstance from './Logger' + +export async function fetchData(url: string, opts: RequestInit): Promise { + const result = await fetch(url, opts) + if (!result.ok) { + LoggerInstance.error(`Error requesting [${opts.method}] ${url}`) + LoggerInstance.error(`Response message: \n${await result.text()}`) + throw result + } + return result +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 186a9af7..4d6a964a 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -3,3 +3,4 @@ export * from './GasUtils' export * from './Logger' export * from './DatatokenName' export * from './ContractParams' +export * from './FetchHelper' diff --git a/test/integration/.mocharc.json b/test/integration/.mocharc.json new file mode 100644 index 00000000..860f598d --- /dev/null +++ b/test/integration/.mocharc.json @@ -0,0 +1,6 @@ +{ + "require": ["ts-node/register", "source-map-support/register", "mock-local-storage"], + "full-trace": true, + "exit": true, + "timeout": "300000" +} diff --git a/test/integration/Provider.test.ts b/test/integration/Provider.test.ts new file mode 100644 index 00000000..973d4856 --- /dev/null +++ b/test/integration/Provider.test.ts @@ -0,0 +1,25 @@ +import config from './config' +import { Provider } from '../../src/provider/Provider' +import { assert } from 'chai' +import { fetchData } from '../../src/utils' + +describe('Provider tests', () => { + let providerInstance: Provider + + it('Initialize Ocean', async () => { + providerInstance = new Provider() + }) + + it('Alice tests invalid provider', async () => { + const valid = await providerInstance.isValidProvider('http://example.net', fetchData) + assert(valid === false) + }) + + it('Alice tests valid provider', async () => { + const valid = await providerInstance.isValidProvider( + 'http://127.0.0.1:8030', + fetchData + ) + assert(valid === true) + }) +}) diff --git a/test/integration/config.ts b/test/integration/config.ts index 95ce2e6e..7b140e71 100644 --- a/test/integration/config.ts +++ b/test/integration/config.ts @@ -1,15 +1,12 @@ import { Config } from '../../src/models/Config' -import { LoggerInstance, LogLevel } from '../../src/utils' import Web3 from 'web3' -LoggerInstance.setLevel(LogLevel.Error) const web3 = new Web3('http://127.0.0.1:8545') export default { metadataCacheUri: 'http://aquarius:5000', providerUri: 'http://localhost:8030', nodeUri: `http://localhost:${process.env.ETH_PORT || 8545}`, - verbose: LogLevel.Error, web3Provider: web3 } as Config diff --git a/test/unit/Lib.test.ts b/test/unit/Lib.test.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/test/unit/Datatoken.test.ts b/test/unit/datatoken/Datatoken.test.ts similarity index 97% rename from test/unit/Datatoken.test.ts rename to test/unit/datatoken/Datatoken.test.ts index ac52e4e5..55666437 100644 --- a/test/unit/Datatoken.test.ts +++ b/test/unit/datatoken/Datatoken.test.ts @@ -12,17 +12,17 @@ import FixedRate from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedR import OPFCollector from '@oceanprotocol/contracts/artifacts/contracts/communityFee/OPFCommunityFeeCollector.sol/OPFCommunityFeeCollector.json' import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json' -import { TestContractHandler } from '../TestContractHandler' -import { NFTFactory, NFTCreateData } from '../../src/factories/NFTFactory' +import { TestContractHandler } from '../../TestContractHandler' +import { NFTFactory, NFTCreateData } from '../../../src/factories/NFTFactory' import { Datatoken, NFTDatatoken, OrderParams, DispenserParams -} from '../../src/datatokens' +} from '../../../src/datatokens' import { AbiItem } from 'web3-utils' -import { LoggerInstance } from '../../src/utils' -import { FreCreationParams, FreOrderParams } from '../../src/interfaces' +import { LoggerInstance } from '../../../src/utils' +import { FreCreationParams, FreOrderParams } from '../../../src/interfaces' const web3 = new Web3('http://127.0.0.1:8545') diff --git a/test/unit/NFTDatatoken.test.ts b/test/unit/datatoken/NFTDatatoken.test.ts similarity index 97% rename from test/unit/NFTDatatoken.test.ts rename to test/unit/datatoken/NFTDatatoken.test.ts index 734c9926..68854bf8 100644 --- a/test/unit/NFTDatatoken.test.ts +++ b/test/unit/datatoken/NFTDatatoken.test.ts @@ -12,11 +12,11 @@ import FixedRate from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedR import OPFCollector from '@oceanprotocol/contracts/artifacts/contracts/communityFee/OPFCommunityFeeCollector.sol/OPFCommunityFeeCollector.json' import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json' -import { TestContractHandler } from '../TestContractHandler' -import { NFTFactory, NFTCreateData } from '../../src/factories/NFTFactory' -import { NFTDatatoken } from '../../src/datatokens/NFTDatatoken' +import { TestContractHandler } from '../../TestContractHandler' +import { NFTFactory, NFTCreateData } from '../../../src/factories/NFTFactory' +import { NFTDatatoken } from '../../../src/datatokens/NFTDatatoken' import { AbiItem } from 'web3-utils' -import { LoggerInstance } from '../../src/utils' +import { LoggerInstance } from '../../../src/utils' const web3 = new Web3('http://127.0.0.1:8545')