Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions src/codegen/codegen.utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,47 @@ describe('Code generation - utils', () => {
},
])
})

it('does not drop checks from non-final hops when they are in affectedRequestIds', () => {
const redirectWithCheck = {
...createRedirectSnippet('1', 'http://a.com', 'http://b.com'),
checks: [
{
description: 'status equals 302',
expression: '(r) => r.status === 302',
},
],
}
const middleWithCheck = {
...createRedirectSnippet('2', 'http://b.com', 'http://c.com'),
checks: [
{
description: 'body contains token',
expression: "(r) => r.body.includes('token')",
},
],
}
const finalSnippet = createFinalSnippet('3', 'http://c.com')

const result = processRedirectChains(
[redirectWithCheck, middleWithCheck, finalSnippet],
new Set(['1'])
)

expect(result.length).toBe(3)
expect(result[0]?.checks).toEqual([
{
description: 'status equals 302',
expression: '(r) => r.status === 302',
},
])
expect(result[1]?.checks).toEqual([
{
description: 'body contains token',
expression: "(r) => r.body.includes('token')",
},
])
})
})

describe('shouldIncludeHeaderInScript', () => {
Expand Down
11 changes: 9 additions & 2 deletions src/rules/rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,17 @@ export function applyRules(recording: ProxyData[], rules: TestRule[]) {
// since some rules may change the URL
.map(updateQueryParams)

// Collect affected requests to exclude from redirect merging
// Collect affected requests to exclude from redirect merging.
// All rule types that modify request snippets must be included here,
// otherwise their modifications (before/after/checks) can be silently
// dropped when redirect chains are merged.
const affectedRequestIds = new Set(
ruleInstances.flatMap((instance) => {
if (['parameterization', 'customCode'].includes(instance.type)) {
if (
['parameterization', 'customCode', 'verification'].includes(
instance.type
)
) {
return instance.state.matchedRequestIds
}

Expand Down
Loading