diff --git a/.jest/__fixtures__/algorithmAquarius.ts b/.jest/__fixtures__/algorithmAquarius.ts new file mode 100644 index 000000000..f784cacd0 --- /dev/null +++ b/.jest/__fixtures__/algorithmAquarius.ts @@ -0,0 +1,91 @@ +import { Asset } from '@oceanprotocol/lib' + +export const algorithmAquarius: Asset = { + '@context': ['https://w3id.org/did/v1'], + id: 'did:op:6654b0793765b269696cec8d2f0d077d9bbcdd3c4f033d941ab9684e8ad06630', + nftAddress: '0xbA5BA7B09e2FA1eb0258f647503F81D2Af5cb07d', + version: '4.1.0', + chainId: 1, + metadata: { + created: '2022-09-29T11:30:26Z', + updated: '2022-09-29T11:30:26Z', + type: 'algorithm', + name: 'algorithmTestitest', + description: 'This is an algorithm test.', + links: ['https://www.oceanprotocol.com/sample'], + tags: [ + 'trading', + 'defi', + 'algorithm', + 'algorithmic-crypto-trading', + 'algo-trading', + 'trading-strategy', + 'cryptocurrency', + 'crypto' + ], + author: 'Test User', + license: 'https://market.oceanprotocol.com/terms', + additionalInformation: { + termsAndConditions: true + }, + algorithm: { + language: 'json', + version: '0.1', + container: { + entrypoint: 'python $algo', + tag: 'latest', + image: 'https://docker.com/test.img', + checksum: '' + } + } + }, + services: [ + { + id: 'dbc42f4c62d2452f8731fd023eacfae74e9c7a42fbd12ce84310f13342e4aab1', + type: 'access', + files: + '0x04022ef1afafe340f41b261ef721b8dd55dee094975cc70330803d760beef38871948ce572ff1c533d56cda2665749ed2eb8283e243ec5ee19011f510b6b263b2da0af537e3f1fdff7ddd90fa26c7a4761a6d26928bc1348a302634012aac7998e92c84456ab73e9a847120c44ebda15781787e8c382391b2eaefc8b8d36998f3998d1c4647f4f7bb28f4278093c1d231f66e78f81452049443b9e540aeb42ebbdc1b748c024eb10218532814736e241efa1c2a687685b4e2ea7a877685aa0ea325d1a8cf765d1b423b32d81ec3c3e22fc9c15c6b9b71f2862edaec4e4cf7c3a638ffc0ecb88ede3cabb511d4780543a53c001a95f42de1877796e13c997b57bc671507e92198934b4ea7c2e6554993388421253e8c2f10458dec872a7ebfa71b6e77ed359222c93261ba252028c5da06ccf8defcd529885b2125816325a47e23728b513', + datatokenAddress: '0x067e1E6ec580F3F0f6781679A4A5AB07A6464b08', + serviceEndpoint: 'https://v4.provider.goerli.oceanprotocol.com', + timeout: 604800 + } + ], + event: { + tx: '0x3e07a75c1cc5d4146222a93ab4319144e60ecca3ebfb8b15f1ff339d6f479dc9', + block: 7680195, + from: '0x903322C7E45A60d7c8C3EA236c5beA9Af86310c7', + contract: '0xbA5BA7B09e2FA1eb0258f647503F81D2Af5cb07d', + datetime: '2022-09-29T11:31:12' + }, + nft: { + address: '0xbA5BA7B09e2FA1eb0258f647503F81D2Af5cb07d', + name: 'Ocean Data NFT', + symbol: 'OCEAN-NFT', + state: 0, + tokenURI: + 'data:application/json;base64,eyJuYW1lIjoiT2NlYW4gRGF0YSBORlQiLCJzeW1ib2wiOiJPQ0VBTi1ORlQiLCJkZXNjcmlwdGlvbiI6IlRoaXMgTkZUIHJlcHJlc2VudHMgYW4gYXNzZXQgaW4gdGhlIE9jZWFuIFByb3RvY29sIHY0IGVjb3N5c3RlbS5cblxuVmlldyBvbiBPY2VhbiBNYXJrZXQ6IGh0dHBzOi8vbWFya2V0Lm9jZWFucHJvdG9jb2wuY29tL2Fzc2V0L2RpZDpvcDo2NjU0YjA3OTM3NjViMjY5Njk2Y2VjOGQyZjBkMDc3ZDliYmNkZDNjNGYwMzNkOTQxYWI5Njg0ZThhZDA2NjMwIiwiZXh0ZXJuYWxfdXJsIjoiaHR0cHM6Ly9tYXJrZXQub2NlYW5wcm90b2NvbC5jb20vYXNzZXQvZGlkOm9wOjY2NTRiMDc5Mzc2NWIyNjk2OTZjZWM4ZDJmMGQwNzdkOWJiY2RkM2M0ZjAzM2Q5NDFhYjk2ODRlOGFkMDY2MzAiLCJiYWNrZ3JvdW5kX2NvbG9yIjoiMTQxNDE0IiwiaW1hZ2VfZGF0YSI6ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDk5IDk5JyBmaWxsPSd1bmRlZmluZWQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGw9JyUyM2ZmNDA5Mjc3JyBkPSdNMCw5OUwwLDI5QzksMjUgMTksMjIgMjksMjFDMzgsMTkgNDksMTkgNjEsMjFDNzIsMjIgODUsMjUgOTksMjlMOTksOTlaJy8lM0UlM0NwYXRoIGZpbGw9JyUyM2ZmNDA5MmJiJyBkPSdNMCw5OUwwLDU1QzgsNDkgMTcsNDQgMjgsNDNDMzgsNDEgNTAsNDIgNjMsNDNDNzUsNDMgODcsNDIgOTksNDJMOTksOTlaJyUzRSUzQy9wYXRoJTNFJTNDcGF0aCBmaWxsPSclMjNmZjQwOTJmZicgZD0nTTAsOTlMMCw2OEMxMSw2NiAyMiw2NSAzMiw2N0M0MSw2OCA1MCw3MyA2MSw3NkM3MSw3OCA4NSw3OCA5OSw3OUw5OSw5OVonJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFIn0=', + owner: '0x99840Df5Cb42faBE0Feb8811Aaa4BC99cA6C84e0', + created: '2022-09-29T11:31:12' + }, + datatokens: [ + { + address: '0x067e1E6ec580F3F0f6781679A4A5AB07A6464b08', + name: 'Stupendous Orca Token', + symbol: 'STUORC-59', + serviceId: + 'dbc42f4c62d2452f8731fd023eacfae74e9c7a42fbd12ce84310f13342e4aab1' + } + ], + stats: { + orders: 22, + price: { + value: 3231343254, + tokenAddress: '0xCfDdA22C9837aE76E0faA845354f33C62E03653a', + tokenSymbol: 'OCEAN' + } + }, + purgatory: { + state: false, + reason: '' + } +} diff --git a/.jest/__fixtures__/assetAquarius.ts b/.jest/__fixtures__/datasetAquarius.ts similarity index 94% rename from .jest/__fixtures__/assetAquarius.ts rename to .jest/__fixtures__/datasetAquarius.ts index ef07db86b..c581c3261 100644 --- a/.jest/__fixtures__/assetAquarius.ts +++ b/.jest/__fixtures__/datasetAquarius.ts @@ -1,6 +1,6 @@ import { Asset } from '@oceanprotocol/lib' -export const assetAquarius: Asset = { +export const datasetAquarius: Asset = { '@context': ['https://w3id.org/did/v1'], id: 'did:op:6654b0793765b269696cec8d2f0d077d9bbcdd3c4f033d941ab9684e8ad06630', nftAddress: '0xbA5BA7B09e2FA1eb0258f647503F81D2Af5cb07d', @@ -12,7 +12,16 @@ export const assetAquarius: Asset = { type: 'dataset', name: 'Testitest', description: 'This is a test.', - tags: [], + tags: [ + 'trading', + 'defi', + 'algorithm', + 'algorithmic-crypto-trading', + 'algo-trading', + 'trading-strategy', + 'cryptocurrency', + 'crypto' + ], author: 'Test User', license: 'https://market.oceanprotocol.com/terms', additionalInformation: { diff --git a/.jest/__fixtures__/assetWithAccessDetails.ts b/.jest/__fixtures__/datasetWithAccessDetails.ts similarity index 89% rename from .jest/__fixtures__/assetWithAccessDetails.ts rename to .jest/__fixtures__/datasetWithAccessDetails.ts index 4a1751ddb..af527ba5d 100644 --- a/.jest/__fixtures__/assetWithAccessDetails.ts +++ b/.jest/__fixtures__/datasetWithAccessDetails.ts @@ -1,7 +1,7 @@ -import { assetAquarius } from './assetAquarius' +import { datasetAquarius } from './datasetAquarius' export const asset: AssetExtended = { - ...assetAquarius, + ...datasetAquarius, accessDetails: { templateId: 1, publisherMarketOrderFee: '0', diff --git a/.jest/__fixtures__/assetsWithAccessDetails.ts b/.jest/__fixtures__/datasetsWithAccessDetails.ts similarity index 99% rename from .jest/__fixtures__/assetsWithAccessDetails.ts rename to .jest/__fixtures__/datasetsWithAccessDetails.ts index 18c726fc5..1891734e7 100644 --- a/.jest/__fixtures__/assetsWithAccessDetails.ts +++ b/.jest/__fixtures__/datasetsWithAccessDetails.ts @@ -1574,4 +1574,4 @@ export const assets: AssetExtended[] = [ validOrderTx: null } } -] \ No newline at end of file +] diff --git a/.jest/__mocks__/@utils/accessDetailsAndPricing.ts b/.jest/__mocks__/@utils/accessDetailsAndPricing.ts index 57faaf2cd..7a162fc69 100644 --- a/.jest/__mocks__/@utils/accessDetailsAndPricing.ts +++ b/.jest/__mocks__/@utils/accessDetailsAndPricing.ts @@ -1,3 +1,3 @@ -import { assets } from '../../__fixtures__/assetsWithAccessDetails' +import { assets } from '../../__fixtures__/datasetsWithAccessDetails' export const getAccessDetailsForAssets = jest.fn().mockResolvedValue(assets) diff --git a/.jest/__mocks__/hooksMocks.ts b/.jest/__mocks__/hooksMocks.ts index bf8d5c09c..6646a7335 100644 --- a/.jest/__mocks__/hooksMocks.ts +++ b/.jest/__mocks__/hooksMocks.ts @@ -1,7 +1,7 @@ import marketMetadata from '../__fixtures__/marketMetadata' import userPreferences from '../__fixtures__/userPreferences' import web3 from '../__fixtures__/web3' -import { asset } from '../__fixtures__/assetWithAccessDetails' +import { asset } from '../__fixtures__/datasetWithAccessDetails' jest.mock('../../src/@context/MarketMetadata', () => ({ useMarketMetadata: () => marketMetadata diff --git a/src/components/@shared/AssetList/index.stories.tsx b/src/components/@shared/AssetList/index.stories.tsx index aeba2ac98..c11cff5b3 100644 --- a/src/components/@shared/AssetList/index.stories.tsx +++ b/src/components/@shared/AssetList/index.stories.tsx @@ -3,7 +3,7 @@ import { ComponentStory, ComponentMeta } from '@storybook/react' import MarketMetadataProvider from '@context/MarketMetadata' import { UserPreferencesProvider } from '@context/UserPreferences' import AssetList, { AssetListProps } from '.' -import { assets } from '../../../../.jest/__fixtures__/assetsWithAccessDetails' +import { assets } from '../../../../.jest/__fixtures__/datasetsWithAccessDetails' export default { title: 'Component/@shared/AssetList', diff --git a/src/components/@shared/AssetList/index.test.tsx b/src/components/@shared/AssetList/index.test.tsx index b7fe4e4b3..cfe498505 100644 --- a/src/components/@shared/AssetList/index.test.tsx +++ b/src/components/@shared/AssetList/index.test.tsx @@ -1,7 +1,7 @@ import { render, screen, fireEvent } from '@testing-library/react' import React from 'react' import AssetList from './index' -import { assetAquarius } from '../../../../.jest/__fixtures__/assetAquarius' +import { datasetAquarius } from '../../../../.jest/__fixtures__/datasetAquarius' describe('@shared/AssetList', () => { it('renders without crashing', async () => { @@ -9,7 +9,7 @@ describe('@shared/AssetList', () => { render( { testRender() diff --git a/src/components/@shared/Price/index.test.tsx b/src/components/@shared/Price/index.test.tsx index 86d6328b9..84ff52e78 100644 --- a/src/components/@shared/Price/index.test.tsx +++ b/src/components/@shared/Price/index.test.tsx @@ -1,7 +1,7 @@ import { render, screen } from '@testing-library/react' import React from 'react' import Price from './index' -import { asset } from '../../../../.jest/__fixtures__/assetWithAccessDetails' +import { asset } from '../../../../.jest/__fixtures__/datasetWithAccessDetails' import prices from '../../../../.jest/__fixtures__/prices' jest.mock('../../../@context/Prices', () => ({ diff --git a/src/components/Asset/AssetContent/Bookmark.test.tsx b/src/components/Asset/AssetContent/Bookmark.test.tsx new file mode 100644 index 000000000..adfe7fea8 --- /dev/null +++ b/src/components/Asset/AssetContent/Bookmark.test.tsx @@ -0,0 +1,11 @@ +import { render, screen } from '@testing-library/react' +import React from 'react' +import Bookmark from './Bookmark' +import { datasetAquarius } from '../../../../.jest/__fixtures__/datasetAquarius' + +describe('src/components/Asset/AssetContent/Bookmark.tsx', () => { + it('renders Add Bookmark button', () => { + render() + expect(screen.getByTitle('Add Bookmark')).toBeInTheDocument() + }) +}) diff --git a/src/components/Asset/AssetContent/MetaFull.test.tsx b/src/components/Asset/AssetContent/MetaFull.test.tsx new file mode 100644 index 000000000..56053d369 --- /dev/null +++ b/src/components/Asset/AssetContent/MetaFull.test.tsx @@ -0,0 +1,17 @@ +import { render, screen } from '@testing-library/react' +import React from 'react' +import MetaFull from './MetaFull' +import { datasetAquarius } from '../../../../.jest/__fixtures__/datasetAquarius' +import { algorithmAquarius } from '../../../../.jest/__fixtures__/algorithmAquarius' + +describe('src/components/Asset/AssetContent/MetaFull.tsx', () => { + it('renders metadata', () => { + render() + expect(screen.getByText('Owner')).toBeInTheDocument() + }) + + it('renders metadata for an algorithm', () => { + render() + expect(screen.getByText('Docker Image')).toBeInTheDocument() + }) +}) diff --git a/src/components/Asset/AssetContent/MetaFull.tsx b/src/components/Asset/AssetContent/MetaFull.tsx index f01d71915..1e6f2ba1c 100644 --- a/src/components/Asset/AssetContent/MetaFull.tsx +++ b/src/components/Asset/AssetContent/MetaFull.tsx @@ -3,17 +3,20 @@ import MetaItem from './MetaItem' import styles from './MetaFull.module.css' import Publisher from '@shared/Publisher' import { useAsset } from '@context/Asset' -import { useWeb3 } from '@context/Web3' +// import { useWeb3 } from '@context/Web3' +import { getDummyWeb3 } from '@utils/web3' import { Asset, Datatoken, LoggerInstance } from '@oceanprotocol/lib' export default function MetaFull({ ddo }: { ddo: Asset }): ReactElement { const [paymentCollector, setPaymentCollector] = useState() const { isInPurgatory } = useAsset() - const { web3 } = useWeb3() + // const { web3 } = useWeb3() useEffect(() => { async function getInitialPaymentCollector() { try { + if (!ddo) return + const web3 = await getDummyWeb3(ddo.chainId) const datatoken = new Datatoken(web3) setPaymentCollector( await datatoken.getPaymentCollector(ddo.datatokens[0].address) @@ -23,7 +26,7 @@ export default function MetaFull({ ddo }: { ddo: Asset }): ReactElement { } } getInitialPaymentCollector() - }, [ddo, web3]) + }, [ddo]) function DockerImage() { const containerInfo = ddo?.metadata?.algorithm?.container diff --git a/src/components/Asset/AssetContent/MetaSecondary.test.tsx b/src/components/Asset/AssetContent/MetaSecondary.test.tsx new file mode 100644 index 000000000..5c39f10e0 --- /dev/null +++ b/src/components/Asset/AssetContent/MetaSecondary.test.tsx @@ -0,0 +1,18 @@ +import { render, screen } from '@testing-library/react' +import React from 'react' +import MetaSecondary from './MetaSecondary' +import { datasetAquarius } from '../../../../.jest/__fixtures__/datasetAquarius' +import { algorithmAquarius } from '../../../../.jest/__fixtures__/algorithmAquarius' + +describe('src/components/Asset/AssetContent/MetaSecondary.tsx', () => { + it('renders tags', () => { + render() + expect( + screen.getByText(datasetAquarius.metadata.tags[0]) + ).toBeInTheDocument() + }) + it('renders download sample button', () => { + render() + expect(screen.getByText('Sample Data')).toBeInTheDocument() + }) +}) diff --git a/src/components/Asset/RelatedAssets/index.test.tsx b/src/components/Asset/RelatedAssets/index.test.tsx index 3b2ff15b6..ec5d5feb7 100644 --- a/src/components/Asset/RelatedAssets/index.test.tsx +++ b/src/components/Asset/RelatedAssets/index.test.tsx @@ -1,7 +1,7 @@ import { render, screen } from '@testing-library/react' import React from 'react' import RelatedAssets from '.' -import { assets } from '../../../../.jest/__fixtures__/assetsWithAccessDetails' +import { assets } from '../../../../.jest/__fixtures__/datasetsWithAccessDetails' import { queryMetadata } from '../../../@utils/aquarius' // import * as userPreferencesMock from '../../../@context/UserPreferences' diff --git a/src/components/Home/MostViews/index.test.tsx b/src/components/Home/MostViews/index.test.tsx index dbdb91cb8..87efe5bcc 100644 --- a/src/components/Home/MostViews/index.test.tsx +++ b/src/components/Home/MostViews/index.test.tsx @@ -3,7 +3,7 @@ import React from 'react' import MostViews from '.' import axios from 'axios' import { queryMetadata } from '@utils/aquarius' -import { assetAquarius } from '../../../../.jest/__fixtures__/assetAquarius' +import { datasetAquarius } from '../../../../.jest/__fixtures__/datasetAquarius' jest.mock('axios') jest.mock('@utils/aquarius') @@ -12,7 +12,7 @@ const axiosMock = axios as jest.Mocked const queryMetadataMock = queryMetadata as jest.Mock const queryMetadataBaseReturn: PagedAssets = { - results: [assetAquarius], + results: [datasetAquarius], page: 1, totalPages: 1, totalResults: 1, @@ -27,7 +27,7 @@ describe('components/Home/MostViews', () => { it('renders without crashing', async () => { axiosMock.get.mockImplementation(() => Promise.resolve({ - data: [{ count: 666, did: assetAquarius.id }] + data: [{ count: 666, did: datasetAquarius.id }] }) ) queryMetadataMock.mockResolvedValue(queryMetadataBaseReturn)