Skip to content

Commit

Permalink
Don't decode querystring while adding apiExpanders (#4719)
Browse files Browse the repository at this point in the history
Co-authored-by: Victor Fernandez de Alba <sneridagh@gmail.com>
  • Loading branch information
2 people authored and ionlizarazu committed Apr 20, 2023
1 parent 5357525 commit c9658c7
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ jobs:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
# remove workaround for 18.x once https://github.com/nodejs/node/issues/47563 is fixed
node-version: ${{ matrix.node-version == '18.x' && '18.15.0' || matrix.node-version }}
cache: yarn

# node install
Expand Down
1 change: 1 addition & 0 deletions news/4718.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix fetching API paths with urlencoded characters in the querystring. @davisagli
54 changes: 54 additions & 0 deletions src/middleware/Api.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,60 @@ describe('api middleware helpers', () => {
);
expect(result).toEqual('/de/mypage/@navigation?expand.navigation.depth=3');
});
it('addExpandersToPath - Path matching, preserve query', () => {
config.settings.apiExpanders = [
{
match: '/de/mypage',
GET_CONTENT: ['mycustomexpander', 'mycustomexpander2'],
},
];

const result = addExpandersToPath(
'/de/mypage/@navigation?expand.navigation.depth=3',
GET_CONTENT,
);
expect(result).toEqual(
'/de/mypage/@navigation?expand=mycustomexpander,mycustomexpander2&expand.navigation.depth=3',
);
});
it('addExpandersToPath - Path matching, preserve query with multiple', () => {
config.settings.apiExpanders = [
{
match: '/de/mypage',
GET_CONTENT: ['mycustomexpander', 'mycustomexpander2'],
},
];

const result = addExpandersToPath(
'/de/mypage/@navigation?expand.navigation.depth=3&expand.other=2',
GET_CONTENT,
);
expect(result).toEqual(
'/de/mypage/@navigation?expand=mycustomexpander,mycustomexpander2&expand.navigation.depth=3&expand.other=2',
);
});
it('addExpandersToPath - Path not matching, preserve encoded query', () => {
config.settings.apiExpanders = [
{
match: '/de/otherpath',
GET_CONTENT: ['mycustomexpander'],
},
];

const result = addExpandersToPath('/de/mypage?query=a%26b', GET_CONTENT);
expect(result).toEqual('/de/mypage?query=a%26b');
});
it('addExpandersToPath - Path matching, preserve encoded query', () => {
config.settings.apiExpanders = [
{
match: '/de/mypage',
GET_CONTENT: ['mycustomexpander'],
},
];

const result = addExpandersToPath('/de/mypage?query=a%26b', GET_CONTENT);
expect(result).toEqual('/de/mypage?expand=mycustomexpander&query=a%26b');
});
it('addExpandersToPath - Two custom expanders from settings', () => {
config.settings.apiExpanders = [
{
Expand Down
2 changes: 1 addition & 1 deletion src/middleware/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export function addExpandersToPath(path, type, isAnonymous) {
const {
url,
query: { expand, ...query },
} = qs.parseUrl(path);
} = qs.parseUrl(path, { decode: false });

const expandersFromConfig = apiExpanders
.filter((expand) => matchPath(url, expand.match) && expand[type])
Expand Down

0 comments on commit c9658c7

Please sign in to comment.