Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@daml/react: Add an initial test suite #4612

Merged
merged 3 commits into from
Feb 20, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
@daml/react: Add an initial test suite
This only tests that the `useQuery` hook does the right thing once the
call to `Ledger.query` has resolved.

CHANGELOG_BEGIN
CHANGELOG_END
  • Loading branch information
hurryabit committed Feb 20, 2020
commit a4c3c961b495b7da5fb954403a63de9abb3fc4b9
27 changes: 15 additions & 12 deletions language-support/ts/daml-react/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,18 @@ pkg_npm(
],
) if not is_windows else None

# jest_test(
# name = "test",
# # Use the js outputs because jest cannot resolve imports in the ts_library
# # despite moduleNameMapper.
# srcs = [":daml-react"],
# jest_config = ":jest.config.js",
# deps = [
# "//language-support/ts/daml-ledger",
# "//language-support/ts/daml-types",
# "@language_support_ts_deps//immutable",
# ],
# )
jest_test(
name = "test",
# Use the js outputs because jest cannot resolve imports in the ts_library
# despite moduleNameMapper.
srcs = [":daml-react"],
jest_config = ":jest.config.js",
deps = [
"//language-support/ts/daml-ledger",
"//language-support/ts/daml-types",
"@language_support_ts_deps//immutable",
"@language_support_ts_deps//react",
"@language_support_ts_deps//react-test-renderer",
"@language_support_ts_deps//@testing-library/react-hooks",
],
)
31 changes: 31 additions & 0 deletions language-support/ts/daml-react/hooks.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) 2020 The DAML Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
import React, { ComponentType } from 'react';
import { renderHook } from '@testing-library/react-hooks';
import DamlLedger from './DamlLedger'
import { useQuery } from './hooks';
import { Template } from '@daml/types';

let mockResolveQuery: (contracts: string[]) => void = () => {
throw Error('using mockResolveQuery before init');
}

jest.mock('@daml/ledger', () => class {
query(): Promise<string[]> {
return new Promise((resolve) => mockResolveQuery = resolve);
}
});

const Foo = undefined as unknown as Template<object>;

