Skip to content

Commit cfa0d98

Browse files
DmitryAnanskytatomyr
authored andcommitted
fix: cookies from workflows and step are not set to the request (#1918)
1 parent 2dcbe9d commit cfa0d98

File tree

6 files changed

+187
-93
lines changed

6 files changed

+187
-93
lines changed

packages/respect-core/src/modules/__tests__/config-parcer/map-header-params-and-cookie-to-object.test.ts

Lines changed: 0 additions & 71 deletions
This file was deleted.

packages/respect-core/src/modules/__tests__/flow-runner/prepare-request.test.ts

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,4 +1498,184 @@ describe('prepareRequest', () => {
14981498
},
14991499
]);
15001500
});
1501+
1502+
it('should merge cookie parameters from workflow and step', async () => {
1503+
const localCtx = {
1504+
...ctx,
1505+
...{
1506+
workflows: [
1507+
{
1508+
workflowId: 'get-breeds-workflow',
1509+
parameters: [
1510+
{
1511+
name: 'pageSize',
1512+
in: 'header',
1513+
value: 100,
1514+
},
1515+
{
1516+
name: 'cookie',
1517+
in: 'header',
1518+
value: 'sessionId=32;userId=32;workflow-cookie=32',
1519+
},
1520+
{
1521+
name: 'token-from-workflow',
1522+
in: 'cookie',
1523+
value: '32',
1524+
},
1525+
],
1526+
steps: [
1527+
{
1528+
stepId: 'get-breeds-step',
1529+
operationId: 'cats.getBreeds',
1530+
parameters: [
1531+
{
1532+
name: 'step-header',
1533+
in: 'header',
1534+
value: 'step-header-value',
1535+
},
1536+
{
1537+
name: 'token-from-step',
1538+
in: 'cookie',
1539+
value: '42',
1540+
},
1541+
{
1542+
name: 'cookie',
1543+
in: 'header',
1544+
value: 'sessionId=42;stepСookie=42',
1545+
},
1546+
],
1547+
checks: [],
1548+
response: {
1549+
body: {
1550+
current_page: 1,
1551+
data: [
1552+
{
1553+
breed: 'Abyssinian',
1554+
country: 'Ethiopia',
1555+
origin: 'Natural/Standard',
1556+
coat: 'Short',
1557+
pattern: 'Ticked',
1558+
},
1559+
{
1560+
breed: 'Aegean',
1561+
country: 'Greece',
1562+
origin: 'Natural/Standard',
1563+
coat: 'Semi-long',
1564+
pattern: 'Bi- or tri-colored',
1565+
},
1566+
],
1567+
first_page_url: 'https://catfact.ninja/breeds?page=1',
1568+
from: 1,
1569+
last_page: 4,
1570+
last_page_url: 'https://catfact.ninja/breeds?page=4',
1571+
links: [
1572+
{
1573+
url: null,
1574+
label: 'Previous',
1575+
active: false,
1576+
},
1577+
{
1578+
url: 'https://catfact.ninja/breeds?page=1',
1579+
label: '1',
1580+
active: true,
1581+
},
1582+
],
1583+
next_page_url: 'https://catfact.ninja/breeds?page=2',
1584+
path: 'https://catfact.ninja/breeds',
1585+
per_page: 25,
1586+
prev_page_url: null,
1587+
to: 25,
1588+
total: 98,
1589+
},
1590+
code: 200,
1591+
headers: {},
1592+
contentType: 'application/json',
1593+
},
1594+
verboseLog: {},
1595+
},
1596+
],
1597+
},
1598+
],
1599+
$workflows: {
1600+
'get-breeds-workflow': {
1601+
parameters: [
1602+
{
1603+
name: 'pageSize',
1604+
in: 'header',
1605+
value: 100,
1606+
},
1607+
],
1608+
steps: {
1609+
'get-breeds-step': {
1610+
request: {
1611+
headers: {},
1612+
path: '/breeds',
1613+
url: 'https://catfact.ninja/',
1614+
method: 'get',
1615+
queryParams: {},
1616+
pathParams: {},
1617+
headerParams: {},
1618+
},
1619+
},
1620+
},
1621+
},
1622+
},
1623+
$components: {
1624+
parameters: {
1625+
page: {
1626+
name: 'page',
1627+
in: 'header',
1628+
value: 1,
1629+
},
1630+
pageSize: {
1631+
name: 'pageSize',
1632+
in: 'header',
1633+
value: 100,
1634+
},
1635+
},
1636+
},
1637+
},
1638+
} as unknown as TestContext;
1639+
1640+
const step = {
1641+
stepId: 'get-breeds-step',
1642+
operationId: 'cats.getBreeds',
1643+
checks: [],
1644+
} as unknown as Step;
1645+
1646+
const { parameters } = await prepareRequest(localCtx, step, workflowName);
1647+
1648+
expect(parameters).toEqual([
1649+
{
1650+
value: 'application/json',
1651+
in: 'header',
1652+
name: 'accept',
1653+
},
1654+
{
1655+
value: 100,
1656+
in: 'header',
1657+
name: 'pageSize',
1658+
},
1659+
{
1660+
value: '32',
1661+
in: 'cookie',
1662+
name: 'sessionId',
1663+
},
1664+
{
1665+
value: '32',
1666+
in: 'cookie',
1667+
name: 'userId',
1668+
},
1669+
{
1670+
value: '32',
1671+
in: 'cookie',
1672+
name: 'workflow-cookie',
1673+
},
1674+
{
1675+
value: '32',
1676+
in: 'cookie',
1677+
name: 'token-from-workflow',
1678+
},
1679+
]);
1680+
});
15011681
});

packages/respect-core/src/modules/config-parser/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,3 @@ export * from './parse-request-body';
44
export * from './handle-request-body-replacements';
55
export * from './resolve-reusable-object-reference';
66
export * from './resolve-reusable-component';
7-
export * from './map-header-params-and-cookie-to-object';

packages/respect-core/src/modules/config-parser/map-header-params-and-cookie-to-object.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/respect-core/src/modules/flow-runner/prepare-request.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,5 +222,6 @@ function extractCookieParametersFromHeaderParameters(
222222
result.push(parameter);
223223
}
224224
}
225+
225226
return result;
226227
}

packages/respect-core/src/utils/api-fetcher.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ export class ApiFetcher implements IFetcher {
147147
headers['content-type'] = 'application/json';
148148
}
149149

150+
if (Object.keys(cookies).length) {
151+
headers['cookie'] = Object.entries(cookies)
152+
.map(([key, value]) => `${key}=${value}`)
153+
.join('; ');
154+
}
155+
150156
let resolvedPath = resolvePath(path, pathParams) || '';
151157
const pathWithSearchParams = `${resolvedPath}${
152158
searchParams.toString() ? '?' + searchParams.toString() : ''

0 commit comments

Comments
 (0)