195 lines
5.9 KiB
TypeScript
195 lines
5.9 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import {
|
|
isDeletableEntity,
|
|
deleteEntity,
|
|
} from "../../../src/common/entity/delete_entity";
|
|
import type { HomeAssistant } from "../../../src/types";
|
|
import type { EntityRegistryEntry } from "../../../src/data/entity_registry";
|
|
import type { IntegrationManifest } from "../../../src/data/integration";
|
|
import type { ConfigEntry } from "../../../src/data/config_entries";
|
|
import type { Helper } from "../../../src/panels/config/helpers/const";
|
|
|
|
describe("isDeletableEntity", () => {
|
|
it("should return true for restored entities", () => {
|
|
const hass = {
|
|
states: { "light.test": { attributes: { restored: true } } },
|
|
} as unknown as HomeAssistant;
|
|
const result = isDeletableEntity(hass, "light.test", [], [], [], []);
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("should return false for non-restored entities without config entry", () => {
|
|
const hass = {
|
|
states: { "light.test": { attributes: {} } },
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "light.test" },
|
|
] as EntityRegistryEntry[];
|
|
const result = isDeletableEntity(
|
|
hass,
|
|
"light.test",
|
|
[],
|
|
entityRegistry,
|
|
[],
|
|
[]
|
|
);
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("should return true for helper domain entities", () => {
|
|
const hass = {
|
|
states: { "input_boolean.test": { attributes: {} } },
|
|
config: { components: ["input_boolean"] },
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "input_boolean.test", unique_id: "123" },
|
|
] as EntityRegistryEntry[];
|
|
const fetchedHelpers = [{ id: "123" }] as Helper[];
|
|
const result = isDeletableEntity(
|
|
hass,
|
|
"input_boolean.test",
|
|
[],
|
|
entityRegistry,
|
|
[],
|
|
fetchedHelpers
|
|
);
|
|
expect(result).toBe(true);
|
|
});
|
|
|
|
it("should return false for non-helper domain entities without restored attribute", () => {
|
|
const hass = {
|
|
states: { "light.test": { attributes: {} } },
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "light.test" },
|
|
] as EntityRegistryEntry[];
|
|
const result = isDeletableEntity(
|
|
hass,
|
|
"light.test",
|
|
[],
|
|
entityRegistry,
|
|
[],
|
|
[]
|
|
);
|
|
expect(result).toBe(false);
|
|
});
|
|
|
|
it("should return true for entities with helper integration type", () => {
|
|
const hass = {
|
|
states: { "light.test": { attributes: {} } },
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "light.test", config_entry_id: "config_1" },
|
|
] as EntityRegistryEntry[];
|
|
const configEntries = [
|
|
{ entry_id: "config_1", domain: "light" },
|
|
] as ConfigEntry[];
|
|
const manifests = [
|
|
{ domain: "light", integration_type: "helper" },
|
|
] as IntegrationManifest[];
|
|
const result = isDeletableEntity(
|
|
hass,
|
|
"light.test",
|
|
manifests,
|
|
entityRegistry,
|
|
configEntries,
|
|
[]
|
|
);
|
|
expect(result).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("deleteEntity", () => {
|
|
it("should call removeEntityRegistryEntry for restored entities", () => {
|
|
const removeEntityRegistryEntry = vi.fn();
|
|
const hass = {
|
|
states: { "light.test": { attributes: { restored: true } } },
|
|
callWS: removeEntityRegistryEntry,
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "light.test" },
|
|
] as EntityRegistryEntry[];
|
|
deleteEntity(hass, "light.test", [], entityRegistry, [], []);
|
|
expect(removeEntityRegistryEntry).toHaveBeenCalledWith({
|
|
type: "config/entity_registry/remove",
|
|
entity_id: "light.test",
|
|
});
|
|
});
|
|
|
|
it("should call deleteConfigEntry for entities with helper integration type", () => {
|
|
const deleteConfigEntry = vi.fn();
|
|
const hass = {
|
|
states: { "light.test": { attributes: {} } },
|
|
callApi: deleteConfigEntry,
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "light.test", config_entry_id: "config_1" },
|
|
] as EntityRegistryEntry[];
|
|
const configEntries = [
|
|
{ entry_id: "config_1", domain: "light" },
|
|
] as ConfigEntry[];
|
|
const manifests = [
|
|
{ domain: "light", integration_type: "helper" },
|
|
] as IntegrationManifest[];
|
|
deleteEntity(
|
|
hass,
|
|
"light.test",
|
|
manifests,
|
|
entityRegistry,
|
|
configEntries,
|
|
[]
|
|
);
|
|
expect(deleteConfigEntry).toHaveBeenCalledOnce();
|
|
});
|
|
|
|
it("should call HELPERS_CRUD.delete for helper domain entities", () => {
|
|
const deleteCall = vi.fn();
|
|
const hass = {
|
|
states: { "input_boolean.test": { attributes: {} } },
|
|
config: { components: ["input_boolean"] },
|
|
callWS: deleteCall,
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "input_boolean.test", unique_id: "123" },
|
|
] as EntityRegistryEntry[];
|
|
const fetchedHelpers = [{ id: "123" }] as Helper[];
|
|
deleteEntity(
|
|
hass,
|
|
"input_boolean.test",
|
|
[],
|
|
entityRegistry,
|
|
[],
|
|
fetchedHelpers
|
|
);
|
|
expect(deleteCall).toHaveBeenCalledWith({
|
|
type: "input_boolean/delete",
|
|
input_boolean_id: "123",
|
|
});
|
|
});
|
|
|
|
it("should call removeEntityRegistryEntry for helper domain entities", () => {
|
|
const removeEntityRegistryEntry = vi.fn();
|
|
const hass = {
|
|
states: { "input_boolean.test": { attributes: { restored: true } } },
|
|
config: { components: ["input_boolean"] },
|
|
callWS: removeEntityRegistryEntry,
|
|
} as unknown as HomeAssistant;
|
|
const entityRegistry = [
|
|
{ entity_id: "input_boolean.test", unique_id: "124" },
|
|
] as EntityRegistryEntry[];
|
|
const fetchedHelpers = [{ id: "123" }] as Helper[];
|
|
deleteEntity(
|
|
hass,
|
|
"input_boolean.test",
|
|
[],
|
|
entityRegistry,
|
|
[],
|
|
fetchedHelpers
|
|
);
|
|
expect(removeEntityRegistryEntry).toHaveBeenCalledWith({
|
|
type: "config/entity_registry/remove",
|
|
entity_id: "input_boolean.test",
|
|
});
|
|
});
|
|
});
|