Skip to content

Commit

Permalink
Correct getAllContext() behavior
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.

Closes: #2239
Signed-off-by: Nicholas Vinson <nvinson234@gmail.com>
  • Loading branch information
nvinson committed Oct 9, 2024
1 parent 0801067 commit 1c71455
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 1c71455

Please sign in to comment.