diff --git a/client/src/components/atoms/VersionNumbers/index.test.tsx b/client/src/components/atoms/VersionNumbers/index.test.tsx
index 330b3f9..94ec2c7 100644
--- a/client/src/components/atoms/VersionNumbers/index.test.tsx
+++ b/client/src/components/atoms/VersionNumbers/index.test.tsx
@@ -1,29 +1,124 @@
import React from 'react'
import { render, waitForElement } from '@testing-library/react'
import mockAxios from 'jest-mock-axios'
-import VersionNumbers from '.'
+import { StateMock } from '@react-mock/state'
+import { version as versionSquid } from '@oceanprotocol/squid/package.json'
+import VersionNumbers, { commonsVersion } from '.'
afterEach(() => {
mockAxios.reset()
})
+const stateMock = {
+ commons: { software: 'Commons', version: commonsVersion },
+ squidJs: {
+ software: 'Squid-js',
+ version: versionSquid
+ },
+ aquarius: {
+ isLoading: false,
+ software: 'Aquarius',
+ version: ''
+ },
+ brizo: {
+ isLoading: false,
+ software: 'Brizo',
+ version: '',
+ contracts: {},
+ network: '',
+ 'keeper-version': '0.0.0',
+ 'keeper-url': ''
+ },
+ keeperContracts: {
+ isLoading: false,
+ software: 'Keeper Contracts',
+ version: '',
+ contracts: {},
+ network: ''
+ },
+ faucet: {
+ isLoading: false,
+ software: 'Faucet',
+ version: ''
+ }
+}
+
+const stateMockIncomplete = {
+ commons: { software: 'Commons', version: commonsVersion },
+ squidJs: {
+ software: 'Squid-js',
+ version: versionSquid
+ },
+ aquarius: {
+ isLoading: false,
+ software: 'Aquarius',
+ version: undefined
+ },
+ brizo: {
+ isLoading: false,
+ software: 'Brizo',
+ version: undefined,
+ contracts: undefined,
+ network: undefined,
+ 'keeper-version': undefined,
+ 'keeper-url': undefined
+ },
+ keeperContracts: {
+ isLoading: false,
+ software: 'Keeper Contracts',
+ version: undefined,
+ contracts: undefined,
+ network: undefined
+ },
+ faucet: {
+ isLoading: false,
+ software: 'Faucet',
+ version: undefined
+ }
+}
+
const mockResponse = {
data: {
software: 'Brizo',
version: '6.6.6',
contracts: { Hello: 'Hello', Another: 'Hello' },
- network: 'hello'
+ network: 'hello',
+ 'keeper-url': 'https://squid.com',
+ 'keeper-version': '6.6.6'
}
}
+const mockResponseFaulty = {
+ status: 404,
+ statusText: 'Not Found',
+ data: {}
+}
+
describe('VersionNumbers', () => {
it('renders without crashing', () => {
- const { container } = render()
+ const { container } = render(
+
+
+
+ )
mockAxios.mockResponse(mockResponse)
expect(mockAxios.get).toHaveBeenCalled()
expect(container.firstChild).toBeInTheDocument()
})
+ it('renders without proper component response', () => {
+ const { container } = render(
+
+
+
+ )
+ mockAxios.mockResponse(mockResponseFaulty)
+ expect(mockAxios.get).toHaveBeenCalled()
+ expect(container.querySelector('table')).toHaveTextContent(
+ 'Could not get version'
+ )
+ })
+
it('minimal component versions in link title, prefixed with `v`', async () => {
const { getByTitle } = render()
mockAxios.mockResponse(mockResponse)
diff --git a/client/src/components/atoms/VersionNumbers/index.tsx b/client/src/components/atoms/VersionNumbers/index.tsx
index e39e0bf..e7edbfc 100644
--- a/client/src/components/atoms/VersionNumbers/index.tsx
+++ b/client/src/components/atoms/VersionNumbers/index.tsx
@@ -18,8 +18,9 @@ import {
} from '../../../config'
import VersionTable from './VersionTable'
+import { isJsonString } from './utils'
-const commonsVersion =
+export const commonsVersion =
process.env.NODE_ENV === 'production' ? version : `${version}-dev`
interface VersionNumbersProps {
@@ -120,7 +121,8 @@ export default class VersionNumbers extends PureComponent<
aquariusHost,
aquariusPort
)
- aquarius.version !== undefined &&
+ aquarius &&
+ aquarius.version !== undefined &&
this.setState({ aquarius: { isLoading: false, ...aquarius } })
}
@@ -133,7 +135,8 @@ export default class VersionNumbers extends PureComponent<
brizo['keeper-url'] &&
new URL(brizo['keeper-url']).hostname.split('.')[0]
- brizo.version !== undefined &&
+ brizo &&
+ brizo.version !== undefined &&
this.setState({
brizo: {
isLoading: false,
@@ -153,22 +156,14 @@ export default class VersionNumbers extends PureComponent<
const faucet = await this.getData(faucetScheme, faucetHost, faucetPort)
// backwards compatibility
- function IsJsonString(str: string) {
- try {
- JSON.parse(str)
- } catch (e) {
- return false
- }
- return true
- }
-
- IsJsonString(faucet) === false &&
+ isJsonString(faucet) === false &&
this.setState({
faucet: { ...this.state.faucet, isLoading: false }
})
// the new thing
- faucet.version !== undefined &&
+ faucet &&
+ faucet.version !== undefined &&
this.setState({ faucet: { isLoading: false, ...faucet } })
}
@@ -179,10 +174,8 @@ export default class VersionNumbers extends PureComponent<
cancelToken: this.signal.token
})
- if (response.status !== 200) {
- Logger.error(response.statusText)
- return
- }
+ // fail silently
+ if (response.status !== 200) return
return response.data
} catch (error) {
diff --git a/client/src/components/atoms/VersionNumbers/utils.test.ts b/client/src/components/atoms/VersionNumbers/utils.test.ts
new file mode 100644
index 0000000..0fa7677
--- /dev/null
+++ b/client/src/components/atoms/VersionNumbers/utils.test.ts
@@ -0,0 +1,11 @@
+import { isJsonString } from './utils'
+
+describe('isJsonString', () => {
+ it('detects json correctly', () => {
+ const testJson = isJsonString('{ "hello": "squid" }')
+ expect(testJson).toBeTruthy()
+
+ const testNonJson = isJsonString('')
+ expect(testNonJson).toBeFalsy()
+ })
+})
diff --git a/client/src/components/atoms/VersionNumbers/utils.ts b/client/src/components/atoms/VersionNumbers/utils.ts
new file mode 100644
index 0000000..0b12378
--- /dev/null
+++ b/client/src/components/atoms/VersionNumbers/utils.ts
@@ -0,0 +1,8 @@
+export function isJsonString(str: string) {
+ try {
+ JSON.parse(str)
+ } catch (e) {
+ return false
+ }
+ return true
+}