/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.model.persistence.extensions; import static org.junit.Assert.*; import java.util.List; import java.util.Set; import org.eclipse.smarthome.core.items.GenericItem; import org.eclipse.smarthome.core.library.types.DecimalType; import org.eclipse.smarthome.core.persistence.HistoricItem; import org.eclipse.smarthome.core.persistence.PersistenceService; import org.eclipse.smarthome.core.persistence.PersistenceServiceRegistry; import org.eclipse.smarthome.core.types.Command; import org.eclipse.smarthome.core.types.State; import org.eclipse.smarthome.model.persistence.tests.TestPersistenceService; import org.joda.time.DateMidnight; import org.joda.time.DateTime; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author Kai Kreuzer - Initial contribution and API * @author Chris Jackson * @author Jan N. Klug */ @SuppressWarnings("deprecation") public class PersistenceExtensionsTest { private PersistenceServiceRegistry registry = new PersistenceServiceRegistry() { private PersistenceService testPersistenceService = new TestPersistenceService(); @Override public String getDefaultId() { return null; } @Override public PersistenceService getDefault() { return testPersistenceService; } @Override public Set<PersistenceService> getAll() { return null; } @Override public PersistenceService get(String serviceId) { return testPersistenceService; } }; private PersistenceExtensions ext; private GenericItem item; @Before public void setUp() { ext = new PersistenceExtensions(); ext.setPersistenceServiceRegistry(registry); item = new GenericItem("Test", "Test") { @Override public List<Class<? extends State>> getAcceptedDataTypes() { return null; } @Override public List<Class<? extends Command>> getAcceptedCommandTypes() { return null; } }; } @After public void tearDown() { ext.unsetPersistenceServiceRegistry(registry); } @Test public void testHistoricState() { HistoricItem historicItem = PersistenceExtensions.historicState(item, new DateMidnight(2012, 1, 1), "test"); assertEquals("2012", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(item, new DateMidnight(2011, 12, 31), "test"); assertEquals("2011", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(item, new DateMidnight(2011, 1, 1), "test"); assertEquals("2011", historicItem.getState().toString()); historicItem = PersistenceExtensions.historicState(item, new DateMidnight(2000, 1, 1), "test"); assertEquals("2000", historicItem.getState().toString()); } @Test public void testMinimumSince() { item.setState(new DecimalType(5000)); HistoricItem historicItem = PersistenceExtensions.minimumSince(item, new DateMidnight(1940, 1, 1), "test"); assertNotNull(historicItem); assertEquals("5000", historicItem.getState().toString()); historicItem = PersistenceExtensions.minimumSince(item, new DateMidnight(2005, 1, 1), "test"); assertEquals("2005", historicItem.getState().toString()); assertEquals(new DateMidnight(2005, 1, 1).toDate(), historicItem.getTimestamp()); } @Test public void testMaximumSince() { item.setState(new DecimalType(1)); HistoricItem historicItem = PersistenceExtensions.maximumSince(item, new DateMidnight(2012, 1, 1), "test"); assertNotNull(historicItem); assertEquals("1", historicItem.getState().toString()); historicItem = PersistenceExtensions.maximumSince(item, new DateMidnight(2005, 1, 1), "test"); assertEquals("2012", historicItem.getState().toString()); assertEquals(new DateMidnight(2012, 1, 1).toDate(), historicItem.getTimestamp()); } @Test public void testAverageSince() { item.setState(new DecimalType(3025)); DateMidnight startStored = new DateMidnight(2003, 1, 1); DateMidnight endStored = new DateMidnight(2012, 1, 1); long storedInterval = endStored.getMillis() - startStored.getMillis(); long recentInterval = DateTime.now().getMillis() - endStored.getMillis(); double expected = (2007.4994 * storedInterval + 2518.5 * recentInterval) / (storedInterval + recentInterval); DecimalType average = PersistenceExtensions.averageSince(item, startStored, "test"); assertEquals(expected, average.doubleValue(), 0.01); } @Test public void testPreviousStateNoSkip() { item.setState(new DecimalType(4321)); HistoricItem prevStateItem = PersistenceExtensions.previousState(item, false, "test"); assertNotNull(prevStateItem); assertEquals("2012", prevStateItem.getState().toString()); item.setState(new DecimalType(2012)); prevStateItem = PersistenceExtensions.previousState(item, false, "test"); assertNotNull(prevStateItem); assertEquals("2012", prevStateItem.getState().toString()); } @Test public void testPreviousStateSkip() { item.setState(new DecimalType(2012)); HistoricItem prevStateItem = PersistenceExtensions.previousState(item, true, "test"); assertNotNull(prevStateItem); assertEquals("2011", prevStateItem.getState().toString()); } }