Skip to content

Commit

Permalink
fix: rootNode.getAllContext() returns empty object (#2483)
Browse files Browse the repository at this point in the history
Correct getAllContext() to return the root node's context in addition to specified defaults.

Fixes: #2239
  • Loading branch information
nvinson authored Oct 10, 2024
1 parent 01cf3f8 commit 1eb4dca
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
10 changes: 2 additions & 8 deletions src/construct.ts
Original file line number Diff line number Diff line change
Expand Up @@ -245,14 +245,8 @@ export class Node {
* @returns The context object or an empty object if there is discovered context
*/
public getAllContext(defaults?: object): any {
if (typeof defaults === 'undefined') {
defaults = {};
}

if (this.scope === undefined) { return defaults; }

const value = { ...this._context, ...defaults };
return this.scope && this.scope.node.getAllContext(value);
return this.scopes.reverse()
.reduce((a, s) => ({ ...(s.node._context), ...a }), { ...defaults });
}

/**
Expand Down
17 changes: 17 additions & 0 deletions test/construct.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,23 @@ test('construct.getContext(key) throws if context is not defined', () => {
}).toThrowError(`No context value present for ${key} key`);
});

test('construct.getAllContext can be used to read the full context of a root node', () => {
// GIVEN
const context = {
ctx1: 12,
ctx2: 'hello',
};

// WHEN
const t = new Root();
for (const [k, v] of Object.entries(context)) {
t.node.setContext(k, v);
}

// THEN
expect(t.node.getAllContext()).toStrictEqual(context);
});

test('construct.getAllContext can be used to read the full context of a node', () => {
// GIVEN
const context = {
Expand Down

0 comments on commit 1eb4dca

Please sign in to comment.