From dbca42352b4af1cd99d3019c0af4fb847fe78ab4 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 11:22:23 +0100
Subject: [PATCH 01/11] Migrate CI to Github Actions
---
.github/workflows/test.yml | 22 ++++++++++++++++++++++
.travis.yml | 26 --------------------------
Makefile | 9 ++++++++-
3 files changed, 30 insertions(+), 27 deletions(-)
create mode 100644 .github/workflows/test.yml
delete mode 100644 .travis.yml
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 00000000000..ccfcc91dcc7
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,22 @@
+name: "Test - action"
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Use Node.js LTS
+ uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - name: Install
+ run: make install
+ - name: Test
+ run: make test
+ env:
+ CI: true
+
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 8e701e2c493..00000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-dist: bionic
-services: xvfb
-
-language: node_js
-node_js:
- - 'lts/*'
-
-addons:
- chrome: stable
-
-env:
- global:
- - DISPLAY=:99.0
- - NODE_ENV=test
-
-cache:
- yarn: true
- directories:
- - ~/.cache
-
-script: make test
-
-branches:
- only:
- - master
- - next
diff --git a/Makefile b/Makefile
index c18ca9dbada..030573e03b1 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,14 @@ help:
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
install: package.json ## install dependencies
- @yarn
+ @if [ "$(CI)" != "true" ]; then \
+ echo "Full install..."; \
+ yarn; \
+ fi
+ @if [ "$(CI)" = "true" ]; then \
+ echo "Frozen install..."; \
+ yarn --frozen-lockfile; \
+ fi
run: run-simple
From 5fe596952e768c47aaf835041f405998676ee86b Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 12:13:05 +0100
Subject: [PATCH 02/11] Parallelize tests
---
.github/workflows/test.yml | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ccfcc91dcc7..7f9b6e3a879 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -3,9 +3,8 @@ name: "Test - action"
on: [push, pull_request]
jobs:
- build:
+ setup:
runs-on: ubuntu-latest
-
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -15,8 +14,26 @@ jobs:
node-version: '14.x'
- name: Install
run: make install
- - name: Test
- run: make test
+
+ build:
+ needs: setup
+ - run: make build
+
+ lint:
+ needs: setup
+ - run: make lint
+
+ unit-test:
+ needs: build
+ steps:
+ - run: make test-unit
+ env:
+ CI: true
+
+ e2e-test:
+ needs: build
+ steps:
+ - run: make test-e2e
env:
CI: true
From 55f9ae2f97ddb3274936d1fb0775579bdc120f12 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 12:14:33 +0100
Subject: [PATCH 03/11] Fix workflow
---
.github/workflows/test.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 7f9b6e3a879..aab1e62af6e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -17,10 +17,12 @@ jobs:
build:
needs: setup
+ steps:
- run: make build
lint:
needs: setup
+ steps:
- run: make lint
unit-test:
From 9256d29dafb0819ed0e6ecde82174b102c65b6ae Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 12:15:33 +0100
Subject: [PATCH 04/11] Fix workflow
---
.github/workflows/test.yml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index aab1e62af6e..11b571f960b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -16,16 +16,19 @@ jobs:
run: make install
build:
+ runs-on: ubuntu-latest
needs: setup
steps:
- run: make build
lint:
+ runs-on: ubuntu-latest
needs: setup
steps:
- run: make lint
unit-test:
+ runs-on: ubuntu-latest
needs: build
steps:
- run: make test-unit
@@ -33,6 +36,7 @@ jobs:
CI: true
e2e-test:
+ runs-on: ubuntu-latest
needs: build
steps:
- run: make test-e2e
From 70f42059679db04fe0f0c8647d951e564369a25c Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 14:35:18 +0100
Subject: [PATCH 05/11] Revert to two jobs
---
.github/workflows/test.yml | 40 ++++++++++++++++++--------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 11b571f960b..e473ec5c125 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -3,7 +3,7 @@ name: "Test - action"
on: [push, pull_request]
jobs:
- setup:
+ unit-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -14,32 +14,30 @@ jobs:
node-version: '14.x'
- name: Install
run: make install
-
- build:
- runs-on: ubuntu-latest
- needs: setup
- steps:
- - run: make build
-
- lint:
- runs-on: ubuntu-latest
- needs: setup
- steps:
- - run: make lint
-
- unit-test:
- runs-on: ubuntu-latest
- needs: build
- steps:
- - run: make test-unit
+ - name: Build
+ run: make build
+ - name: Lint
+ run: make lint
+ - name: Unit Tests
+ run: make test-unit
env:
CI: true
e2e-test:
runs-on: ubuntu-latest
- needs: build
steps:
- - run: make test-e2e
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Use Node.js LTS
+ uses: actions/setup-node@v1
+ with:
+ node-version: '14.x'
+ - name: Install
+ run: make install
+ - name: Build
+ run: make build
+ - name: e2e Tests
+ run: make test-e2e
env:
CI: true
From 19eafe883ae2a5a725a237defb96eb6829d036ba Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 14:46:27 +0100
Subject: [PATCH 06/11] Make tests fail
---
cypress/integration/auth.js | 2 +-
packages/ra-core/src/auth/Authenticated.spec.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/cypress/integration/auth.js b/cypress/integration/auth.js
index 8a5454808cb..d3b7add1b12 100644
--- a/cypress/integration/auth.js
+++ b/cypress/integration/auth.js
@@ -8,7 +8,7 @@ describe('Authentication', () => {
it('should go to login page after logout', () => {
ListPage.navigate();
ListPage.logout();
- cy.url().then(url => expect(url).to.contain('/#/login'));
+ cy.url().then(url => expect(url).to.contain('/#/login_fail'));
});
it('should redirect to login page when not logged in', () => {
diff --git a/packages/ra-core/src/auth/Authenticated.spec.tsx b/packages/ra-core/src/auth/Authenticated.spec.tsx
index 15ab116d66b..e65fbb46719 100644
--- a/packages/ra-core/src/auth/Authenticated.spec.tsx
+++ b/packages/ra-core/src/auth/Authenticated.spec.tsx
@@ -20,7 +20,7 @@ describe('', () => {
);
- expect(queryByText('Foo')).toBeDefined();
+ expect(queryByText('Foo_failed')).toBeDefined();
await wait();
expect(dispatch).toHaveBeenCalledTimes(0);
});
From b144c55ced659b13ddde653183dfe0fffc6ae7ac Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 15:13:21 +0100
Subject: [PATCH 07/11] Fix false positive tests
---
.../ra-core/src/auth/Authenticated.spec.tsx | 2 +-
.../src/controller/useListContext.spec.tsx | 4 ++--
.../ra-core/src/core/CoreAdminRouter.spec.tsx | 24 +++++++++----------
packages/ra-core/src/core/Resource.spec.tsx | 10 ++++----
.../ra-core/src/form/ValidationError.spec.tsx | 6 ++---
.../src/field/ReferenceArrayField.spec.tsx | 12 +++++-----
.../src/field/ReferenceField.spec.tsx | 2 +-
.../src/form/SimpleFormIterator.spec.tsx | 6 ++---
.../src/input/InputHelperText.spec.tsx | 6 ++---
.../src/input/RadioButtonGroupInput.spec.tsx | 2 +-
.../list/datagrid/DatagridHeaderCell.spec.tsx | 2 +-
11 files changed, 38 insertions(+), 38 deletions(-)
diff --git a/packages/ra-core/src/auth/Authenticated.spec.tsx b/packages/ra-core/src/auth/Authenticated.spec.tsx
index e65fbb46719..3df5622a8ff 100644
--- a/packages/ra-core/src/auth/Authenticated.spec.tsx
+++ b/packages/ra-core/src/auth/Authenticated.spec.tsx
@@ -20,7 +20,7 @@ describe('', () => {
);
- expect(queryByText('Foo_failed')).toBeDefined();
+ expect(queryByText('Failed')).not.toBeNull();
await wait();
expect(dispatch).toHaveBeenCalledTimes(0);
});
diff --git a/packages/ra-core/src/controller/useListContext.spec.tsx b/packages/ra-core/src/controller/useListContext.spec.tsx
index eddf9c337cd..401a842a3e1 100644
--- a/packages/ra-core/src/controller/useListContext.spec.tsx
+++ b/packages/ra-core/src/controller/useListContext.spec.tsx
@@ -32,7 +32,7 @@ describe('useListContext', () => {
);
- expect(getByText('hello')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
});
it('should return injected props if the context was not set', () => {
@@ -44,6 +44,6 @@ describe('useListContext', () => {
data={{ 1: { id: 1, title: 'hello' } }}
/>
);
- expect(getByText('hello')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
});
});
diff --git a/packages/ra-core/src/core/CoreAdminRouter.spec.tsx b/packages/ra-core/src/core/CoreAdminRouter.spec.tsx
index 9da840d60ca..5677b371089 100644
--- a/packages/ra-core/src/core/CoreAdminRouter.spec.tsx
+++ b/packages/ra-core/src/core/CoreAdminRouter.spec.tsx
@@ -35,11 +35,11 @@ describe('', () => {
);
- expect(getByText('Layout')).toBeDefined();
+ expect(getByText('Layout')).not.toBeNull();
history.push('/posts');
- expect(getByText('PostList')).toBeDefined();
+ expect(getByText('PostList')).not.toBeNull();
history.push('/comments');
- expect(getByText('CommentList')).toBeDefined();
+ expect(getByText('CommentList')).not.toBeNull();
});
});
@@ -63,11 +63,11 @@ describe('', () => {
);
await new Promise(resolve => setTimeout(resolve, 10));
- expect(getByText('Layout')).toBeDefined();
+ expect(getByText('Layout')).not.toBeNull();
history.push('/posts');
- expect(getByText('PostList')).toBeDefined();
+ expect(getByText('PostList')).not.toBeNull();
history.push('/comments');
- expect(getByText('CommentList')).toBeDefined();
+ expect(getByText('CommentList')).not.toBeNull();
});
});
@@ -105,11 +105,11 @@ describe('', () => {
);
// Timeout needed because of the authProvider call
await wait();
- expect(getByText('Layout')).toBeDefined();
+ expect(getByText('Layout')).not.toBeNull();
history.push('/posts');
- expect(getByText('PostList')).toBeDefined();
+ expect(getByText('PostList')).not.toBeNull();
history.push('/comments');
- expect(getByText('CommentList')).toBeDefined();
+ expect(getByText('CommentList')).not.toBeNull();
});
});
@@ -142,9 +142,9 @@ describe('', () => {
);
history.push('/foo');
expect(queryByText('Layout')).toBeNull();
- expect(getByText('Foo')).toBeDefined();
+ expect(getByText('Foo')).not.toBeNull();
history.push('/bar');
- expect(getByText('Layout')).toBeDefined();
- expect(getByText('Bar')).toBeDefined();
+ expect(getByText('Layout')).not.toBeNull();
+ expect(getByText('Bar')).not.toBeNull();
});
});
diff --git a/packages/ra-core/src/core/Resource.spec.tsx b/packages/ra-core/src/core/Resource.spec.tsx
index 7ff227cef8e..ae4de7a9017 100644
--- a/packages/ra-core/src/core/Resource.spec.tsx
+++ b/packages/ra-core/src/core/Resource.spec.tsx
@@ -69,13 +69,13 @@ describe('', () => {
{ admin: { resources: { posts: {} } } }
);
history.push('/posts');
- expect(getByText('PostList')).toBeDefined();
+ expect(getByText('PostList')).not.toBeNull();
history.push('/posts/123');
- expect(getByText('PostEdit')).toBeDefined();
+ expect(getByText('PostEdit')).not.toBeNull();
history.push('/posts/123/show');
- expect(getByText('PostShow')).toBeDefined();
+ expect(getByText('PostShow')).not.toBeNull();
history.push('/posts/create');
- expect(getByText('PostCreate')).toBeDefined();
+ expect(getByText('PostCreate')).not.toBeNull();
});
it('injects permissions to the resource routes', async () => {
const history = createMemoryHistory();
@@ -108,6 +108,6 @@ describe('', () => {
);
history.push('/posts');
await wait();
- expect(getByText('Permissions: admin')).toBeDefined();
+ expect(getByText('Permissions: admin')).not.toBeNull();
});
});
diff --git a/packages/ra-core/src/form/ValidationError.spec.tsx b/packages/ra-core/src/form/ValidationError.spec.tsx
index 020f2848f38..f230ce499fa 100644
--- a/packages/ra-core/src/form/ValidationError.spec.tsx
+++ b/packages/ra-core/src/form/ValidationError.spec.tsx
@@ -76,7 +76,7 @@ describe('ValidationError', () => {
/>
);
- expect(getByText('Min Value 10')).toBeDefined();
+ expect(getByText('Min Value 10')).not.toBeNull();
});
it('renders the error message translated if it is an object, interpolating strings', () => {
@@ -89,7 +89,7 @@ describe('ValidationError', () => {
/>
);
- expect(getByText('Must match IAmMatch')).toBeDefined();
+ expect(getByText('Must match IAmMatch')).not.toBeNull();
});
it('renders the error message translated if it is an object, interpolating arrays', () => {
@@ -102,6 +102,6 @@ describe('ValidationError', () => {
/>
);
- expect(getByText('Must be one of foo,bar')).toBeDefined();
+ expect(getByText('Must be one of foo,bar')).not.toBeNull();
});
});
diff --git a/packages/ra-ui-materialui/src/field/ReferenceArrayField.spec.tsx b/packages/ra-ui-materialui/src/field/ReferenceArrayField.spec.tsx
index eedea2c4019..d6e3526113f 100644
--- a/packages/ra-ui-materialui/src/field/ReferenceArrayField.spec.tsx
+++ b/packages/ra-ui-materialui/src/field/ReferenceArrayField.spec.tsx
@@ -67,8 +67,8 @@ describe('', () => {
);
expect(queryAllByRole('progressbar')).toHaveLength(0);
expect(container.firstChild.textContent).not.toBeUndefined();
- expect(getByText('hello')).toBeDefined();
- expect(getByText('world')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
+ expect(getByText('world')).not.toBeNull();
});
it('should render nothing when there are no related records', () => {
@@ -129,8 +129,8 @@ describe('', () => {
);
expect(queryAllByRole('progressbar')).toHaveLength(0);
expect(container.firstChild.textContent).not.toBeUndefined();
- expect(getByText('hello')).toBeDefined();
- expect(getByText('world')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
+ expect(getByText('world')).not.toBeNull();
});
it('should support record with number identifier', () => {
@@ -165,8 +165,8 @@ describe('', () => {
);
expect(queryAllByRole('progressbar')).toHaveLength(0);
expect(container.firstChild.textContent).not.toBeUndefined();
- expect(getByText('hello')).toBeDefined();
- expect(getByText('world')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
+ expect(getByText('world')).not.toBeNull();
});
it('should use custom className', () => {
diff --git a/packages/ra-ui-materialui/src/field/ReferenceField.spec.tsx b/packages/ra-ui-materialui/src/field/ReferenceField.spec.tsx
index 3725fddcf24..c7a2fc93bd7 100644
--- a/packages/ra-ui-materialui/src/field/ReferenceField.spec.tsx
+++ b/packages/ra-ui-materialui/src/field/ReferenceField.spec.tsx
@@ -164,7 +164,7 @@ describe('', () => {
},
}
);
- expect(getByText('hello')).toBeDefined();
+ expect(getByText('hello')).not.toBeNull();
const links = container.getElementsByTagName('a');
expect(links).toHaveLength(1);
expect(links.item(0).href).toBe('http://localhost/posts/123');
diff --git a/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx b/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
index 40c1033b855..a674ba01f3c 100644
--- a/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
+++ b/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
@@ -44,7 +44,7 @@ describe('', () => {
);
- expect(getByText('ra.action.add')).toBeDefined();
+ expect(getByText('ra.action.add')).not.toBeNull();
});
it('should not display add button if disableAdd is truthy', () => {
@@ -334,7 +334,7 @@ describe('', () => {
);
- expect(getByText('Custom Add Button')).toBeDefined();
+ expect(getByText('Custom Add Button')).not.toBeNull();
});
it('should display the custom remove button', () => {
@@ -360,7 +360,7 @@ describe('', () => {
);
- expect(getByText('Custom Remove Button')).toBeDefined();
+ expect(getByText('Custom Remove Button')).not.toBeNull();
});
it('should call the onClick method when the custom add button is clicked', async () => {
diff --git a/packages/ra-ui-materialui/src/input/InputHelperText.spec.tsx b/packages/ra-ui-materialui/src/input/InputHelperText.spec.tsx
index ca16c245cee..fcc491f1751 100644
--- a/packages/ra-ui-materialui/src/input/InputHelperText.spec.tsx
+++ b/packages/ra-ui-materialui/src/input/InputHelperText.spec.tsx
@@ -18,7 +18,7 @@ describe('InputHelperText', () => {
);
- expect(getByText('Please help!')).toBeDefined();
+ expect(getByText('Please help!')).not.toBeNull();
});
it('renders the helperText when there is an error but the input has not been touched yet', () => {
@@ -30,7 +30,7 @@ describe('InputHelperText', () => {
/>
);
- expect(getByText('Please help!')).toBeDefined();
+ expect(getByText('Please help!')).not.toBeNull();
expect(queryByText('Crap!')).toBeNull();
});
@@ -40,6 +40,6 @@ describe('InputHelperText', () => {
);
expect(queryByText('Please help!')).toBeNull();
- expect(getByText('Crap!')).toBeDefined();
+ expect(getByText('Crap!')).not.toBeNull();
});
});
diff --git a/packages/ra-ui-materialui/src/input/RadioButtonGroupInput.spec.tsx b/packages/ra-ui-materialui/src/input/RadioButtonGroupInput.spec.tsx
index da788ab11e2..aa554857cff 100644
--- a/packages/ra-ui-materialui/src/input/RadioButtonGroupInput.spec.tsx
+++ b/packages/ra-ui-materialui/src/input/RadioButtonGroupInput.spec.tsx
@@ -343,7 +343,7 @@ describe('', () => {
fireEvent.blur(input);
- expect(getByText('ra.validation.error')).toBeDefined();
+ expect(getByText('ra.validation.error')).not.toBeNull();
});
it('should be displayed even with an helper Text', () => {
diff --git a/packages/ra-ui-materialui/src/list/datagrid/DatagridHeaderCell.spec.tsx b/packages/ra-ui-materialui/src/list/datagrid/DatagridHeaderCell.spec.tsx
index ab236d6bf82..3ca385d293a 100644
--- a/packages/ra-ui-materialui/src/list/datagrid/DatagridHeaderCell.spec.tsx
+++ b/packages/ra-ui-materialui/src/list/datagrid/DatagridHeaderCell.spec.tsx
@@ -23,7 +23,7 @@ describe('', () => {
);
- expect(getByText('Label')).toBeDefined();
+ expect(getByText('Label')).not.toBeNull();
});
describe('sorting on a column', () => {
From 6906a74ea0d8f88278b063d3726e4beda056f987 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 15:30:03 +0100
Subject: [PATCH 08/11] Restore valid tests
---
cypress/integration/auth.js | 2 +-
packages/ra-core/src/auth/Authenticated.spec.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/cypress/integration/auth.js b/cypress/integration/auth.js
index d3b7add1b12..8a5454808cb 100644
--- a/cypress/integration/auth.js
+++ b/cypress/integration/auth.js
@@ -8,7 +8,7 @@ describe('Authentication', () => {
it('should go to login page after logout', () => {
ListPage.navigate();
ListPage.logout();
- cy.url().then(url => expect(url).to.contain('/#/login_fail'));
+ cy.url().then(url => expect(url).to.contain('/#/login'));
});
it('should redirect to login page when not logged in', () => {
diff --git a/packages/ra-core/src/auth/Authenticated.spec.tsx b/packages/ra-core/src/auth/Authenticated.spec.tsx
index 3df5622a8ff..8e2a6bc271c 100644
--- a/packages/ra-core/src/auth/Authenticated.spec.tsx
+++ b/packages/ra-core/src/auth/Authenticated.spec.tsx
@@ -20,7 +20,7 @@ describe('', () => {
);
- expect(queryByText('Failed')).not.toBeNull();
+ expect(queryByText('Foo')).not.toBeNull();
await wait();
expect(dispatch).toHaveBeenCalledTimes(0);
});
From 76e694fd052a4c29dffe31453eecd42850b933e5 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 16:55:00 +0100
Subject: [PATCH 09/11] Fix some test warnings
---
.../details/useEditController.spec.tsx | 204 ++++++++++--------
.../src/button/SaveButton.spec.tsx | 6 +-
.../src/form/FormTab.spec.tsx | 6 +-
.../src/form/SimpleForm.spec.tsx | 6 +-
.../src/form/SimpleFormIterator.spec.tsx | 6 +-
.../src/form/TabbedForm.spec.tsx | 6 +-
6 files changed, 142 insertions(+), 92 deletions(-)
diff --git a/packages/ra-core/src/controller/details/useEditController.spec.tsx b/packages/ra-core/src/controller/details/useEditController.spec.tsx
index ae328c349c4..0dc120bee3f 100644
--- a/packages/ra-core/src/controller/details/useEditController.spec.tsx
+++ b/packages/ra-core/src/controller/details/useEditController.spec.tsx
@@ -6,6 +6,7 @@ import { EditController } from './EditController';
import renderWithRedux from '../../util/renderWithRedux';
import { DataProviderContext } from '../../dataProvider';
import { DataProvider } from '../../types';
+import { SaveContextProvider } from '../../../esm';
describe('useEditController', () => {
afterEach(cleanup);
@@ -21,6 +22,11 @@ describe('useEditController', () => {
debounce: 200,
};
+ const saveContextValue = {
+ save: jest.fn(),
+ setOnFailure: jest.fn(),
+ };
+
it('should call the dataProvider.getOne() function on mount', async () => {
const getOne = jest
.fn()
@@ -30,9 +36,11 @@ describe('useEditController', () => {
const dataProvider = ({ getOne } as unknown) as DataProvider;
const { queryAllByText } = renderWithRedux(
-
- {({ record }) => {record && record.title}
}
-
+
+
+ {({ record }) => {record && record.title}
}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -48,9 +56,11 @@ describe('useEditController', () => {
} as unknown) as DataProvider;
const { dispatch } = renderWithRedux(
-
- {({ record }) => {record && record.title}
}
-
+
+
+ {({ record }) => {record && record.title}
}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -66,9 +76,11 @@ describe('useEditController', () => {
} as unknown) as DataProvider;
const { queryAllByText } = renderWithRedux(
-
- {({ record }) => {record && record.title}
}
-
+
+
+ {({ record }) => {record && record.title}
}
+
+
,
{
admin: {
@@ -94,12 +106,14 @@ describe('useEditController', () => {
let saveCallback;
renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -120,12 +134,14 @@ describe('useEditController', () => {
let saveCallback;
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -152,12 +168,14 @@ describe('useEditController', () => {
} as unknown) as DataProvider;
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -193,16 +211,18 @@ describe('useEditController', () => {
const onSuccess = jest.fn();
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -225,16 +245,18 @@ describe('useEditController', () => {
const onSuccessSave = jest.fn();
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -261,16 +283,18 @@ describe('useEditController', () => {
const onFailure = jest.fn();
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -293,16 +317,18 @@ describe('useEditController', () => {
const onFailureSave = jest.fn();
const { dispatch } = renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -336,16 +362,18 @@ describe('useEditController', () => {
}));
renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
@@ -378,16 +406,18 @@ describe('useEditController', () => {
}));
renderWithRedux(
-
- {({ save }) => {
- saveCallback = save;
- return null;
- }}
-
+
+
+ {({ save }) => {
+ saveCallback = save;
+ return null;
+ }}
+
+
,
{ admin: { resources: { posts: { data: {} } } } }
);
diff --git a/packages/ra-ui-materialui/src/button/SaveButton.spec.tsx b/packages/ra-ui-materialui/src/button/SaveButton.spec.tsx
index a7ab42282ff..a1ed18bdbd3 100644
--- a/packages/ra-ui-materialui/src/button/SaveButton.spec.tsx
+++ b/packages/ra-ui-materialui/src/button/SaveButton.spec.tsx
@@ -37,7 +37,11 @@ const invalidButtonDomProps = {
describe('', () => {
afterEach(cleanup);
- const saveContextValue = { save: jest.fn(), saving: false };
+ const saveContextValue = {
+ save: jest.fn(),
+ saving: false,
+ setOnFailure: jest.fn(),
+ };
it('should render as submit type with no DOM errors', () => {
const spy = jest.spyOn(console, 'error').mockImplementation(() => {});
diff --git a/packages/ra-ui-materialui/src/form/FormTab.spec.tsx b/packages/ra-ui-materialui/src/form/FormTab.spec.tsx
index 8a67c9bad86..cae397a9b0a 100644
--- a/packages/ra-ui-materialui/src/form/FormTab.spec.tsx
+++ b/packages/ra-ui-materialui/src/form/FormTab.spec.tsx
@@ -14,7 +14,11 @@ import TextInput from '../input/TextInput';
describe('', () => {
afterEach(cleanup);
- const saveContextValue = { save: jest.fn(), saving: false };
+ const saveContextValue = {
+ save: jest.fn(),
+ saving: false,
+ setOnFailure: jest.fn(),
+ };
const sideEffectValue = {};
it('should display ', () => {
diff --git a/packages/ra-ui-materialui/src/form/SimpleForm.spec.tsx b/packages/ra-ui-materialui/src/form/SimpleForm.spec.tsx
index a4ea3bb89f2..699a5753208 100644
--- a/packages/ra-ui-materialui/src/form/SimpleForm.spec.tsx
+++ b/packages/ra-ui-materialui/src/form/SimpleForm.spec.tsx
@@ -13,7 +13,11 @@ import TextInput from '../input/TextInput';
describe('', () => {
afterEach(cleanup);
- const saveContextValue = { save: jest.fn(), saving: false };
+ const saveContextValue = {
+ save: jest.fn(),
+ saving: false,
+ setOnFailure: jest.fn(),
+ };
const sideEffects = {};
it('should embed a form with given component children', () => {
diff --git a/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx b/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
index a674ba01f3c..e55cce6a2ab 100644
--- a/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
+++ b/packages/ra-ui-materialui/src/form/SimpleFormIterator.spec.tsx
@@ -26,7 +26,11 @@ describe('', () => {
afterEach(cleanup);
- const saveContextValue = { save: jest.fn(), saving: false };
+ const saveContextValue = {
+ save: jest.fn(),
+ saving: false,
+ setOnFailure: jest.fn(),
+ };
const sideEffectValue = {};
it('should display an add item button at least', () => {
diff --git a/packages/ra-ui-materialui/src/form/TabbedForm.spec.tsx b/packages/ra-ui-materialui/src/form/TabbedForm.spec.tsx
index 04279094c5e..6a21de0dfd3 100644
--- a/packages/ra-ui-materialui/src/form/TabbedForm.spec.tsx
+++ b/packages/ra-ui-materialui/src/form/TabbedForm.spec.tsx
@@ -14,7 +14,11 @@ import FormTab from './FormTab';
describe('', () => {
afterEach(cleanup);
- const saveContextValue = { save: jest.fn(), saving: false };
+ const saveContextValue = {
+ save: jest.fn(),
+ saving: false,
+ setOnFailure: jest.fn(),
+ };
const sideEffectValue = {};
it('should display the tabs', () => {
From 2c5a24c6b2448609e81eb6c97cfd94658b13d794 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 16:55:21 +0100
Subject: [PATCH 10/11] Silence ResourceContext hook warning for now
---
packages/ra-core/src/core/useResourceContext.ts | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/packages/ra-core/src/core/useResourceContext.ts b/packages/ra-core/src/core/useResourceContext.ts
index 71212678d34..eca9c0e7f42 100644
--- a/packages/ra-core/src/core/useResourceContext.ts
+++ b/packages/ra-core/src/core/useResourceContext.ts
@@ -23,9 +23,10 @@ export const useResourceContext = <
* @deprecated - to be removed in 4.0
*/
if (process.env.NODE_ENV !== 'production') {
- console.warn(
- "Any react-admin components must be used inside a . Relying on props rather than context to get the resource data is deprecated and won't be supported in the next major version of react-admin."
- );
+ // Restore this message when ResourceContext is actually used
+ // console.warn(
+ // "Any react-admin components must be used inside a . Relying on props rather than context to get the resource data is deprecated and won't be supported in the next major version of react-admin."
+ // );
}
// Ignored because resource is often optional (as it is injected) in components which passes the props to this hook
return props.resource;
From 68e635ca1d6d1cacd7ae403d7bb1a7e47ada3248 Mon Sep 17 00:00:00 2001
From: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Date: Tue, 10 Nov 2020 16:55:45 +0100
Subject: [PATCH 11/11] Add cache on CI + ensure to only run it when needed
---
.github/workflows/test.yml | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index e473ec5c125..be498c39a82 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,6 +1,11 @@
name: "Test - action"
-on: [push, pull_request]
+on:
+ push:
+ branches:
+ - main
+ - next
+ pull_request:
jobs:
unit-test:
@@ -12,8 +17,7 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: '14.x'
- - name: Install
- run: make install
+ - uses: bahmutov/npm-install@v1
- name: Build
run: make build
- name: Lint
@@ -32,8 +36,7 @@ jobs:
uses: actions/setup-node@v1
with:
node-version: '14.x'
- - name: Install
- run: make install
+ - uses: bahmutov/npm-install@v1
- name: Build
run: make build
- name: e2e Tests