test('useQuery', async () => {
const wrapper: ComponentType = ({children}) => React.createElement(DamlLedger, {token: 'token', party: 'party'}, children);
const {result, waitForNextUpdate} = renderHook(() => useQuery(Foo), {wrapper});
expect(result.current.contracts).toEqual([]);
expect(result.current.loading).toBe(true);
const resolvent = ['foo'];
mockResolveQuery(resolvent);
await waitForNextUpdate();
expect(result.current.contracts).toBe(resolvent);
expect(result.current.loading).toBe(false);
});
1 change: 1 addition & 0 deletions language-support/ts/daml-react/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ module.exports = {
},
moduleNameMapper: {
'^@daml/types$': '../daml-types',
'^@daml/ledger$': '../daml-ledger',
// $1 used for @daml/react/ledgerStore
'^@daml/react(.*)$': '../daml-react$1'
}
Expand Down
8 changes: 5 additions & 3 deletions language-support/ts/daml-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "React framework to interact with a DAML ledger",
"homepage": "https://daml.com",
"repository": {
"type" : "git",
"url" : "https://github.com/digital-asset/daml.git",
"type": "git",
"url": "https://github.com/digital-asset/daml.git",
"directory": "language-support/ts/daml-react"
},
"keywords": [
Expand All @@ -21,7 +21,6 @@
"dependencies": {
"@daml/ledger": "0.0.0-SDKVERSION",
"@daml/types": "0.0.0-SDKVERSION",
"@types/react": "^16.9.16",
"immutable": "^4.0.0-rc.12",
"jwt-simple": "^0.5.6",
"react": "^16.12.0"
Expand Down Expand Up @@ -53,12 +52,15 @@
}
},
"devDependencies": {
"@testing-library/react-hooks": "^3.2.1",
"@types/jest": "^24.0.23",
"@types/react": "^16.9.20",
"@typescript-eslint/eslint-plugin": "^2.16.0",
"@typescript-eslint/parser": "^2.16.0",
"eslint": "^6.8.0",
"fast-deep-equal": "^3.1.1",
"jest": "^24.9.0",
"react-test-renderer": "^16.12.0",
"ts-jest": "^24.2.0",
"typescript": "3.7.4"
}
Expand Down
4 changes: 3 additions & 1 deletion language-support/ts/packages/package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
{
"dependencies": {
"@mojotech/json-type-validation": "^3.1.0",
"@testing-library/react-hooks": "^3.2.1",
"cross-fetch": "^3.0.4",
"events": "^3.1.0",
"immutable": "^4.0.0-rc.12",
"isomorphic-ws": "^4.0.1",
"jwt-simple": "^0.5.6",
"react": "^16.12.0",
"react-test-renderer": "^16.12.0",
"typescript": "3.7.4",
"ws": "^7.2.1"
},
Expand All @@ -15,7 +17,7 @@
"@bazel/hide-bazel-files": "1.1.0",
"@bazel/typescript": "1.1.0",
"@types/jest": "^24.9.0",
"@types/react": "^16.9.16",
"@types/react": "^16.9.20",
"@types/ws": "^7.2.1",
"@typescript-eslint/eslint-plugin": "^2.16.0",
"@typescript-eslint/parser": "^2.16.0",
Expand Down
63 changes: 58 additions & 5 deletions language-support/ts/packages/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"

"@babel/runtime@^7.5.4":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308"
integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==
dependencies:
regenerator-runtime "^0.13.2"

"@babel/template@^7.4.0", "@babel/template@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8"
Expand Down Expand Up @@ -388,6 +395,14 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=

"@testing-library/react-hooks@^3.2.1":
version "3.2.1"
resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-3.2.1.tgz#19b6caa048ef15faa69d439c469033873ea01294"
integrity sha512-1OB6Ksvlk6BCJA1xpj8/WWz0XVd1qRcgqdaFAq+xeC6l61Ucj0P6QpA5u+Db/x9gU4DCX8ziR5b66Mlfg0M2RA==
dependencies:
"@babel/runtime" "^7.5.4"
"@types/testing-library__react-hooks" "^3.0.0"

"@types/babel__core@^7.1.0":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
Expand Down Expand Up @@ -478,10 +493,17 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==

"@types/react@^16.9.16":
version "16.9.19"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.19.tgz#c842aa83ea490007d29938146ff2e4d9e4360c40"
integrity sha512-LJV97//H+zqKWMms0kvxaKYJDG05U2TtQB3chRLF8MPNs+MQh/H1aGlyDUxjaHvu08EAGerdX2z4LTBc7ns77A==
"@types/react-test-renderer@*":
version "16.9.2"
resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.2.tgz#e1c408831e8183e5ad748fdece02214a7c2ab6c5"
integrity sha512-4eJr1JFLIAlWhzDkBCkhrOIWOvOxcCAfQh+jiKg7l/nNZcCIL2MHl2dZhogIFKyHzedVWHaVP1Yydq/Ruu4agw==
dependencies:
"@types/react" "*"

"@types/react@*", "@types/react@^16.9.20":
version "16.9.20"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.20.tgz#e83285766340fb1a7fafe7e5c4708c53832e3641"
integrity sha512-jRrWBr25zzEVNa4QbESKLPluvrZ3W6Odfwrfe2F5vzbrDuNvlpnHa/xbZcXg8RH5D4CE181J5VxrRrLvzRH+5A==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
Expand All @@ -491,6 +513,14 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==

"@types/testing-library__react-hooks@^3.0.0":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.2.0.tgz#52f3a109bef06080e3b1e3ae7ea1c014ce859897"
integrity sha512-dE8iMTuR5lzB+MqnxlzORlXzXyCL0EKfzH0w/lau20OpkHD37EaWjZDz0iNG8b71iEtxT4XKGmSKAGVEqk46mw==
dependencies:
"@types/react" "*"
"@types/react-test-renderer" "*"

"@types/ws@^7.2.1":
version "7.2.1"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.1.tgz#b800f2b8aee694e2b581113643e20d79dd3b8556"
Expand Down Expand Up @@ -3079,11 +3109,21 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==

react-is@^16.8.1, react-is@^16.8.4:
react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==

react-test-renderer@^16.12.0:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.12.0.tgz#11417ffda579306d4e841a794d32140f3da1b43f"
integrity sha512-Vj/teSqt2oayaWxkbhQ6gKis+t5JrknXfPVo+aIJ8QwYAqMPH77uptOdrlphyxl8eQI/rtkOYg86i/UWkpFu0w==
dependencies:
object-assign "^4.1.1"
prop-types "^15.6.2"
react-is "^16.8.6"
scheduler "^0.18.0"

react@^16.12.0:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83"
Expand Down Expand Up @@ -3117,6 +3157,11 @@ realpath-native@^1.1.0:
dependencies:
util.promisify "^1.0.0"

regenerator-runtime@^0.13.2:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==

regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
Expand Down Expand Up @@ -3331,6 +3376,14 @@ sax@^1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==

scheduler@^0.18.0:
version "0.18.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4"
integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"

"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
Expand Down