From 7843ab66b706aaa32b1b3f0ef311b066c49c7347 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Sun, 12 Sep 2021 20:57:02 +0200 Subject: [PATCH] test tweaks --- .eslintrc | 3 ++- package-lock.json | 31 +++++++++++++++++++++++++------ package.json | 6 ++++-- src/@types/ipfs.d.ts | 4 +++- src/__tests__/Layout.test.tsx | 6 +++--- src/__tests__/Loader.test.tsx | 8 ++++---- src/__tests__/index.test.tsx | 7 ++++--- src/hooks/use-ipfs-api.tsx | 3 ++- 8 files changed, 47 insertions(+), 21 deletions(-) diff --git a/.eslintrc b/.eslintrc index e4c49d2..4364a67 100644 --- a/.eslintrc +++ b/.eslintrc @@ -30,7 +30,8 @@ "plugin:jsx-a11y/recommended", "plugin:prettier/recommended", "plugin:react/recommended", - "plugin:react-hooks/recommended" + "plugin:react-hooks/recommended", + "plugin:@next/next/recommended" ], "plugins": ["@typescript-eslint", "react"], "rules": { diff --git a/package-lock.json b/package-lock.json index f13925c..74e5ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@next/bundle-analyzer": "^11.1.2", + "@next/eslint-plugin-next": "^11.1.2", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.0", "@types/jest": "^27.0.1", @@ -2280,6 +2281,15 @@ "resolved": "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz", "integrity": "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" }, + "node_modules/@next/eslint-plugin-next": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz", + "integrity": "sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, "node_modules/@next/polyfill-module": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz", @@ -6551,9 +6561,9 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -17065,6 +17075,15 @@ "resolved": "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz", "integrity": "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" }, + "@next/eslint-plugin-next": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz", + "integrity": "sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, "@next/polyfill-module": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz", @@ -20315,9 +20334,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", diff --git a/package.json b/package.json index e782e8a..ffe90ab 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "start": "next dev", "build": "next build", "serve": "next start", - "test": "npm run lint && NODE_ENV=test jest", - "test:watch": "npm run lint && NODE_ENV=test jest --watch", + "test": "npm run lint && npm run type-check && NODE_ENV=test jest", + "test:watch": "npm run lint && npm run type-check && NODE_ENV=test jest --watch", "lint": "eslint --ignore-path .gitignore --ext .js --ext .tsx --ext .ts .", + "type-check": "tsc --noEmit", "format": "prettier --ignore-path .gitignore '**/*.{css,yml,js,jsx,ts,tsx,json}' --write", "analyze": "ANALYZE=true next build" }, @@ -27,6 +28,7 @@ }, "devDependencies": { "@next/bundle-analyzer": "^11.1.2", + "@next/eslint-plugin-next": "^11.1.2", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.0", "@types/jest": "^27.0.1", diff --git a/src/@types/ipfs.d.ts b/src/@types/ipfs.d.ts index 8a31b6a..8d717f6 100644 --- a/src/@types/ipfs.d.ts +++ b/src/@types/ipfs.d.ts @@ -1,8 +1,10 @@ import { CID } from 'ipfs-http-client' +// mirroring AddResult, which is not exported from 'ipfs-http-client' export interface FileIpfs { - path: string cid: CID size: number + path: string mode?: number + mtime?: Mtime } diff --git a/src/__tests__/Layout.test.tsx b/src/__tests__/Layout.test.tsx index 0702b92..31edc9f 100644 --- a/src/__tests__/Layout.test.tsx +++ b/src/__tests__/Layout.test.tsx @@ -1,10 +1,10 @@ import React from 'react' -import { render } from '@testing-library/react' +import { render, screen } from '@testing-library/react' import Layout from '../Layout' describe('Layout', () => { it('renders without crashing', () => { - const { container } = render(Hello) - expect(container.firstChild).toBeInTheDocument() + render(Hello) + expect(screen.getByText('Hello')).toBeInTheDocument() }) }) diff --git a/src/__tests__/Loader.test.tsx b/src/__tests__/Loader.test.tsx index 6c48f41..4a3090c 100644 --- a/src/__tests__/Loader.test.tsx +++ b/src/__tests__/Loader.test.tsx @@ -1,10 +1,10 @@ import React from 'react' -import { render } from '@testing-library/react' +import { render, screen } from '@testing-library/react' import Loader from '../components/Loader' describe('Loader', () => { - it('renders without crashing', () => { - const { container } = render() - expect(container.firstChild).toBeInTheDocument() + it('renders without crashing', async () => { + render() + expect(screen.getByText('Hello')).toBeInTheDocument() }) }) diff --git a/src/__tests__/index.test.tsx b/src/__tests__/index.test.tsx index 0b5fca8..65399ab 100644 --- a/src/__tests__/index.test.tsx +++ b/src/__tests__/index.test.tsx @@ -1,10 +1,11 @@ import React from 'react' -import { render } from '@testing-library/react' +import { render, waitFor, screen } from '@testing-library/react' import Home from '../pages' describe('Home', () => { it('renders without crashing', async () => { - const { container } = render() - expect(container.firstChild).toBeInTheDocument() + render() + await waitFor(() => screen.getAllByTitle('Online').length === 2) + expect(screen.getAllByTitle('Online').length).toBe(2) }) }) diff --git a/src/hooks/use-ipfs-api.tsx b/src/hooks/use-ipfs-api.tsx index aca5e4e..e232919 100644 --- a/src/hooks/use-ipfs-api.tsx +++ b/src/hooks/use-ipfs-api.tsx @@ -1,5 +1,6 @@ import { useCallback, useEffect, useState } from 'react' import { create, IPFSHTTPClient, Options } from 'ipfs-http-client' +import type { CIDVersion } from 'multiformats/cid' import { formatBytes } from '../utils' import { FileDropzone } from '../components/Dropzone' import { FileIpfs } from '../@types/ipfs' @@ -30,7 +31,7 @@ export default function useIpfsApi(config: Options): IpfsApiValue { const options = { wrapWithDirectory: true, - cidVersion: 1, + cidVersion: 1 as CIDVersion, hashAlg: 'sha2-256', progress: (length: number) => formatBytes(length, 0) }