From 15f494b3336f3dd19851cfb2fb301f53df6b5d67 Mon Sep 17 00:00:00 2001 From: reptilex Date: Tue, 9 Mar 2021 18:28:02 +0100 Subject: [PATCH] corrected tests and some bugs --- test/battery.test.ts | 352 ++++++++++++++++++++++------------- test/batteryCharging.test.ts | 321 ++++++++++++++++++++------------ test/extraAppliances.test.ts | 206 +++++++++++--------- 3 files changed, 538 insertions(+), 341 deletions(-) diff --git a/test/battery.test.ts b/test/battery.test.ts index f303ace..c518254 100644 --- a/test/battery.test.ts +++ b/test/battery.test.ts @@ -1,223 +1,309 @@ -import { html, fixture, expect, elementUpdated, assert } from '@open-wc/testing'; -import { HomeAssistant, LovelaceCardConfig } from 'custom-card-helpers'; +import { expect, elementUpdated, assert } from '@open-wc/testing'; +import { LovelaceCardConfig } from 'custom-card-helpers'; import { setViewport } from '@web/test-runner-commands'; import { TeslaStyleSolarPowerCard } from '../src/TeslaStyleSolarPowerCard.js'; import '../tesla-style-solar-power-card.js'; -import {setCard, setCardView, setCardAllInactive} from './setters.js' - +import { setCard } from './setters.js'; describe('TeslaStyleSolarPowerCard battery tests', () => { - let card:TeslaStyleSolarPowerCard; - let haCard:HTMLElement | null; - let teslaCard:HTMLElement| null | undefined; - let hass:any; - let config:LovelaceCardConfig; + let card: TeslaStyleSolarPowerCard; + let haCard: HTMLElement | null; + let teslaCard: HTMLElement | null | undefined; + let hass: any; + let config: LovelaceCardConfig; /** Tests are extended in energy_capable. * */ beforeEach(async () => { config = { - type: "custom:tesla-style-solar-power-card", - name: "Powerhouse", - house_consumption_entity: "sensor.house_consumption", - battery_soc_entity: "sensor.battery_charge", - battery_consumption_entity: "sensor.battery_consumption", - battery_to_house_entity: "sensor.battery_consumption" + type: 'custom:tesla-style-solar-power-card', + name: 'Powerhouse', + house_consumption_entity: 'sensor.house_consumption', + battery_extra_entity: 'sensor.battery_charge', + battery_consumption_entity: 'sensor.battery_consumption', + battery_to_house_entity: 'sensor.battery_consumption', }; hass = { states: { - "sensor.house_consumption": { + 'sensor.house_consumption': { attributes: { - unit_of_measurement: "W", - friendly_name: "House consumption", + unit_of_measurement: 'W', + friendly_name: 'House consumption', }, - entity_id: "sensor.house_consumption", - state: "1300", + entity_id: 'sensor.house_consumption', + state: '1300', }, - "sensor.battery_consumption": { + 'sensor.battery_consumption': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "battery_consumption", - state: "1300", + entity_id: 'battery_consumption', + state: '1300', }, - "sensor.battery_charge": { + 'sensor.battery_charge': { attributes: { - unit_of_measurement: "%", + unit_of_measurement: '%', }, - entity_id: "sensor.battery_charge", - state: "100", + entity_id: 'sensor.battery_charge', + state: '100', }, - "sensor.battery_to_house": { + 'sensor.battery_to_house': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "sensor.battery_to_house", - state: "1300", + entity_id: 'sensor.battery_to_house', + state: '1300', }, }, }; await setViewport({ width: 1200, height: 1000 }); - card = await setCard(hass, config); + card = await setCard(hass, config); // let iframe = document.createElement('iframe'); // document.body.appendChild(iframe); // let div = document.createElement('div'); // document.body. // console.log("document width " + document.body.clientWidth); // document.body.appendChild(card); - if(card.shadowRoot === null) assert.fail("No Card Shadowroot"); + if (card.shadowRoot === null) assert.fail('No Card Shadowroot'); haCard = card.shadowRoot.querySelector('ha-card'); - if(haCard === null || haCard === undefined) assert.fail("No ha-card"); - teslaCard = haCard.querySelector('#tesla-style-solar-power-card'); - if(teslaCard === null || teslaCard === undefined) assert.fail("No tesla-style-card"); + if (haCard === null || haCard === undefined) assert.fail('No ha-card'); + teslaCard = ( + haCard.querySelector('#tesla-style-solar-power-card') + ); + if (teslaCard === null || teslaCard === undefined) + assert.fail('No tesla-style-card'); }); - const setBatteryState = async (state:string) => { + const setBatteryState = async (state: string) => { hass.states['sensor.battery_charge'].state = state; card.setAttribute('hass', JSON.stringify(hass)); await elementUpdated(card); await card.setConfig(config); }; - it('has house_consumption_entity, text and icon', async () => { - const houseEntity = teslaCard?.querySelector('.house_consumption_entity') - if(houseEntity === null || houseEntity === undefined) assert.fail('No house_consumption_entity element found'); - expect(houseEntity?.querySelector('.acc_text')?.innerHTML) - .contains('1.3 kW'); - expect(houseEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:home'); + const houseEntity = teslaCard?.querySelector('.house_consumption_entity'); + if (houseEntity === null || houseEntity === undefined) + assert.fail('No house_consumption_entity element found'); + expect(houseEntity?.querySelector('.acc_text')?.innerHTML).contains( + '1.3 kW' + ); + expect( + houseEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString() + ).to.equal('mdi:home'); }); it('has battery_consumption_entity, text and icon', async () => { - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_text')?.innerHTML) - .contains('1.3 kW'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('100 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect(batteryEntity?.querySelector('.acc_text')?.innerHTML).contains( + '1.3 kW' + ); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '100 %' + ); }); it('has battery to house consumption line and circle', async () => { // await setCardConsumingFromGrid(); - const batteryToHouseLine = teslaCard?.querySelector('#battery_to_house_entity_line') - if(batteryToHouseLine === null || batteryToHouseLine === undefined) { + const batteryToHouseLine = teslaCard?.querySelector( + '#battery_to_house_entity_line' + ); + if (batteryToHouseLine === null || batteryToHouseLine === undefined) { assert.fail('No battery_to_house_line element found'); } - const batteryToHouseCircle = teslaCard?.querySelector('#battery_to_house_entity_circle') - if(batteryToHouseCircle === null || batteryToHouseCircle === undefined) { + const batteryToHouseCircle = teslaCard?.querySelector( + '#battery_to_house_entity_circle' + ); + if (batteryToHouseCircle === null || batteryToHouseCircle === undefined) { assert.fail('No batter_to_house_entity_circle element found'); } - - if(haCard === null || haCard === undefined) assert.fail("No ha-card"); - expect(batteryToHouseLine?.getAttribute('hidden')).to.equal(null); + + if (haCard === null || haCard === undefined) assert.fail('No ha-card'); + expect(batteryToHouseLine?.getAttribute('hidden')).to.equal(null); }); it('has no pv, grid or appliance icons', async () => { - const pvEntity = teslaCard?.querySelector('.pv_consumption_entity') - if(pvEntity !== null) assert.fail('No pv_consumption_entity element found'); - - const gridEntity = teslaCard?.querySelector('.grid_consumption_entity') - if(gridEntity !== null) assert.fail('No battery_consumption_entity element found'); - - const appliance1Entity = teslaCard?.querySelector('.appliance1_consumption_entity') - if(appliance1Entity !== null) assert.fail('No appliance1_consumption_entity element found'); - - const appliance2Entity = teslaCard?.querySelector('.appliance2_consumption_entity') - if(appliance2Entity !== null) assert.fail('No appliance2_consumption_entity element found'); + const pvEntity = teslaCard?.querySelector('.pv_consumption_entity'); + if (pvEntity !== null) + assert.fail('No pv_consumption_entity element found'); + + const gridEntity = teslaCard?.querySelector('.grid_consumption_entity'); + if (gridEntity !== null) + assert.fail('No battery_consumption_entity element found'); + + const appliance1Entity = teslaCard?.querySelector( + '.appliance1_consumption_entity' + ); + if (appliance1Entity !== null) + assert.fail('No appliance1_consumption_entity element found'); + const appliance2Entity = teslaCard?.querySelector( + '.appliance2_consumption_entity' + ); + if (appliance2Entity !== null) + assert.fail('No appliance2_consumption_entity element found'); }); it('has battery at 90%', async () => { - await setBatteryState("90"); + await setBatteryState('90'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-90'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('90 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-90'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '90 %' + ); }); it('has battery at 83%', async () => { - await setBatteryState("83"); + await setBatteryState('83'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-90'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('83 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-90'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '83 %' + ); }); it('has battery at 73%', async () => { - await setBatteryState("73"); + await setBatteryState('73'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-80'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('73 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-80'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '73 %' + ); }); it('has battery at 65%', async () => { - await setBatteryState("65"); + await setBatteryState('65'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-70'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('65 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-70'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '65 %' + ); }); it('has battery at 15%', async () => { - await setBatteryState("15"); + await setBatteryState('15'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-20'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('15 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-20'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '15 %' + ); }); - + it('has battery at 6%', async () => { - await setBatteryState("6"); + await setBatteryState('6'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-10'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('6 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-10'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '6 %' + ); }); - + it('has battery at 5%', async () => { - await setBatteryState("5"); + await setBatteryState('5'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-outline'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('5 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-outline'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '5 %' + ); }); - + it('has battery at 5%', async () => { - await setBatteryState("5"); + await setBatteryState('5'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-outline'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('5 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-outline'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '5 %' + ); }); - - -}); \ No newline at end of file +}); diff --git a/test/batteryCharging.test.ts b/test/batteryCharging.test.ts index 1ab7298..c3d0e71 100644 --- a/test/batteryCharging.test.ts +++ b/test/batteryCharging.test.ts @@ -4,205 +4,284 @@ import { setViewport } from '@web/test-runner-commands'; import { TeslaStyleSolarPowerCard } from '../src/TeslaStyleSolarPowerCard.js'; import '../tesla-style-solar-power-card.js'; -import {setCard} from './setters.js' - +import { setCard } from './setters.js'; describe('TeslaStyleSolarPowerCard with defaultConfig', () => { - let card:TeslaStyleSolarPowerCard; - let haCard:HTMLElement | null; - let teslaCard:HTMLElement| null | undefined; - let hass:any; - let config:LovelaceCardConfig; + let card: TeslaStyleSolarPowerCard; + let haCard: HTMLElement | null; + let teslaCard: HTMLElement | null | undefined; + let hass: any; + let config: LovelaceCardConfig; /** Tests are extended in energy_capable. * */ beforeEach(async () => { config = { - type: "custom:tesla-style-solar-power-card", - name: "Powerhouse", - generation_to_battery_entity: "sensor.battery_charging", - grid_to_battery_entity: "sensor.grid_to_battery", - battery_soc_entity: "sensor.battery_charge", - battery_consumption_entity: "sensor.battery_consumption" + type: 'custom:tesla-style-solar-power-card', + name: 'Powerhouse', + generation_to_battery_entity: 'sensor.battery_charging', + grid_to_battery_entity: 'sensor.grid_to_battery', + battery_extra_entity: 'sensor.battery_charge', + battery_consumption_entity: 'sensor.battery_consumption', }; hass = { states: { - "sensor.grid_to_battery": { + 'sensor.grid_to_battery': { attributes: { - unit_of_measurement: "W", - friendly_name: "Grid to battery", + unit_of_measurement: 'W', + friendly_name: 'Grid to battery', }, - entity_id: "sensor.grid_to_battery", - state: "1000", + entity_id: 'sensor.grid_to_battery', + state: '1000', }, - "sensor.battery_consumption": { + 'sensor.battery_consumption': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "battery_consumption", - state: "0", + entity_id: 'battery_consumption', + state: '0', }, - "sensor.battery_charging": { + 'sensor.battery_charging': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "battery_charging", - state: "1000", + entity_id: 'battery_charging', + state: '1000', }, - "sensor.battery_charge": { + 'sensor.battery_charge': { attributes: { - unit_of_measurement: "%", + unit_of_measurement: '%', }, - entity_id: "sensor.battery_charge", - state: "99", + entity_id: 'sensor.battery_charge', + state: '99', }, }, }; await setViewport({ width: 1200, height: 1000 }); - card = await setCard(hass, config); - if(card.shadowRoot === null) assert.fail("No Card Shadowroot"); + card = await setCard(hass, config); + if (card.shadowRoot === null) assert.fail('No Card Shadowroot'); haCard = card.shadowRoot.querySelector('ha-card'); - if(haCard === null || haCard === undefined) assert.fail("No ha-card"); - teslaCard = haCard.querySelector('#tesla-style-solar-power-card'); - if(teslaCard === null || teslaCard === undefined) assert.fail("No tesla-style-card"); + if (haCard === null || haCard === undefined) assert.fail('No ha-card'); + teslaCard = ( + haCard.querySelector('#tesla-style-solar-power-card') + ); + if (teslaCard === null || teslaCard === undefined) + assert.fail('No tesla-style-card'); }); - const setBatteryState = async (state:string) => { + const setBatteryState = async (state: string) => { hass.states['sensor.battery_charge'].state = state; card.setAttribute('hass', JSON.stringify(hass)); await elementUpdated(card); await card.setConfig(config); }; - - it('has battery_consumption_entity, text and icon', async () => { - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_text')?.innerHTML,"No sum of battery charging flows in acc_text of battery_entity") - .contains('2 kW'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('99 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity?.querySelector('.acc_text')?.innerHTML, + 'No sum of battery charging flows in acc_text of battery_entity' + ).contains('2 kW'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '99 %' + ); }); it('has grid to battery charging line and circle', async () => { - const gridToBatteryLine = teslaCard?.querySelector('#grid_to_battery_entity_line') - if(gridToBatteryLine === null || gridToBatteryLine === undefined) { + const gridToBatteryLine = teslaCard?.querySelector( + '#grid_to_battery_entity_line' + ); + if (gridToBatteryLine === null || gridToBatteryLine === undefined) { assert.fail('No grid_to_battery_entity_line element found'); } - const gridToBatteryCircle = teslaCard?.querySelector('#grid_to_battery_entity_circle') - if(gridToBatteryCircle === null || gridToBatteryCircle === undefined) { + const gridToBatteryCircle = teslaCard?.querySelector( + '#grid_to_battery_entity_circle' + ); + if (gridToBatteryCircle === null || gridToBatteryCircle === undefined) { assert.fail('No grid_to_battery_entity_circle element found'); } - + expect(gridToBatteryLine?.getAttribute('hidden')).to.equal(null); }); it('has solar to battery charging line and circle', async () => { - const SolarToBatteryLine = teslaCard?.querySelector('#generation_to_battery_entity_line') - if(SolarToBatteryLine === null || SolarToBatteryLine === undefined) { + const SolarToBatteryLine = teslaCard?.querySelector( + '#generation_to_battery_entity_line' + ); + if (SolarToBatteryLine === null || SolarToBatteryLine === undefined) { assert.fail('No generation_to_battery_entity_line element found'); } - const SolarToBatteryCircle = teslaCard?.querySelector('#generation_to_battery_entity_circle') - if(SolarToBatteryCircle === null || SolarToBatteryCircle === undefined) { + const SolarToBatteryCircle = teslaCard?.querySelector( + '#generation_to_battery_entity_circle' + ); + if (SolarToBatteryCircle === null || SolarToBatteryCircle === undefined) { assert.fail('No generation_to_battery_entity_circle element found'); } - + expect(SolarToBatteryLine?.getAttribute('hidden')).to.equal(null); }); it('has no pv, grid or appliance icons', async () => { - const pvEntity = teslaCard?.querySelector('.pv_consumption_entity') - if(pvEntity !== null) assert.fail('No pv_consumption_entity element found'); - - const gridEntity = teslaCard?.querySelector('.grid_consumption_entity') - if(gridEntity !== null) assert.fail('No battery_consumption_entity element found'); - - const appliance1Entity = teslaCard?.querySelector('.appliance1_consumption_entity') - if(appliance1Entity !== null) assert.fail('No appliance1_consumption_entity element found'); - - const appliance2Entity = teslaCard?.querySelector('.appliance2_consumption_entity') - if(appliance2Entity !== null) assert.fail('No appliance2_consumption_entity element found'); + const pvEntity = teslaCard?.querySelector('.pv_consumption_entity'); + if (pvEntity !== null) + assert.fail('No pv_consumption_entity element found'); + + const gridEntity = teslaCard?.querySelector('.grid_consumption_entity'); + if (gridEntity !== null) + assert.fail('No battery_consumption_entity element found'); + const appliance1Entity = teslaCard?.querySelector( + '.appliance1_consumption_entity' + ); + if (appliance1Entity !== null) + assert.fail('No appliance1_consumption_entity element found'); + + const appliance2Entity = teslaCard?.querySelector( + '.appliance2_consumption_entity' + ); + if (appliance2Entity !== null) + assert.fail('No appliance2_consumption_entity element found'); }); it('has battery at 100%', async () => { - await setBatteryState("100"); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('100 %'); + await setBatteryState('100'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '100 %' + ); }); it('has battery at 83%', async () => { - await setBatteryState("83"); + await setBatteryState('83'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-90'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('83 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-90'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '83 %' + ); }); it('has battery at 73%', async () => { - await setBatteryState("73"); + await setBatteryState('73'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-80'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('73 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-80'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '73 %' + ); }); it('has battery at 65%', async () => { - await setBatteryState("65"); + await setBatteryState('65'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-70'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('65 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-70'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '65 %' + ); }); it('has battery at 15%', async () => { - await setBatteryState("15"); + await setBatteryState('15'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-20'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('15 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-20'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '15 %' + ); }); - + it('has battery at 6%', async () => { - await setBatteryState("6"); + await setBatteryState('6'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-10'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('6 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-10'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '6 %' + ); }); - + it('has battery at 5%', async () => { - await setBatteryState("5"); + await setBatteryState('5'); card.requestUpdate(); - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity === null || batteryEntity === undefined) assert.fail('No battery_consumption_entity element found'); - expect(batteryEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:battery-charging-outline'); - expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML) - .contains('5 %'); + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity === null || batteryEntity === undefined) + assert.fail('No battery_consumption_entity element found'); + expect( + batteryEntity + ?.querySelector('.acc_icon') + ?.getAttribute('icon') + ?.toString() + ).to.equal('mdi:battery-charging-outline'); + expect(batteryEntity?.querySelector('.acc_text_extra')?.innerHTML).contains( + '5 %' + ); }); - - -}); \ No newline at end of file +}); diff --git a/test/extraAppliances.test.ts b/test/extraAppliances.test.ts index aad2b59..3e458a8 100644 --- a/test/extraAppliances.test.ts +++ b/test/extraAppliances.test.ts @@ -4,153 +4,185 @@ import { setViewport } from '@web/test-runner-commands'; import { TeslaStyleSolarPowerCard } from '../src/TeslaStyleSolarPowerCard.js'; import '../tesla-style-solar-power-card.js'; -import {setCard} from './setters.js' - +import { setCard } from './setters.js'; describe('TeslaStyleSolarPowerCard with extra appliances', () => { - let card:TeslaStyleSolarPowerCard; - let haCard:HTMLElement | null; - let teslaCard:HTMLElement| null | undefined; - let hass:any; - let config:LovelaceCardConfig; + let card: TeslaStyleSolarPowerCard; + let haCard: HTMLElement | null; + let teslaCard: HTMLElement | null | undefined; + let hass: any; + let config: LovelaceCardConfig; /** Tests are extended in energy_capable. * */ beforeEach(async () => { config = { - type: "custom:tesla-style-solar-power-card", - name: "Powerhouse", - house_consumption_entity: "sensor.house_consumption", - grid_to_house_entity: "sensor.grid_to_house", - appliance1_consumption_entity: "sensor.car_consumption", - appliance1_state_entity: "sensor.car_soc", - appliance2_consumption_entity: "sensor.heating_consumption", - appliance2_state_entity: "sensor.heating_current_function", + type: 'custom:tesla-style-solar-power-card', + name: 'Powerhouse', + house_consumption_entity: 'sensor.house_consumption', + grid_to_house_entity: 'sensor.grid_to_house', + appliance1_consumption_entity: 'sensor.car_consumption', + appliance1_extra_entity: 'sensor.car_soc', + appliance2_consumption_entity: 'sensor.heating_consumption', + appliance2_extra_entity: 'sensor.heating_current_function', }; hass = { states: { - "sensor.heating_consumption": { + 'sensor.heating_consumption': { attributes: { - unit_of_measurement: "W", - friendly_name: "Heating consumption", + unit_of_measurement: 'W', + friendly_name: 'Heating consumption', }, - entity_id: "heating_consumption", - state: "1000", + entity_id: 'heating_consumption', + state: '1000', }, - "sensor.heating_current_function": { + 'sensor.heating_current_function': { attributes: { unit_of_measurement: null, - friendly_name: "Heating function", + friendly_name: 'Heating function', }, - entity_id: "heating_current_function", - state: "Warm water", + entity_id: 'heating_current_function', + state: 'Warm water', }, - "sensor.car_consumption": { + 'sensor.car_consumption': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "car_consumption", - state: "2000", + entity_id: 'car_consumption', + state: '2000', }, - "sensor.car_soc": { + 'sensor.car_soc': { attributes: { - unit_of_measurement: "%", + unit_of_measurement: '%', }, - entity_id: "car_soc", - state: "90", + entity_id: 'car_soc', + state: '90', }, - "sensor.house_consumption": { + 'sensor.house_consumption': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "house_consumption", - state: "4000", + entity_id: 'house_consumption', + state: '4000', }, - "sensor.grid_to_house": { + 'sensor.grid_to_house': { attributes: { - unit_of_measurement: "W", + unit_of_measurement: 'W', }, - entity_id: "grid_to_house", - state: "4000", + entity_id: 'grid_to_house', + state: '4000', }, }, }; await setViewport({ width: 1200, height: 1000 }); - card = await setCard(hass, config); - if(card.shadowRoot === null) assert.fail("No Card Shadowroot"); + card = await setCard(hass, config); + if (card.shadowRoot === null) assert.fail('No Card Shadowroot'); haCard = card.shadowRoot.querySelector('ha-card'); - if(haCard === null || haCard === undefined) assert.fail("No ha-card"); - teslaCard = haCard.querySelector('#tesla-style-solar-power-card'); - if(teslaCard === null || teslaCard === undefined) assert.fail("No tesla-style-card"); + if (haCard === null || haCard === undefined) assert.fail('No ha-card'); + teslaCard = ( + haCard.querySelector('#tesla-style-solar-power-card') + ); + if (teslaCard === null || teslaCard === undefined) + assert.fail('No tesla-style-card'); }); - it('has house_consumption_entity, text and icon', async () => { - const gridEntity = teslaCard?.querySelector('.house_consumption_entity') - if(gridEntity === null || gridEntity === undefined) assert.fail('No house_consumption_entity element found'); - expect(gridEntity?.querySelector('.acc_text')?.innerHTML) - .contains('4 kW'); - expect(gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:home'); + const gridEntity = teslaCard?.querySelector('.house_consumption_entity'); + if (gridEntity === null || gridEntity === undefined) + assert.fail('No house_consumption_entity element found'); + expect(gridEntity?.querySelector('.acc_text')?.innerHTML).contains('4 kW'); + expect( + gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString() + ).to.equal('mdi:home'); }); it('has appliance1_consumption_entity, text and icon', async () => { - const gridEntity = teslaCard?.querySelector('.appliance1_consumption_entity') - if(gridEntity === null || gridEntity === undefined) assert.fail('No appliance1_consumption_entity element found'); - expect(gridEntity?.querySelector('.acc_text')?.innerHTML,"No sum of appliance1 charging flows in acc_text of grid_entity") - .contains('2 kW'); - expect(gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:car-sports'); - expect(gridEntity?.querySelector('.acc_text_extra')?.innerHTML,"Appliance 1 extra text is wrong") - .contains('90 %'); + const gridEntity = teslaCard?.querySelector( + '.appliance1_consumption_entity' + ); + if (gridEntity === null || gridEntity === undefined) + assert.fail('No appliance1_consumption_entity element found'); + expect( + gridEntity?.querySelector('.acc_text')?.innerHTML, + 'No sum of appliance1 charging flows in acc_text of grid_entity' + ).contains('2 kW'); + expect( + gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString() + ).to.equal('mdi:car-sports'); + expect( + gridEntity?.querySelector('.acc_text_extra')?.innerHTML, + 'Appliance 1 extra text is wrong' + ).contains('90 %'); }); it('has appliance2_consumption_entity, text and icon', async () => { - const gridEntity = teslaCard?.querySelector('.appliance2_consumption_entity') - if(gridEntity === null || gridEntity === undefined) assert.fail('No appliance2_consumption_entity element found'); - expect(gridEntity?.querySelector('.acc_text')?.innerHTML,"No sum of appliance2 charging flows in acc_text of grid_entity") - .contains('1 kW'); - expect(gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString()) - .to.equal('mdi:air-filter'); - expect(gridEntity?.querySelector('.acc_text_extra')?.innerHTML,"Appliance 2 extra text is wrong") - .contains('Warm water'); + const gridEntity = teslaCard?.querySelector( + '.appliance2_consumption_entity' + ); + if (gridEntity === null || gridEntity === undefined) + assert.fail('No appliance2_consumption_entity element found'); + expect( + gridEntity?.querySelector('.acc_text')?.innerHTML, + 'No sum of appliance2 charging flows in acc_text of grid_entity' + ).contains('1 kW'); + expect( + gridEntity?.querySelector('.acc_icon')?.getAttribute('icon')?.toString() + ).to.equal('mdi:air-filter'); + expect( + gridEntity?.querySelector('.acc_text_extra')?.innerHTML, + 'Appliance 2 extra text is wrong' + ).contains('Warm water'); }); it('has appliance1 line and circle', async () => { - const appliance = teslaCard?.querySelector('#appliance1_consumption_entity_line') - if(appliance === null || appliance === undefined) { + const appliance = teslaCard?.querySelector( + '#appliance1_consumption_entity_line' + ); + if (appliance === null || appliance === undefined) { assert.fail('No appliance1_consumption_entity_line element found'); } - const applianceCircle = teslaCard?.querySelector('#appliance1_consumption_entity_circle') - if(applianceCircle === null || applianceCircle === undefined) { + const applianceCircle = teslaCard?.querySelector( + '#appliance1_consumption_entity_circle' + ); + if (applianceCircle === null || applianceCircle === undefined) { assert.fail('No appliance1_consumption_entity_circle element found'); } expect(appliance?.getAttribute('hidden')).to.equal(null); }); it('has appliance2 line and circle', async () => { - const applianceLine = teslaCard?.querySelector('#appliance2_consumption_entity_line') - if(applianceLine === null || applianceLine === undefined) { + const applianceLine = teslaCard?.querySelector( + '#appliance2_consumption_entity_line' + ); + if (applianceLine === null || applianceLine === undefined) { assert.fail('No appliance2_consumption_entity_line element found'); } - const applianceCircle = teslaCard?.querySelector('#appliance1_consumption_entity_circle') - if(applianceCircle === null || applianceCircle === undefined) { + const applianceCircle = teslaCard?.querySelector( + '#appliance1_consumption_entity_circle' + ); + if (applianceCircle === null || applianceCircle === undefined) { assert.fail('No appliance2_consumption_entity_circle element found'); } - + expect(applianceLine?.getAttribute('hidden')).to.equal(null); }); it('has no pv, grid or battery icons', async () => { // assert.fail(haCard?.innerHTML); - const pvEntity = teslaCard?.querySelector('.generation_yield_entity') - if(pvEntity !== null) assert.fail('pv_consumption_entity element found, should not be there'); - - const batteryEntity = teslaCard?.querySelector('.battery_consumption_entity') - if(batteryEntity !== null) assert.fail('battery_consumption_entity element found, should not be there'); - - const gridEntity = teslaCard?.querySelector('.grid_consumption_entity') - if(gridEntity !== null) assert.fail('grid_consumption_entity element found, should not be there'); + const pvEntity = teslaCard?.querySelector('.generation_yield_entity'); + if (pvEntity !== null) + assert.fail('pv_consumption_entity element found, should not be there'); + + const batteryEntity = teslaCard?.querySelector( + '.battery_consumption_entity' + ); + if (batteryEntity !== null) + assert.fail( + 'battery_consumption_entity element found, should not be there' + ); + + const gridEntity = teslaCard?.querySelector('.grid_consumption_entity'); + if (gridEntity !== null) + assert.fail('grid_consumption_entity element found, should not be there'); }); - -}); \ No newline at end of file +});