This commit fixes a bug where the check states of tree nodes were not
correctly updated upon selecting predefined groups like "Standard",
"Strict", "None" and "All".
It resolves the issue by manually triggering of updates for mutated
array containing selected scripts.
It enhances test coverage to prevent regression and verify the correct
behavior of state updates.
This bug was introduced in commit
4995e49c46, which optimized reactivity by
removing deep state tracking.
78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import { IUserSelection } from '@/application/Context/State/Selection/IUserSelection';
|
|
import { SelectedScript } from '@/application/Context/State/Selection/SelectedScript';
|
|
import { IScript } from '@/domain/IScript';
|
|
import { StubWithObservableMethodCalls } from './StubWithObservableMethodCalls';
|
|
import { EventSourceStub } from './EventSourceStub';
|
|
|
|
export class UserSelectionStub
|
|
extends StubWithObservableMethodCalls<IUserSelection>
|
|
implements IUserSelection {
|
|
public readonly changed = new EventSourceStub<readonly SelectedScript[]>();
|
|
|
|
public selectedScripts: readonly SelectedScript[] = [];
|
|
|
|
constructor(private readonly allScripts: readonly IScript[]) {
|
|
super();
|
|
}
|
|
|
|
public withSelectedScripts(selectedScripts: readonly SelectedScript[]): this {
|
|
this.selectedScripts = selectedScripts;
|
|
return this;
|
|
}
|
|
|
|
public triggerSelectionChangedEvent(scripts: readonly SelectedScript[]): this {
|
|
this.changed.notify(scripts);
|
|
return this;
|
|
}
|
|
|
|
public areAllSelected(): boolean {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public isAnySelected(): boolean {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public removeAllInCategory(): void {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public addOrUpdateAllInCategory(): void {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public addSelectedScript(scriptId: string, revert: boolean): void {
|
|
this.registerMethodCall({
|
|
methodName: 'addSelectedScript',
|
|
args: [scriptId, revert],
|
|
});
|
|
}
|
|
|
|
public addOrUpdateSelectedScript(): void {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public removeSelectedScript(scriptId: string): void {
|
|
this.registerMethodCall({
|
|
methodName: 'removeSelectedScript',
|
|
args: [scriptId],
|
|
});
|
|
}
|
|
|
|
public selectOnly(scripts: ReadonlyArray<IScript>): void {
|
|
this.selectedScripts = scripts.map((s) => new SelectedScript(s, false));
|
|
}
|
|
|
|
public isSelected(): boolean {
|
|
throw new Error('Method not implemented.');
|
|
}
|
|
|
|
public selectAll(): void {
|
|
this.selectOnly(this.allScripts);
|
|
}
|
|
|
|
public deselectAll(): void {
|
|
this.selectedScripts = [];
|
|
}
|
|
}
|