@Test
public void searchTest() {

	List<Ven> vens = new ArrayList<>();
	List<DemandResponseEvent> events = new ArrayList<>();
	VenMarketContext marketContext = null;
	Ven ven1;
	Ven ven2;
	Ven ven3;
	DemandResponseEvent event1 = null;
	DemandResponseEvent event2 = null;
	DemandResponseEvent event3 = null;
	String marketContextName = "http://oadr.avob.com";
	marketContext = venMarketContextService.prepare(new VenMarketContextDto(marketContextName));
	venMarketContextService.save(marketContext);
	String groupName = "group1";
	VenGroup group = venGroupService.prepare(new VenGroupDto(groupName));
	venGroupService.save(group);
	ven1 = venService.prepare("ven1");
	ven1.setVenMarketContexts(Sets.newHashSet(marketContext));
	ven1.setVenGroup(Sets.newHashSet(group));
	ven1 = venService.save(ven1);
	vens.add(ven1);
	ven2 = venService.prepare("ven2");
	ven2.setVenMarketContexts(Sets.newHashSet(marketContext));
	ven2 = venService.save(ven2);
	vens.add(ven2);
	ven3 = venService.prepare("ven3");
	ven3.setVenMarketContexts(Sets.newHashSet(marketContext));
	ven3.setVenGroup(Sets.newHashSet(group));
	ven3 = venService.save(ven3);
	vens.add(ven3);
	String duration = "PT1H";
	String notificationDuration = "P1D";
	DemandResponseEventStateEnum state = DemandResponseEventStateEnum.ACTIVE;
	DemandResponseEventSignalDto signal = new DemandResponseEventSignalDto();
	signal.setCurrentValue(DemandResponseEventSimpleValueEnum.SIMPLE_SIGNAL_PAYLOAD_HIGH.getValue());
	signal.setSignalName("SIMPLE");
	signal.setSignalType("level");
	DemandResponseEventCreateDto dto = new DemandResponseEventCreateDto();
	dto.getDescriptor().setState(state);
	dto.getDescriptor().setOadrProfile(DemandResponseEventOadrProfileEnum.OADR20B);
	dto.getActivePeriod().setStart(start);
	dto.getDescriptor().setMarketContext(marketContext.getName());
	dto.getActivePeriod().setDuration(duration);
	dto.getActivePeriod().setNotificationDuration(notificationDuration);
	dto.getTargets().add(new DemandResponseEventTargetDto("ven", "ven1"));
	dto.getTargets().add(new DemandResponseEventTargetDto("ven", "ven2"));
	dto.getSignals().add(signal);
	dto.setPublished(true);
	event1 = demandResponseEventService.create(dto);
	events.add(event1);
	dto = new DemandResponseEventCreateDto();
	dto.getDescriptor().setState(DemandResponseEventStateEnum.CANCELLED);
	dto.getDescriptor().setOadrProfile(DemandResponseEventOadrProfileEnum.OADR20B);
	dto.getActivePeriod().setStart(start);
	dto.getDescriptor().setMarketContext(marketContext.getName());
	dto.getActivePeriod().setDuration(duration);
	dto.getActivePeriod().setNotificationDuration(notificationDuration);
	dto.getActivePeriod().setRampUpDuration("PT1H");
	dto.getActivePeriod().setRecoveryDuration("PT1H");
	dto.getDescriptor().setVtnComment("comment");
	dto.getTargets().add(new DemandResponseEventTargetDto("ven", "ven2"));
	dto.getSignals().add(signal);
	dto.setPublished(true);
	event2 = demandResponseEventService.create(dto);
	events.add(event2);
	dto = new DemandResponseEventCreateDto();
	dto.getDescriptor().setOadrProfile(DemandResponseEventOadrProfileEnum.OADR20B);
	dto.getDescriptor().setState(state);
	dto.getActivePeriod().setStart(start);
	dto.getDescriptor().setMarketContext(marketContext.getName());
	dto.getActivePeriod().setDuration(duration);
	dto.getActivePeriod().setNotificationDuration(notificationDuration);
	dto.getTargets().add(new DemandResponseEventTargetDto("ven", "ven3"));
	dto.getSignals().add(signal);
	dto.setPublished(true);
	event3 = demandResponseEventService.create(dto);
	events.add(event3);
	String event1Id = String.valueOf(event1.getId());
	String event2Id = String.valueOf(event2.getId());
	String event3Id = String.valueOf(event3.getId());
	List<VenFilter> filters = new ArrayList<>();
	Page<Ven> search = venService.search(filters);
	assertEquals(3, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	search = venService.search(filters);
	assertEquals(2, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.EVENT, event2Id));
	search = venService.search(filters);
	assertEquals(1, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.EVENT, event3Id));
	search = venService.search(filters);
	assertEquals(1, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	filters.add(getFilter(VenFilterType.EVENT, event2Id));
	search = venService.search(filters);
	assertEquals(2, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	filters.add(getFilter(VenFilterType.EVENT, event2Id));
	filters.add(getFilter(VenFilterType.EVENT, event3Id));
	search = venService.search(filters);
	assertEquals(3, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.IS_REGISTERED, Boolean.TRUE.toString()));
	search = venService.search(filters);
	assertEquals(0, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.IS_REGISTERED, Boolean.FALSE.toString()));
	search = venService.search(filters);
	assertEquals(3, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.GROUP, groupName));
	search = venService.search(filters);
	assertEquals(2, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.GROUP, groupName));
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	search = venService.search(filters);
	assertEquals(1, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.MARKET_CONTEXT, marketContextName));
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	search = venService.search(filters);
	assertEquals(2, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.MARKET_CONTEXT, marketContextName));
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	filters.add(getFilter(VenFilterType.VEN, "ven1"));
	search = venService.search(filters);
	assertEquals(1, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.MARKET_CONTEXT, marketContextName));
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	filters.add(getFilter(VenFilterType.VEN, "ven"));
	search = venService.search(filters);
	assertEquals(2, search.getTotalElements());
	filters = new ArrayList<>();
	filters.add(getFilter(VenFilterType.MARKET_CONTEXT, marketContextName));
	filters.add(getFilter(VenFilterType.EVENT, event1Id));
	filters.add(getFilter(VenFilterType.VEN, "mouaiccool"));
	search = venService.search(filters);
	assertEquals(0, search.getTotalElements());
	demandResponseEventService.delete(events);
	venService.delete(vens);
	venMarketContextService.delete(marketContext);
	venGroupService.delete(group);
}