From fab3239c160c0bcd94de2b371bce916165eb8912 Mon Sep 17 00:00:00 2001 From: Michael Rochester Date: Mon, 30 Mar 2026 16:03:43 +0100 Subject: [PATCH 1/3] chore(release): 1.9.0 --- CHANGELOG.md | 16 ++++++++++++++++ lerna.json | 8 ++------ packages/fetchye-core/CHANGELOG.md | 8 ++++++++ packages/fetchye-core/package.json | 2 +- packages/fetchye-immutable-cache/CHANGELOG.md | 8 ++++++++ packages/fetchye-immutable-cache/package.json | 4 ++-- packages/fetchye-one-app/CHANGELOG.md | 11 +++++++++++ packages/fetchye-one-app/package.json | 10 +++++----- packages/fetchye-redux-provider/CHANGELOG.md | 8 ++++++++ packages/fetchye-redux-provider/package.json | 4 ++-- packages/fetchye-test-utils/CHANGELOG.md | 8 ++++++++ packages/fetchye-test-utils/package.json | 2 +- packages/fetchye/CHANGELOG.md | 16 ++++++++++++++++ packages/fetchye/package.json | 6 +++--- 14 files changed, 91 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bda6a36..9abb529 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + + +### Bug Fixes + +* **isLoading:** added catch for post render edge case ([6e30af6](https://github.com/americanexpress/fetchye/commit/6e30af6af26e1b872911653b7b476605b7ac307d)) + + +### Features + +* **fetchye-one-app:** add streaming support ([#110](https://github.com/americanexpress/fetchye/issues/110)) ([53185ea](https://github.com/americanexpress/fetchye/commit/53185ea772e43cba0aaa86b2b337267449c97246)), closes [#111](https://github.com/americanexpress/fetchye/issues/111) + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) diff --git a/lerna.json b/lerna.json index a70ea33..0f7d485 100644 --- a/lerna.json +++ b/lerna.json @@ -1,15 +1,11 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", "npmClient": "yarn", - "useWorkspaces": true, - "packages": [ - "packages/*" - ], "command": { "version": { "conventionalCommits": true, "allowBranch": "chore/release-*" } }, - "version": "1.8.0" -} + "version": "1.9.0" +} \ No newline at end of file diff --git a/packages/fetchye-core/CHANGELOG.md b/packages/fetchye-core/CHANGELOG.md index 4ec9833..1273da8 100644 --- a/packages/fetchye-core/CHANGELOG.md +++ b/packages/fetchye-core/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + +**Note:** Version bump only for package fetchye-core + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) **Note:** Version bump only for package fetchye-core diff --git a/packages/fetchye-core/package.json b/packages/fetchye-core/package.json index 56cb1f9..5e1fe72 100644 --- a/packages/fetchye-core/package.json +++ b/packages/fetchye-core/package.json @@ -1,6 +1,6 @@ { "name": "fetchye-core", - "version": "1.8.0", + "version": "1.9.0", "description": "Core components of the Fetchye library", "license": "Apache-2.0", "main": "lib/index.js", diff --git a/packages/fetchye-immutable-cache/CHANGELOG.md b/packages/fetchye-immutable-cache/CHANGELOG.md index 2592be5..c2e598e 100644 --- a/packages/fetchye-immutable-cache/CHANGELOG.md +++ b/packages/fetchye-immutable-cache/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + +**Note:** Version bump only for package fetchye-immutable-cache + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) **Note:** Version bump only for package fetchye-immutable-cache diff --git a/packages/fetchye-immutable-cache/package.json b/packages/fetchye-immutable-cache/package.json index 71a9643..da8cf4a 100644 --- a/packages/fetchye-immutable-cache/package.json +++ b/packages/fetchye-immutable-cache/package.json @@ -1,6 +1,6 @@ { "name": "fetchye-immutable-cache", - "version": "1.8.0", + "version": "1.9.0", "description": "Immutable cache library to use with fetchye.", "license": "Apache-2.0", "main": "lib/index.js", @@ -42,7 +42,7 @@ "@babel/core": "7.11.6", "babel-preset-amex": "^3.4.1", "cross-env": "^7.0.2", - "fetchye-test-utils": "^1.8.0", + "fetchye-test-utils": "^1.9.0", "redux": "^4.0.5", "rimraf": "^3.0.2" }, diff --git a/packages/fetchye-one-app/CHANGELOG.md b/packages/fetchye-one-app/CHANGELOG.md index f40adf3..0da02c2 100644 --- a/packages/fetchye-one-app/CHANGELOG.md +++ b/packages/fetchye-one-app/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + + +### Features + +* **fetchye-one-app:** add streaming support ([#110](https://github.com/americanexpress/fetchye/issues/110)) ([53185ea](https://github.com/americanexpress/fetchye/commit/53185ea772e43cba0aaa86b2b337267449c97246)), closes [#111](https://github.com/americanexpress/fetchye/issues/111) + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) **Note:** Version bump only for package fetchye-one-app diff --git a/packages/fetchye-one-app/package.json b/packages/fetchye-one-app/package.json index 539ee10..2f96fa3 100644 --- a/packages/fetchye-one-app/package.json +++ b/packages/fetchye-one-app/package.json @@ -1,6 +1,6 @@ { "name": "fetchye-one-app", - "version": "1.8.0", + "version": "1.9.0", "description": "Collection of helpers to aid fetchye integration with One App", "license": "Apache-2.0", "main": "lib/index.js", @@ -40,9 +40,9 @@ ], "dependencies": { "@babel/runtime": "^7.11.2", - "fetchye-immutable-cache": "^1.8.0", - "fetchye-redux-provider": "^1.8.0", - "fetchye-test-utils": "^1.8.0", + "fetchye-immutable-cache": "^1.9.0", + "fetchye-redux-provider": "^1.9.0", + "fetchye-test-utils": "^1.9.0", "invariant": "^2.2.4", "prop-types": "^15.7.2" }, @@ -58,7 +58,7 @@ "@testing-library/react-hooks": "^3.4.2", "babel-preset-amex": "^3.4.1", "cross-env": "^7.0.2", - "fetchye-core": "^1.8.0", + "fetchye-core": "^1.9.0", "immutable": "^4.0.0-rc.12", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/packages/fetchye-redux-provider/CHANGELOG.md b/packages/fetchye-redux-provider/CHANGELOG.md index 8ff8361..c26a175 100644 --- a/packages/fetchye-redux-provider/CHANGELOG.md +++ b/packages/fetchye-redux-provider/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + +**Note:** Version bump only for package fetchye-redux-provider + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) diff --git a/packages/fetchye-redux-provider/package.json b/packages/fetchye-redux-provider/package.json index 22a52b7..fb341cf 100644 --- a/packages/fetchye-redux-provider/package.json +++ b/packages/fetchye-redux-provider/package.json @@ -1,6 +1,6 @@ { "name": "fetchye-redux-provider", - "version": "1.8.0", + "version": "1.9.0", "description": "Redux provider for fetchye.", "license": "Apache-2.0", "main": "lib/index.js", @@ -43,7 +43,7 @@ "@testing-library/react": "^11.0.4", "babel-preset-amex": "^3.4.1", "cross-env": "^7.0.2", - "fetchye": "^1.8.0", + "fetchye": "^1.9.0", "react": "^17.0.2", "react-dom": "^17.0.2", "rimraf": "^3.0.2" diff --git a/packages/fetchye-test-utils/CHANGELOG.md b/packages/fetchye-test-utils/CHANGELOG.md index e701a5e..1b4eae8 100644 --- a/packages/fetchye-test-utils/CHANGELOG.md +++ b/packages/fetchye-test-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + +**Note:** Version bump only for package fetchye-test-utils + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) **Note:** Version bump only for package fetchye-test-utils diff --git a/packages/fetchye-test-utils/package.json b/packages/fetchye-test-utils/package.json index 49a7c81..2470d0b 100644 --- a/packages/fetchye-test-utils/package.json +++ b/packages/fetchye-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "fetchye-test-utils", - "version": "1.8.0", + "version": "1.9.0", "description": "Core components of the Fetchye library", "license": "Apache-2.0", "main": "lib/index.js", diff --git a/packages/fetchye/CHANGELOG.md b/packages/fetchye/CHANGELOG.md index 1ee6de4..c6f0a61 100644 --- a/packages/fetchye/CHANGELOG.md +++ b/packages/fetchye/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.9.0](https://github.com/americanexpress/fetchye/compare/v1.8.0...v1.9.0) (2026-03-30) + + +### Bug Fixes + +* **isLoading:** added catch for post render edge case ([6e30af6](https://github.com/americanexpress/fetchye/commit/6e30af6af26e1b872911653b7b476605b7ac307d)) + + +### Features + +* **fetchye-one-app:** add streaming support ([#110](https://github.com/americanexpress/fetchye/issues/110)) ([53185ea](https://github.com/americanexpress/fetchye/commit/53185ea772e43cba0aaa86b2b337267449c97246)), closes [#111](https://github.com/americanexpress/fetchye/issues/111) + + + + + # [1.8.0](https://github.com/americanexpress/fetchye/compare/v1.7.0...v1.8.0) (2025-11-26) ### Features diff --git a/packages/fetchye/package.json b/packages/fetchye/package.json index 64dce77..d10be52 100644 --- a/packages/fetchye/package.json +++ b/packages/fetchye/package.json @@ -1,6 +1,6 @@ { "name": "fetchye", - "version": "1.8.0", + "version": "1.9.0", "description": "If you know how to use Fetch, you know how to use Fetchye [fetch-yae]. Simple React Hooks, Centralized Cache, Infinitely Extensible.", "license": "Apache-2.0", "main": "lib/index.js", @@ -53,7 +53,7 @@ ], "dependencies": { "@babel/runtime": "^7.11.2", - "fetchye-core": "^1.8.0", + "fetchye-core": "^1.9.0", "object-hash": "^2.0.3", "prop-types": "^15.7.2" }, @@ -67,7 +67,7 @@ "@testing-library/react": "^11.0.4", "babel-preset-amex": "^3.4.1", "cross-env": "^7.0.2", - "fetchye-test-utils": "^1.8.0", + "fetchye-test-utils": "^1.9.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-redux": "^7.2.1", From 7dd8be0ff9fc20af08ab7dea2538a768d95275bf Mon Sep 17 00:00:00 2001 From: Dominic Farquharson Date: Tue, 31 Mar 2026 10:04:22 -0400 Subject: [PATCH 2/3] feat(fetchye-one-app): only execute streamFetchye action on server (#113) * feat(fetchye-one-app): only execute streamFetchye action on server * refactor(fetchye-one-app): prevent dispatching stream action on client --- .../__tests__/streaming/streamFetchye.spec.js | 32 +++++++++++++++++++ .../src/streaming/streamFetchye.js | 20 ++++++------ 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/packages/fetchye-one-app/__tests__/streaming/streamFetchye.spec.js b/packages/fetchye-one-app/__tests__/streaming/streamFetchye.spec.js index 204ea19..abd6aee 100644 --- a/packages/fetchye-one-app/__tests__/streaming/streamFetchye.spec.js +++ b/packages/fetchye-one-app/__tests__/streaming/streamFetchye.spec.js @@ -27,6 +27,21 @@ const streamActionSpy = jest.spyOn(actions, 'stream'); const mockDispatch = jest.fn(); describe('streamFetchye', () => { + const originalWindow = global.window; + + beforeEach(() => { + jest.clearAllMocks(); + Object.defineProperty(global, 'window', { + value: undefined, + configurable: true, + writable: true, + }); + }); + + afterEach(() => { + global.window = originalWindow; + }); + it('should return a one-app-thunk that dispatches an action resolving to the passed in thunk', async () => { expect.assertions(2); @@ -63,4 +78,21 @@ describe('streamFetchye', () => { ); expect(fetchyeThunk).toHaveBeenCalledWith(...fetchyeParams.slice(1)); }); + + it('should not dispatch the stream action on the client', async () => { + expect.assertions(1); + + global.window = originalWindow; + + const fetchyeThunk = jest.fn(); + fetchyeThunk.mockResolvedValue(Symbol('fetchRequest')); + + const fetchyeParams = [fetchyeThunk, Symbol('fetchyeArgs - key'), Symbol('fetchyeArgs - options'), Symbol('fetchyeArgs - fetcher')]; + const streamFetchyeThunk = streamFetchye(...fetchyeParams); + const thunkParams = [mockDispatch, Symbol('getState'), Symbol('fetchClient')]; + await streamFetchyeThunk( + fetchyeThunk, thunkParams[0], thunkParams[1], { fetchClient: thunkParams[2] } + ); + expect(streamActionSpy).not.toHaveBeenCalled(); + }); }); diff --git a/packages/fetchye-one-app/src/streaming/streamFetchye.js b/packages/fetchye-one-app/src/streaming/streamFetchye.js index 7186922..c11cbb9 100644 --- a/packages/fetchye-one-app/src/streaming/streamFetchye.js +++ b/packages/fetchye-one-app/src/streaming/streamFetchye.js @@ -23,15 +23,17 @@ export const streamFetchye = (thunk, key, opts = {}, fetcher = undefined) => asy const { hash: computedKey } = computeKey(key, opts); const promise = dispatch(thunk(key, opts, fetcher)); - dispatch( - stream([ - { - key: computedKey, - domain: STREAM_DOMAIN, - promise, - }, - ]) - ); + if (!global.window) { + dispatch( + stream([ + { + key: computedKey, + domain: STREAM_DOMAIN, + promise, + }, + ]) + ); + } return promise; }; From 33fadba4f7bc9d6e6eaa54d00a5a89cd16d6ef57 Mon Sep 17 00:00:00 2001 From: Anushree Bondia Date: Wed, 1 Apr 2026 21:10:37 +0530 Subject: [PATCH 3/3] Issue #3: added Unit Testing and Mocking --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/README.md b/README.md index c2ef928..7820c36 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,69 @@ const BookList = ({ genre }) => { }; ``` +### Unit Testing and Mocking + +Fetchye can be tested with Jest and React Testing Library by rendering a small +component that uses `useFetchye` and asserting the hook state over time. + +```jsx +import React from 'react'; +import { render, waitFor } from '@testing-library/react'; +import { FetchyeProvider, SimpleCache, useFetchye } from 'fetchye'; + +const customFetchClient = jest.fn(async () => ({ + ok: true, + status: 200, + text: async () => JSON.stringify({ + name: 'Ada Lovelace', + }), +})); + +const customFetcher = async (fetchClient, key, options) => { + const response = await fetchClient(key, options); + return { + payload: { + ok: response.ok, + status: response.status, + body: JSON.parse(await response.text()), + }, + error: undefined, + }; +}; + +it('fetches profile data with a mocked custom fetcher', async () => { + let result; + + render( + + {React.createElement(() => { + result = useFetchye('http://example.com/api/profile', {}, customFetcher); + return null; + })} + + ); + + await waitFor(() => expect(result.isLoading).toBe(false)); + expect(customFetchClient).toHaveBeenCalledWith( + 'http://example.com/api/profile', + {} + ); + expect(result.data.body.name).toBe('Ada Lovelace'); +}); +``` + +If you are not injecting a custom fetcher, mock `global.fetch` directly: + +```jsx +global.fetch = jest.fn(async () => ({ + ok: true, + status: 200, + text: async () => JSON.stringify({ + name: 'Ada Lovelace', + }), +})); +``` + ### Deferred execution When you need to delay execution of a `useFetchye` call, you may use @@ -806,6 +869,7 @@ const ParentComponent = ({ children }) => ( - [One App Install](#one-app-install) - [🤹‍ Usage](#-usage) - [Real-World Example](#real-world-example) + - [Unit Testing and Mocking](#unit-testing-and-mocking) - [Deferred execution](#deferred-execution) - [Abort Inflight Requests](#abort-inflight-requests) - [Sequential API Execution](#sequential-api-execution)