package sushi.persistence.test; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import sushi.event.EventTypeRule; import sushi.event.SushiEventType; import sushi.event.attribute.SushiAttribute; import sushi.event.attribute.SushiAttributeTree; import sushi.event.attribute.SushiAttributeTypeEnum; import sushi.notification.SushiCondition; import sushi.persistence.Persistor; public class EventTypeRuleTest implements PersistenceTest { private SushiEventType eventType; private SushiEventType createdEventType; private EventTypeRule eventTypeRule; @Before public void setup(){ Persistor.useTestEnviroment(); } @Test @Override public void testStoreAndRetrieve() { eventTypeRule = createEventTypeRule(); eventTypeRule.save(); assertNotNull(EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType)); EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType).equals(eventTypeRule); } @Test @Override public void testFind() { eventTypeRule = createEventTypeRule(); eventTypeRule.save(); assertNotNull(EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType)); EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType).equals(eventTypeRule); } @Test @Override public void testRemove() { eventTypeRule = createEventTypeRule(); eventTypeRule.save(); assertNotNull(EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType)); eventTypeRule.remove(); assertNull(EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType)); } @Test public void testRemoveOfContainedEventType() { eventTypeRule = createEventTypeRule(); eventTypeRule.save(); assertNotNull(EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType)); eventType.remove(); assertNull(SushiEventType.findByID(eventType.getID())); } private EventTypeRule createEventTypeRule() { SushiAttribute rootAttribute1 = new SushiAttribute("Timestamp", SushiAttributeTypeEnum.DATE); SushiAttribute rootAttribute2 = new SushiAttribute("Location", SushiAttributeTypeEnum.INTEGER); List<SushiAttribute> attributes1 = Arrays.asList(rootAttribute1, rootAttribute2); eventType = new SushiEventType("testEventType1", attributes1); eventType.save(); SushiAttribute rootAttribute3 = new SushiAttribute("Timestamp", SushiAttributeTypeEnum.DATE); SushiAttribute rootAttribute4 = new SushiAttribute("Location", SushiAttributeTypeEnum.INTEGER); List<SushiAttribute> attributes2 = Arrays.asList(rootAttribute3, rootAttribute4); createdEventType = new SushiEventType("testEventType2", attributes2); createdEventType.save(); eventTypeRule = new EventTypeRule(new ArrayList<SushiEventType>(Arrays.asList(eventType)), new SushiCondition(), createdEventType); return eventTypeRule; } private void storeExampleEventType() { SushiAttributeTree values = new SushiAttributeTree(); values.addRoot(new SushiAttribute("Location", SushiAttributeTypeEnum.INTEGER)); values.addRoot(new SushiAttribute("SecondaryEvent", SushiAttributeTypeEnum.STRING)); SushiEventType firstEventType = new SushiEventType("Kino", values); SushiEventType secondEventType = new SushiEventType("GET-Transport"); ArrayList<SushiEventType> eventTypes = new ArrayList<SushiEventType>(Arrays.asList(firstEventType, secondEventType)); assertTrue(SushiEventType.save(eventTypes)); } @Test public void testRemoveEventTypeWithEventTypeRuleForCreation(){ storeExampleEventType(); ArrayList<SushiEventType> usedEventTypes = new ArrayList<SushiEventType>(); usedEventTypes.addAll(SushiEventType.findAll()); SushiEventType createdEventType = SushiEventType.findByTypeName("Kino"); EventTypeRule rule = new EventTypeRule(usedEventTypes, new SushiCondition(), createdEventType); rule.save(); assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2); assertTrue("rule not saved", EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType) != null); SushiEventType deleteEventType = SushiEventType.findByTypeName("Kino"); deleteEventType.remove(); assertTrue("should not find eventtyperule, but found " + EventTypeRule.findEventTypeRuleForCreatedEventType(deleteEventType), EventTypeRule.findEventTypeRuleForCreatedEventType(deleteEventType) == null); List<SushiEventType> eventTypes; eventTypes = SushiEventType.findAll(); assertTrue(eventTypes.size() == 1); assertTrue(eventTypes.get(0).getID() != deleteEventType.getID()); } @Test public void testRemoveEventTypeWithEventTypeRuleAsSource(){ storeExampleEventType(); ArrayList<SushiEventType> usedEventTypes = new ArrayList<SushiEventType>(); usedEventTypes.addAll(SushiEventType.findAll()); SushiEventType createdEventType = SushiEventType.findByTypeName("Kino"); EventTypeRule rule = new EventTypeRule(usedEventTypes, new SushiCondition(), createdEventType); rule.save(); List<SushiEventType> eventTypes; eventTypes = SushiEventType.findAll(); System.out.println(eventTypes); assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2); SushiEventType deleteEventType = SushiEventType.findByTypeName("GET-Transport"); deleteEventType.remove(); assertTrue("eventtyperule was deleted, but should not have been ", EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType) != null); eventTypes = SushiEventType.findAll(); assertTrue("there were " + eventTypes.size() + "eventtypes instead of 1", eventTypes.size() == 1); assertTrue(eventTypes.get(0).getID() != deleteEventType.getID()); } @Test public void testRemoveEventTypeWithEventTypeRuleAsOnlySource(){ assertTrue("Value should be 0, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==0); storeExampleEventType(); ArrayList<SushiEventType> usedEventTypes = new ArrayList<SushiEventType>(); usedEventTypes.add(SushiEventType.findByTypeName("GET-Transport")); SushiEventType createdEventType = SushiEventType.findByTypeName("Kino"); EventTypeRule rule = new EventTypeRule(usedEventTypes, new SushiCondition(), createdEventType); rule.save(); List<SushiEventType> eventTypes; eventTypes = SushiEventType.findAll(); assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2); SushiEventType deleteEventType = SushiEventType.findByTypeName("GET-Transport"); deleteEventType.remove(); assertTrue("eventtyperule was not deleted ", EventTypeRule.findEventTypeRuleForCreatedEventType(createdEventType) == null); eventTypes = SushiEventType.findAll(); assertTrue(eventTypes.size() == 1); assertTrue(eventTypes.get(0).getID() != deleteEventType.getID()); } }