Skip to content

Commit 0c0f505

Browse files
authored
Allow enabled: true to be set in config overrides, allow empty objects to overwrite (#1433)
1 parent 733eb9e commit 0c0f505

File tree

13 files changed

+258
-5
lines changed

13 files changed

+258
-5
lines changed

.changeset/small-tables-push.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@adobe/alloy": patch
3+
---
4+
5+
Allow enabled: true to be set in config overrides, allow empty objects to overwrite.

packages/core/src/utils/filterObject.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const filterObject = (obj, predicate) => {
4040
return { ...result, [key]: filteredValue };
4141
}
4242
// value is not an object, test predicate
43-
if (predicate(value)) {
43+
if (predicate(value, key)) {
4444
return { ...result, [key]: value };
4545
}
4646
return result;

packages/core/src/utils/prepareConfigOverridesForEdge.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ export default (configuration) => {
2525
return null;
2626
}
2727
// remove entries that are empty strings or arrays
28-
const configOverrides = filterObject(configuration, (value) => {
28+
const configOverrides = filterObject(configuration, (value, key) => {
2929
if (isNil(value)) {
3030
return false;
3131
}
32-
if (isBoolean(value)) {
32+
// We want to remove all the { enabled: true } values, but leave any other boolean values.
33+
// Experience Edge will not accept { enabled: true } values as true is the default for "enabled".
34+
if (isBoolean(value) && (key !== "enabled" || value === false)) {
3335
return true;
3436
}
3537
if (isNumber(value)) {

packages/core/src/utils/request/createRequestParams.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,8 @@ export default ({ localConfigOverrides, globalConfigOverrides, payload }) => {
3939
) {
4040
payload.mergeConfigOverride(localConfigOverridesWithoutDatastreamId);
4141
}
42+
43+
payload.finalizeConfigOverrides();
44+
4245
return requestParams;
4346
};

packages/core/src/utils/request/createRequestPayload.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,14 @@ export default (options) => {
8888
mergeMeta: createMerger(content, "meta"),
8989
mergeState: createMerger(content, "meta.state"),
9090
mergeQuery: createMerger(content, "query"),
91-
mergeConfigOverride: (updates) =>
92-
mergeConfigOverrides(prepareConfigOverridesForEdge(updates)),
91+
mergeConfigOverride: (updates) => mergeConfigOverrides(updates),
92+
finalizeConfigOverrides: () => {
93+
if (content.meta?.configOverrides) {
94+
content.meta.configOverrides = prepareConfigOverridesForEdge(
95+
content.meta.configOverrides,
96+
);
97+
}
98+
},
9399
addIdentity,
94100
hasIdentity,
95101
toJSON() {

packages/core/test/integration/specs/Command Logic/configOverrides.spec.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,67 @@ describe("Config overrides", () => {
4646
},
4747
});
4848
});
49+
50+
test("should allow you to disable a service in the base config, but enable it in a send event call", async ({
51+
alloy,
52+
worker,
53+
networkRecorder,
54+
}) => {
55+
worker.use(...[sendEventHandler]);
56+
57+
const config = structuredClone(alloyConfig);
58+
await alloy("configure", {
59+
...config,
60+
edgeConfigOverrides: {
61+
com_adobe_analytics: {
62+
enabled: false,
63+
},
64+
},
65+
});
66+
67+
await alloy("sendEvent", {
68+
edgeConfigOverrides: {
69+
com_adobe_analytics: {
70+
enabled: true,
71+
},
72+
},
73+
});
74+
75+
const call = await networkRecorder.findCall(/edge\.adobedc\.net/);
76+
expect(call.request?.body?.meta?.configOverrides).toBeNull();
77+
});
78+
79+
test("should allow you to disable a service in the base config, but enable it in a send event call with extra parameters", async ({
80+
alloy,
81+
worker,
82+
networkRecorder,
83+
}) => {
84+
worker.use(...[sendEventHandler]);
85+
86+
const config = structuredClone(alloyConfig);
87+
await alloy("configure", {
88+
...config,
89+
edgeConfigOverrides: {
90+
com_adobe_analytics: {
91+
enabled: false,
92+
},
93+
},
94+
});
95+
96+
await alloy("sendEvent", {
97+
edgeConfigOverrides: {
98+
com_adobe_analytics: {
99+
enabled: true,
100+
reportSuites: ["reportSuite1"],
101+
},
102+
},
103+
});
104+
105+
const call = await networkRecorder.findCall(/edge\.adobedc\.net/);
106+
expect(call.request?.body?.meta?.configOverrides).toEqual({
107+
com_adobe_analytics: {
108+
reportSuites: ["reportSuite1"],
109+
},
110+
});
111+
});
49112
});

packages/core/test/unit/specs/components/Consent/injectSendSetConsentRequest.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ describe("Consent:injectSendSetConsentRequest", () => {
2626
setConsent: vi.fn(),
2727
addIdentity: vi.fn(),
2828
mergeConfigOverride: vi.fn(),
29+
finalizeConfigOverrides: vi.fn(),
2930
};
3031
createConsentRequestPayload = vi.fn().mockReturnValue(requestPayload);
3132
request = {

packages/core/test/unit/specs/components/Identity/getIdentity/createGetIdentity.spec.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ describe("Identity::createGetIdentity", () => {
2222
sendEdgeNetworkRequest = vi.fn();
2323
requestPayload = {
2424
mergeConfigOverride: vi.fn(),
25+
finalizeConfigOverrides: vi.fn(),
2526
type: vi.fn().mockReturnValue("payload"),
2627
};
2728
createIdentityRequestPayload = vi.fn().mockReturnValue(requestPayload);
@@ -46,10 +47,12 @@ describe("Identity::createGetIdentity", () => {
4647
it("each getIdentity call should create new payloads and requests", () => {
4748
const payload1 = {
4849
mergeConfigOverride: vi.fn(),
50+
finalizeConfigOverrides: vi.fn(),
4951
type: vi.fn().mockReturnValue("payload1"),
5052
};
5153
const payload2 = {
5254
mergeConfigOverride: vi.fn(),
55+
finalizeConfigOverrides: vi.fn(),
5356
type: vi.fn().mockReturnValue("payload2"),
5457
};
5558
const request1 = {

packages/core/test/unit/specs/core/createEventManager.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ describe("createEventManager", () => {
6464
requestPayload = {
6565
addEvent: vi.fn(),
6666
mergeConfigOverride: vi.fn(),
67+
finalizeConfigOverrides: vi.fn(),
6768
};
6869
const createDataCollectionRequestPayload = () => {
6970
return requestPayload;

packages/core/test/unit/specs/utils/filterObject.spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,14 @@ describe("utils:filterObject", () => {
6060
},
6161
});
6262
});
63+
it("should pass the key to the predicate", () => {
64+
const obj = {
65+
a: 5,
66+
b: 6,
67+
};
68+
const predicate = (_value, key) => key === "b";
69+
expect(filterObject(obj, predicate)).toEqual({
70+
b: 6,
71+
});
72+
});
6373
});

0 commit comments

Comments
 (0)