1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 2× 3× 3× 2× 1× 2× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 5× 5× 2× 3× 1× 2× 1× 1× 1× 4× 4× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× | 'use strict'; // istanbul ignore next var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // istanbul ignore next function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _expect = require('expect'); var _expect2 = _interopRequireDefault(_expect); var _redux = require('redux'); var _src = require('./src'); describe('redux-await', function () { it('exports AWAIT_MARKER', function () { _expect2['default'](_src.AWAIT_MARKER).toBeTruthy(); }); it('exports AWAIT_META_CONTAINER', function () { _expect2['default'](_src.AWAIT_META_CONTAINER).toBeTruthy(); }); it('exports AWAIT_INFO_CONTAINER', function () { _expect2['default'](_src.AWAIT_INFO_CONTAINER).toBeTruthy(); }); it('exports middleware', function () { _expect2['default'](_src.middleware).toBeTruthy(); }); it('exports createReducer', function () { _expect2['default'](_src.createReducer).toBeTruthy(); }); it('exports getInfo', function () { _expect2['default'](_src.getInfo).toBeTruthy(); }); describe('createReducer', function () { describe('wraps a reducer', function () { var reducer = undefined; var wrappedReducer = undefined; beforeEach(function () { reducer = function (state, action) { if (state === undefined) state = {}; if (action.type === 'TESTING') { return _extends({}, state, { wasTested: true }); } return state; }; wrappedReducer = _src.createReducer(reducer); }); it('still runs on actions it was reducing', function () { var initalState = wrappedReducer(undefined, { type: 'FOOBAR' }); _expect2['default'](initalState).toEqual({}); var nextState = wrappedReducer({}, { type: 'TESTING' }); _expect2['default'](nextState).toEqual({ wasTested: true }); }); it('handles events with action.meta[AWAIT_META_CONTAINER]', function () { // istanbul ignore next var _meta; var nextState = wrappedReducer({ a: true, b: true }, { type: 'TESTING', meta: (_meta = {}, _meta[_src.AWAIT_META_CONTAINER] = { promiseKeys: ['a'], status: 'success' }, _meta) }); _expect2['default'](nextState.b).toBeTruthy(); _expect2['default'](nextState.wasTested).toBeTruthy(); }); }); }); it("does it's thing", function (done) { var createStoreWithMiddleware = _redux.applyMiddleware(_src.middleware)(_redux.createStore); var reducer = function reducer(state, action) { if (state === undefined) state = {}; if (action.type === _src.getPendingActionType('TESTING')) { return _extends({}, state, { wasPending: true }); }; if (action.type === 'TESTING') { return _extends({}, state, { wasTested: true, soon: action.payload.soon + '!' }); } return state; }; var store = createStoreWithMiddleware(_src.createReducer(reducer)); var states = []; store.subscribe(function () { states.push(store.getState()); if (states.length === 4) { _expect2['default'](_src.getInfo(states[0])('soon').status).toEqual('pending'); _expect2['default'](states[0].wasPending).toEqual(true); _expect2['default'](_src.getInfo(states[2])('soon').status).toEqual('success'); _expect2['default'](states[2].soon).toEqual('v!'); _expect2['default'](states[2].wasTested).toEqual(true); _expect2['default'](_src.getInfo(states[3])('soon').status).toEqual('failure'); _expect2['default'](_src.getInfo(states[3])('soon').error.message).toEqual('no!'); done(); } }); var generateRejection = function generateRejection() { return new Promise(function (_, reject) { return setTimeout(function () { return reject(new Error('no!')); }, 15); }); }; // smiley face; store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: Promise.resolve('v'), ignore: 123 } }); store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: generateRejection(), ignore: 123 } }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9tb3NoZS9Eb2N1bWVudHMvUmFuZG9tUHJvamVjdHMvcmVkdXgtYXdhaXQvdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3NCQUFtQixRQUFROzs7O3FCQUNrQixPQUFPOzttQkFTN0MsT0FBTzs7QUFFZCxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQU07QUFDNUIsSUFBRSxDQUFDLHNCQUFzQixFQUFFLFlBQU07QUFDL0IsMENBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDbkMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLG9CQUFvQixFQUFFLFlBQU07QUFDN0Isd0NBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDakMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07QUFDaEMsMkNBQXFCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDcEMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQU07QUFDMUIscUNBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztHQUM5QixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0FBQzlCLFlBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0FBQ2hDLFVBQUksT0FBTyxZQUFBLENBQUM7QUFDWixVQUFJLGNBQWMsWUFBQSxDQUFDO0FBQ25CLGdCQUFVLENBQUMsWUFBTTtBQUNmLGVBQU8sR0FBRyxVQUFDLEtBQUssRUFBTyxNQUFNLEVBQUs7Y0FBdkIsS0FBSyxnQkFBTCxLQUFLLEdBQUcsRUFBRTs7QUFDbkIsY0FBSSxNQUFN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QUM7R0FDeEcsQ0FBQyxDQUFDO0NBRUosQ0FBQyxDQUFDIiwiZmlsZSI6Ii9Vc2Vycy9tb3NoZS9Eb2N1bWVudHMvUmFuZG9tUHJvamVjdHMvcmVkdXgtYXdhaXQvdGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHBlY3QgZnJvbSAnZXhwZWN0JztcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBhcHBseU1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQge1xuICBBV0FJVF9NQVJLRVIsXG4gIEFXQUlUX01FVEFfQ09OVEFJTkVSLFxuICBBV0FJVF9JTkZPX0NPTlRBSU5FUixcbiAgbWlkZGxld2FyZSxcbiAgY3JlYXRlUmVkdWNlcixcbiAgZ2V0SW5mbyxcbiAgZ2V0UGVuZGluZ0FjdGlvblR5cGUsXG59IGZyb20gJy4vc3JjJztcblxuZGVzY3JpYmUoJ3JlZHV4LWF3YWl0JywgKCkgPT4ge1xuICBpdCgnZXhwb3J0cyBBV0FJVF9NQVJLRVInLCAoKSA9PiB7XG4gICAgZXhwZWN0KEFXQUlUX01BUktFUikudG9CZVRydXRoeSgpO1xuICB9KTtcbiAgaXQoJ2V4cG9ydHMgQVdBSVRfTUVUQV9DT05UQUlORVInLCAoKSA9PiB7XG4gICAgZXhwZWN0KEFXQUlUX01FVEFfQ09OVEFJTkVSKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBBV0FJVF9JTkZPX0NPTlRBSU5FUicsICgpID0+IHtcbiAgICBleHBlY3QoQVdBSVRfSU5GT19DT05UQUlORVIpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG4gIGl0KCdleHBvcnRzIG1pZGRsZXdhcmUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1pZGRsZXdhcmUpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG4gIGl0KCdleHBvcnRzIGNyZWF0ZVJlZHVjZXInLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZVJlZHVjZXIpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG4gIGl0KCdleHBvcnRzIGdldEluZm8nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGdldEluZm8pLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVJlZHVjZXInLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ3dyYXBzIGEgcmVkdWNlcicsICgpID0+IHtcbiAgICAgIGxldCByZWR1Y2VyO1xuICAgICAgbGV0IHdyYXBwZWRSZWR1Y2VyO1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHJlZHVjZXIgPSAoc3RhdGUgPSB7fSwgYWN0aW9uKSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAnVEVTVElORycpIHsgcmV0dXJuIHsgLi4uc3RhdGUsIHdhc1Rlc3RlZDogdHJ1ZSB9IH1cbiAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH07XG4gICAgICAgIHdyYXBwZWRSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc3RpbGwgcnVucyBvbiBhY3Rpb25zIGl0IHdhcyByZWR1Y2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5pdGFsU3RhdGUgPSB3cmFwcGVkUmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogJ0ZPT0JBUicgfSk7XG4gICAgICAgIGV4cGVjdChpbml0YWxTdGF0ZSkudG9FcXVhbCh7fSk7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHdyYXBwZWRSZWR1Y2VyKHt9LCB7IHR5cGU6ICdURVNUSU5HJyB9KTtcbiAgICAgICAgZXhwZWN0KG5leHRTdGF0ZSkudG9FcXVhbCh7IHdhc1Rlc3RlZDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFuZGxlcyBldmVudHMgd2l0aCBhY3Rpb24ubWV0YVtBV0FJVF9NRVRBX0NPTlRBSU5FUl0nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHdyYXBwZWRSZWR1Y2VyKHthOiB0cnVlLCBiOiB0cnVlfSwge1xuICAgICAgICAgIHR5cGU6ICdURVNUSU5HJyxcbiAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICBbQVdBSVRfTUVUQV9DT05UQUlORVJdOiB7XG4gICAgICAgICAgICAgIHByb21pc2VLZXlzOiBbJ2EnXSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QobmV4dFN0YXRlLmIpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KG5leHRTdGF0ZS53YXNUZXN0ZWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBpdCdzIHRoaW5nXCIsIGRvbmUgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVN0b3JlV2l0aE1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUobWlkZGxld2FyZSkoY3JlYXRlU3RvcmUpO1xuICAgIGNvbnN0IHJlZHVjZXIgPSAoc3RhdGUgPSB7fSwgYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IGdldFBlbmRpbmdBY3Rpb25UeXBlKCdURVNUSU5HJykpIHsgcmV0dXJuIHsgLi4uc3RhdGUsIHdhc1BlbmRpbmc6IHRydWUgfSB9O1xuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAnVEVTVElORycpIHsgcmV0dXJuIHsgLi4uc3RhdGUsIHdhc1Rlc3RlZDogdHJ1ZSwgc29vbjogYWN0aW9uLnBheWxvYWQuc29vbiArICchJyB9IH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmVXaXRoTWlkZGxld2FyZSggIGNyZWF0ZVJlZHVjZXIocmVkdWNlcikgICk7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgc3RvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHN0YXRlcy5wdXNoKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgaWYgKHN0YXRlcy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgZXhwZWN0KGdldEluZm8oc3RhdGVzWzBdKSgnc29vbicpLnN0YXR1cykudG9FcXVhbCgncGVuZGluZycpO1xuICAgICAgICBleHBlY3Qoc3RhdGVzWzBdLndhc1BlbmRpbmcpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1syXSkoJ3Nvb24nKS5zdGF0dXMpLnRvRXF1YWwoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgZXhwZWN0KHN0YXRlc1syXS5zb29uKS50b0VxdWFsKCd2IScpO1xuICAgICAgICBleHBlY3Qoc3RhdGVzWzJdLndhc1Rlc3RlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgZXhwZWN0KGdldEluZm8oc3RhdGVzWzNdKSgnc29vbicpLnN0YXR1cykudG9FcXVhbCgnZmFpbHVyZScpO1xuICAgICAgICBleHBlY3QoZ2V0SW5mbyhzdGF0ZXNbM10pKCdzb29uJykuZXJyb3IubWVzc2FnZSkudG9FcXVhbCgnbm8hJyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZW5lcmF0ZVJlamVjdGlvbiA9ICgpID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignbm8hJykpLCAxNSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbWlsZXkgZmFjZTtcbiAgICBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IFByb21pc2UucmVzb2x2ZSgndicpLCBpZ25vcmU6IDEyMyB9IH0pO1xuICAgIHN0b3JlLmRpc3BhdGNoKHsgdHlwZTogJ1RFU1RJTkcnLCBBV0FJVF9NQVJLRVIsIHBheWxvYWQ6IHsgc29vbjogZ2VuZXJhdGVSZWplY3Rpb24oKSwgaWdub3JlOiAxMjMgfSB9KTtcbiAgfSk7XG5cbn0pO1xuIl19 |