diff --git a/packages/client/src/login/LoginForm.test.tsx b/packages/client/src/login/LoginForm.test.tsx
index 66d3abd..0a0df32 100644
--- a/packages/client/src/login/LoginForm.test.tsx
+++ b/packages/client/src/login/LoginForm.test.tsx
@@ -15,18 +15,21 @@ describe('LoginForm', () => {
const createTestProvider = () => test.withProvider({
reducers: {Login: Feature.Login},
- connector: new Feature.LoginConnector(loginActions),
select: state => state.Login,
- customJSX: (Component, props) =>
- ,
})
+ .withComponent(
+ select => new Feature.LoginConnector(loginActions).connect(select),
+ )
+ .withJSX((Component, props) =>
+ ,
+ )
beforeAll(() => {
(window as any).__MOCK_SERVER_SIDE__ = true
})
it('should render', () => {
- createTestProvider().render()
+ createTestProvider().render({})
})
describe('submit', () => {
diff --git a/packages/client/src/login/RegisterForm.test.tsx b/packages/client/src/login/RegisterForm.test.tsx
index 3a9ed7c..84bd021 100644
--- a/packages/client/src/login/RegisterForm.test.tsx
+++ b/packages/client/src/login/RegisterForm.test.tsx
@@ -13,16 +13,18 @@ describe('RegisterForm', () => {
const createTestProvider = () => test.withProvider({
reducers: {Login: Feature.Login},
- connector: new Feature.RegisterConnector(loginActions),
select: state => state.Login,
})
+ .withComponent(
+ select => new Feature.RegisterConnector(loginActions).connect(select),
+ )
beforeAll(() => {
(window as any).__MOCK_SERVER_SIDE__ = true
})
it('should render', () => {
- createTestProvider().render()
+ createTestProvider().render({})
})
describe('submit', () => {
diff --git a/packages/client/src/team/TeamConnector.test.ts b/packages/client/src/team/TeamConnector.test.tsx
similarity index 56%
rename from packages/client/src/team/TeamConnector.test.ts
rename to packages/client/src/team/TeamConnector.test.tsx
index 5d7c951..30ad51b 100644
--- a/packages/client/src/team/TeamConnector.test.ts
+++ b/packages/client/src/team/TeamConnector.test.tsx
@@ -2,7 +2,8 @@ import * as Feature from './'
// export ReactDOM from 'react-dom'
// import T from 'react-dom/test-utils'
import {HTTPClientMock, TestUtils/*, getError*/} from '../test-utils'
-import {IAPIDef, ITeam} from '@rondo/common'
+import {IAPIDef, ITeam, IUserInTeam} from '@rondo/common'
+import React from 'react'
const test = new TestUtils()
@@ -13,18 +14,37 @@ describe('TeamConnector', () => {
const createTestProvider = () => test.withProvider({
reducers: {Team: Feature.Team},
- connector: new Feature.TeamConnector(teamActions),
select: state => state.Team,
})
+ .withComponent(select =>
+ new Feature
+ .TeamConnector(teamActions)
+ .connect(select))
+ .withJSX((Component, props) => )
const teams: ITeam[] = [{id: 100, name: 'my-team', userId: 1}]
+ const users: IUserInTeam[] = [{
+ teamId: 123,
+ userId: 1,
+ displayName: 'test test',
+ roleId: 1,
+ roleName: 'ADMIN',
+ }]
+
it('it fetches user teams on render', async () => {
http.mockAdd({
method: 'get',
url: '/my/teams',
}, teams)
- const {node} = createTestProvider().render()
+ http.mockAdd({
+ method: 'get',
+ url: '/teams/:teamId/users',
+ params: {
+ teamId: 123,
+ },
+ }, users)
+ const {node} = createTestProvider().render({editTeamId: 123})
await http.wait()
expect(node.innerHTML).toContain('my-team')
})
diff --git a/packages/client/src/test-utils/TestUtils.tsx b/packages/client/src/test-utils/TestUtils.tsx
index dee4cf1..f265c7a 100644
--- a/packages/client/src/test-utils/TestUtils.tsx
+++ b/packages/client/src/test-utils/TestUtils.tsx
@@ -1,7 +1,7 @@
import React from 'react'
import ReactDOM from 'react-dom'
import T from 'react-dom/test-utils'
-import {Connector, IStateSelector} from '../redux'
+import {IStateSelector} from '../redux'
import {Provider} from 'react-redux'
import {createStore} from '../store'
import {
@@ -13,15 +13,16 @@ import {
combineReducers,
} from 'redux'
-interface IRenderParams {
+interface IRenderParams {
reducers: ReducersMapObject
state?: DeepPartial
- connector: Connector
- select: IStateSelector
- customJSX?: (
- Component: React.ComponentType,
- additionalProps: Record,
- ) => JSX.Element
+ select: IStateSelector
+ // getComponent: (
+ // select: IStateSelector) => React.ComponentType,
+ // customJSX?: (
+ // Component: React.ComponentType,
+ // props: Props,
+ // ) => JSX.Element
}
export class TestUtils {
@@ -47,29 +48,54 @@ export class TestUtils {
* Creates a redux store, connects a component, and provides the `render`
* method to render the connected component with a `Provider`.
*/
- withProvider = AnyAction>(
- params: IRenderParams,
+ withProvider = AnyAction>(
+ params: IRenderParams,
) {
+ const {reducers, state, select} = params
+
const store = this.createStore({
- reducer: this.combineReducers(params.reducers),
- })(params.state)
- const Component = params.connector.connect(params.select)
+ reducer: this.combineReducers(reducers),
+ })(state)
- const render = (additionalProps: Record = {}) => {
- const jsx = params.customJSX
- ? params.customJSX(Component, additionalProps)
- :
- return this.render(
-
- {jsx}
- ,
- )
+ const withComponent = (
+ getComponent: (select: IStateSelector) =>
+ React.ComponentType,
+ ) => {
+ const Component = getComponent(select)
+
+ type CreateJSX = (
+ Component: React.ComponentType,
+ props: Props,
+ ) => JSX.Element
+
+ let createJSX: CreateJSX | undefined
+
+ const render = (props: Props) => {
+ const jsx = createJSX
+ ? createJSX(Component, props)
+ :
+ return this.render(
+
+ {jsx}
+ ,
+ )
+ }
+
+ const withJSX = (localCreateJSX: CreateJSX) => {
+ createJSX = localCreateJSX
+ return self
+ }
+
+ const self = {
+ render,
+ store,
+ Component,
+ withJSX,
+ }
+
+ return self
}
- return {
- render,
- store,
- Component,
- }
+ return {withComponent}
}
}