From cbe411b842f05db2951a7813640ae30c605e7b13 Mon Sep 17 00:00:00 2001 From: Alexander Smith Date: Tue, 8 May 2018 11:08:49 -0700 Subject: [PATCH 1/2] Update Token types and add sanity test --- package.json | 1 + src/__tests__/index.node.js | 69 ++++++++++++++++++++++++++++++++++++- src/browser.js | 1 - src/tokens.js | 10 +++--- yarn.lock | 10 +++++- 5 files changed, 83 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d2372b0..1de8e7b 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "eslint-plugin-react": "7.7.0", "flow-bin": "^0.71.0", "fusion-core": "^1.2.6", + "fusion-test-utils": "^1.0.5", "fusion-tokens": "^1.0.3", "nyc": "^11.7.1", "prettier": "^1.12.1", diff --git a/src/__tests__/index.node.js b/src/__tests__/index.node.js index 38d0ed6..6a4e9b9 100644 --- a/src/__tests__/index.node.js +++ b/src/__tests__/index.node.js @@ -8,10 +8,14 @@ import tape from 'tape-cup'; import React from 'react'; +import type {Reducer, StoreEnhancer} from 'redux'; -import {consumeSanitizedHTML} from 'fusion-core'; +import App, {consumeSanitizedHTML, createPlugin} from 'fusion-core'; +import type {FusionPlugin} from 'fusion-core'; +import {getSimulator} from 'fusion-test-utils'; import Redux from '../index.js'; +import {EnhancerToken, ReducerToken, ReduxToken} from '../tokens.js'; tape('interface', async t => { const ctx = {memoized: new Map()}; @@ -110,6 +114,69 @@ tape('enhancers', async t => { t.end(); }); +const testEnhancer = async ( + t: tape$Context, + enhancer: StoreEnhancer<*, *, *> | FusionPlugin<*, StoreEnhancer<*, *, *>> +): Promise => { + const app = new App('el', el => el); + const mockReducer: Reducer<*, *> = s => s; + + app.register(EnhancerToken, enhancer); + app.register(ReducerToken, mockReducer); + app.register(ReduxToken, Redux); + + const testPlugin = createPlugin({ + deps: { + redux: ReduxToken, + }, + middleware({redux}) { + return async (ctx, next) => { + const reduxScoped = redux.from(ctx); + + if (!reduxScoped.initStore) { + t.fail(); + t.end(); + return; + } + + const store = await reduxScoped.initStore(); + // $FlowFixMe + t.equals(store.mock, true, '[Final store] ctx provided by ctxEnhancer'); + + return next(); + }; + }, + }); + app.register(testPlugin); + + const simulator = getSimulator(app); + await simulator.render('/'); +}; + +tape('enhancers - via app.register', async t => { + /* Enhancer function */ + const myEnhancer: StoreEnhancer<*, *, *> = createStore => (...args) => { + const store = createStore(...args); + // $FlowFixMe + store.mock = true; + return store; + }; + await testEnhancer(t, myEnhancer); + + /* Enhancer plugin */ + const myEnhancerPlugin: FusionPlugin< + *, + StoreEnhancer<*, *, *> + > = createPlugin({ + provides() { + return myEnhancer; + }, + }); + await testEnhancer(t, myEnhancerPlugin); + + t.end(); +}); + tape('serialization', async t => { const reducer = (state, action) => ({ test: action.payload || 1, diff --git a/src/browser.js b/src/browser.js index 1c7b619..de0d3f7 100644 --- a/src/browser.js +++ b/src/browser.js @@ -54,7 +54,6 @@ const getPlugin = () => { window.__REDUX_DEVTOOLS_EXTENSION__ && // $FlowFixMe __REDUX_DEVTOOLS_EXTENSION__(); - const enhancers = [enhancer, ctxEnhancer(ctx), devTool].filter( Boolean ); diff --git a/src/tokens.js b/src/tokens.js index 07f9340..5111a26 100644 --- a/src/tokens.js +++ b/src/tokens.js @@ -9,15 +9,15 @@ import type {Reducer, StoreEnhancer, Store} from 'redux'; import {createToken} from 'fusion-core'; -import type {FusionPlugin, Token, Context} from 'fusion-core'; +import type {Token, Context} from 'fusion-core'; -import type {ReactReduxDepsType, ReactReduxServiceType} from './types.js'; +import type {ReactReduxServiceType} from './types.js'; type InitialStateType = (ctx?: Context) => Promise>; -export const ReduxToken: Token< - FusionPlugin -> = createToken('ReduxToken'); +export const ReduxToken: Token = createToken( + 'ReduxToken' +); export const ReducerToken: Token> = createToken('ReducerToken'); export const PreloadedStateToken: Token = createToken( 'PreloadedStateToken' diff --git a/yarn.lock b/yarn.lock index d1674ce..3272142 100644 --- a/yarn.lock +++ b/yarn.lock @@ -970,7 +970,7 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -assert@^1.1.1: +assert@^1.1.1, assert@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: @@ -2602,6 +2602,14 @@ fusion-core@^1.2.6: ua-parser-js "^0.7.17" uuid "^3.2.1" +fusion-test-utils@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fusion-test-utils/-/fusion-test-utils-1.0.5.tgz#6ac2d2af57e7201b4c6e3e13ac2524d423e8e4c7" + dependencies: + assert "^1.4.1" + koa "^2.4.1" + node-mocks-http "^1.6.6" + fusion-tokens@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fusion-tokens/-/fusion-tokens-1.0.3.tgz#e247a076ef145337287e103ecbc42486594e96c5" From 9bc36402ca928597b3e26408a85559725fcd902d Mon Sep 17 00:00:00 2001 From: Alexander Smith Date: Tue, 8 May 2018 11:16:48 -0700 Subject: [PATCH 2/2] Release v1.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1de8e7b..b7a798e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fusion-plugin-react-redux", "description": "Integrates React and Redux to a Fusion.js application", - "version": "1.0.3", + "version": "1.0.4", "license": "MIT", "repository": "fusionjs/fusion-plugin-react-redux", "files": [