Skip to content

Commit

Permalink
#119 refactor: Rename the config change listener to be more inline wi…
Browse files Browse the repository at this point in the history
…th others
  • Loading branch information
TWilkin committed May 7, 2024
1 parent 2124c25 commit 4bb3531
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 14 deletions.
16 changes: 8 additions & 8 deletions common/node/common/src/services/ConfigRetrieverService.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ describe("ConfigRetrieverService", () => {

test(`not required no restart ${isNeeded} ${usedConfig} ${hasConfig}`, () => {
const listener = {
configUpdate: jest.fn(),
onConfigChange: jest.fn(),
};

subject.addListener(ConfigFileType.Users, listener);
Expand Down Expand Up @@ -118,33 +118,33 @@ describe("ConfigRetrieverService", () => {
expect(setConfig).toHaveBeenCalledTimes(1);
expect(setConfig).toHaveBeenCalledWith("users", { users: ["tom"] }, "checky");

expect(listener.configUpdate).toHaveBeenCalledWith(ConfigFileType.Users);
expect(listener.onConfigChange).toHaveBeenCalledWith(ConfigFileType.Users);
});
});
});

describe("listeners", () => {
test("add and remove", () => {
const listener = {
configUpdate: jest.fn(),
onConfigChange: jest.fn(),
};

subject.addListener(ConfigFileType.Users, listener);

// it is called with the right type
subject.message("config", "users", "change", { payload: {}, checksum: "checky" });
expect(listener.configUpdate).toHaveBeenCalledWith(ConfigFileType.Users);
expect(listener.onConfigChange).toHaveBeenCalledWith(ConfigFileType.Users);

// it's not called with the wrong type
listener.configUpdate.mockReset();
listener.onConfigChange.mockReset();
subject.message("config", "devices", "change", { payload: {}, checksum: "checky" });
expect(listener.configUpdate).not.toHaveBeenCalledWith(ConfigFileType.Users);
expect(listener.onConfigChange).not.toHaveBeenCalledWith(ConfigFileType.Users);

// removing it stops it being called
listener.configUpdate.mockReset();
listener.onConfigChange.mockReset();
subject.removeListener(ConfigFileType.Users, listener);
subject.message("config", "users", "change", { payload: {}, checksum: "checky" });
expect(listener.configUpdate).not.toHaveBeenCalledWith(ConfigFileType.Users);
expect(listener.onConfigChange).not.toHaveBeenCalledWith(ConfigFileType.Users);
});
});
});
12 changes: 6 additions & 6 deletions common/node/common/src/services/ConfigRetrieverService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ interface ConfigMessage extends Message {
checksum: string;
}

export interface ConfigListener {
export interface ConfigChangeListener {
/** Called when one of the ConfigFileTypes this listener is registered for is updated. */
configUpdate(type: ConfigFileType): void;
onConfigChange(type: ConfigFileType): void;
}

@Service()
export class ConfigRetrieverService implements MqttConsumer<ConfigMessage> {
private static readonly topicType = "config";
private static readonly topicAction = "change";

private listeners: { [key in ConfigFileType]?: ConfigListener[] };
private listeners: { [key in ConfigFileType]?: ConfigChangeListener[] };

constructor(
private config: ConfigService,
Expand All @@ -30,7 +30,7 @@ export class ConfigRetrieverService implements MqttConsumer<ConfigMessage> {
}

/** Add a listener for changes to ConfigFileType `type`. */
public addListener(type: ConfigFileType, listener: ConfigListener) {
public addListener(type: ConfigFileType, listener: ConfigChangeListener) {
if (!this.listeners[type]) {
this.listeners[type] = [];
}
Expand All @@ -39,7 +39,7 @@ export class ConfigRetrieverService implements MqttConsumer<ConfigMessage> {
}

/** Remove an already registered listener from changes to ConfigFileType `type`. */
public removeListener(type: ConfigFileType, listener: ConfigListener) {
public removeListener(type: ConfigFileType, listener: ConfigChangeListener) {
this.listeners[type] = this.listeners[type]?.filter((l) => l !== listener);
}

Expand Down Expand Up @@ -96,7 +96,7 @@ export class ConfigRetrieverService implements MqttConsumer<ConfigMessage> {
this.config.setConfig(type, payload, checksum);

// now notify the listeners if there are any
this.listeners[type]?.forEach((listener) => listener.configUpdate(type));
this.listeners[type]?.forEach((listener) => listener.onConfigChange(type));
}
}
}
Expand Down
1 change: 1 addition & 0 deletions common/node/common/src/services/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from "./ConfigRetrieverService";
export * from "./ConfigService";
export { default as FileService } from "./FileService";
export * from "./IntervalParserService";
Expand Down

0 comments on commit 4bb3531

Please sign in to comment.