/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ext.uberfire.social.activities.repository; import java.util.Date; import java.util.List; import org.ext.uberfire.social.activities.model.DefaultTypes; import org.ext.uberfire.social.activities.model.PagedSocialQuery; import org.ext.uberfire.social.activities.model.SocialActivitiesEvent; import org.ext.uberfire.social.activities.model.SocialEventType; import org.ext.uberfire.social.activities.model.SocialPaged; import org.ext.uberfire.social.activities.model.SocialUser; import org.ext.uberfire.social.activities.persistence.SocialTimelineCacheInstancePersistenceUnitTestWrapper; import org.ext.uberfire.social.activities.security.SocialSecurityConstraintsManager; import org.ext.uberfire.social.activities.service.SocialAdapter; import org.ext.uberfire.social.activities.service.SocialCommandTypeFilter; import org.ext.uberfire.social.activities.service.SocialTimelinePersistenceAPI; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class SocialTypeTimelinePagedRepositoryTest { private SocialTypeTimelinePagedRepository repository; private SocialEventType type = DefaultTypes.DUMMY_EVENT; private SocialTimelinePersistenceAPI socialTimelinePersistenceFake; private SocialSecurityConstraintsManager socialSecurityConstraintsManagerSpy; @Before public void setUp() throws Exception { SocialSecurityConstraintsManager socialSecurityConstraintsManager = new SocialSecurityConstraintsManager() { @Override public List<SocialActivitiesEvent> applyConstraints(List<SocialActivitiesEvent> events) { return events; } }; socialSecurityConstraintsManagerSpy = spy(socialSecurityConstraintsManager); socialTimelinePersistenceFake = new SocialTimelineCacheInstancePersistenceUnitTestWrapper(socialSecurityConstraintsManagerSpy); repository = new SocialTypeTimelinePagedRepository() { @Override SocialTimelinePersistenceAPI getSocialTimelinePersistenceAPI() { return socialTimelinePersistenceFake; } @Override SocialAdapter getSocialAdapter(String adapterName) { return new SocialAdapter() { @Override public Class eventToIntercept() { return null; } @Override public SocialEventType socialEventType() { return DefaultTypes.DUMMY_EVENT; } @Override public boolean shouldInterceptThisEvent(Object event) { return false; } @Override public SocialActivitiesEvent toSocial(Object object) { return null; } @Override public List<SocialCommandTypeFilter> getTimelineFilters() { return null; } @Override public List<String> getTimelineFiltersNames() { return null; } }; } }; } @Test public void fullReadTest() { createFreshCacheEventsEvents(3); SocialPaged socialPaged = new SocialPaged(5); PagedSocialQuery query = repository.getEventTimeline(type.name(), socialPaged); assertFreshEvents(query); assertStoredEvent("5", "0", 3, query.socialEvents()); assertStoredEvent("5", "1", 4, query.socialEvents()); query = repository.getEventTimeline(type.name(), socialPaged); //file 5 assertStoredEvent("5", "2", 0, query.socialEvents()); assertStoredEvent("5", "3", 1, query.socialEvents()); assertStoredEvent("5", "4", 2, query.socialEvents()); //file 4 assertStoredEvent("4", "0", 3, query.socialEvents()); assertStoredEvent("4", "1", 4, query.socialEvents()); assertTrue(socialPaged.canIGoForward()); query = repository.getEventTimeline(type.name(), socialPaged); assertStoredEvent("4", "2", 0, query.socialEvents()); assertStoredEvent("4", "3", 1, query.socialEvents()); assertStoredEvent("4", "4", 2, query.socialEvents()); //file number 3 assertStoredEvent("3", "0", 3, query.socialEvents()); assertStoredEvent("3", "1", 4, query.socialEvents()); assertTrue(socialPaged.canIGoForward()); query = repository.getEventTimeline(type.name(), socialPaged); assertStoredEvent("3", "2", 0, query.socialEvents()); assertStoredEvent("3", "3", 1, query.socialEvents()); assertStoredEvent("3", "4", 2, query.socialEvents()); assertStoredEvent("2", "0", 3, query.socialEvents()); assertStoredEvent("2", "1", 4, query.socialEvents()); query = repository.getEventTimeline(type.name(), socialPaged); assertStoredEvent("2", "2", 0, query.socialEvents()); assertStoredEvent("2", "3", 1, query.socialEvents()); assertStoredEvent("2", "4", 2, query.socialEvents()); assertTrue(socialPaged.canIGoForward()); //one is empty - error to read file assertStoredEvent("0", "0", 3, query.socialEvents()); assertStoredEvent("0", "1", 4, query.socialEvents()); query = repository.getEventTimeline(type.name(), socialPaged); assertStoredEvent("0", "2", 0, query.socialEvents()); assertStoredEvent("0", "3", 1, query.socialEvents()); assertStoredEvent("0", "4", 2, query.socialEvents()); assertTrue(query.socialEvents().size() == 3); assertTrue(!socialPaged.canIGoForward()); verify(socialSecurityConstraintsManagerSpy).applyConstraints(any(List.class)); } private void assertStoredEvent(String fileName, String expected, int index, List<SocialActivitiesEvent> events) { SocialActivitiesEvent event = events.get(index); assertEquals(fileName, event.getSocialUser().getUserName()); assertEquals(expected, event.getAdditionalInfo()[0]); } private void assertFreshEvents(PagedSocialQuery query) { assertEquals("2", query.socialEvents().get(0).getAdditionalInfo()[0]); assertEquals("1", query.socialEvents().get(1).getAdditionalInfo()[0]); assertEquals("0", query.socialEvents().get(2).getAdditionalInfo()[0]); } private PagedSocialQuery queryAndAssertNumberOfEvents(int numberOfEvents, SocialPaged socialPaged) { PagedSocialQuery query = repository.getEventTimeline(type.name(), socialPaged); assertEquals(numberOfEvents, query.socialEvents().size()); return query; } private void createFreshCacheEventsEvents(int numberOfEvents) { for (int i = 0; i < numberOfEvents; i++) { socialTimelinePersistenceFake.persist(new SocialActivitiesEvent(new SocialUser("fresh"), DefaultTypes.DUMMY_EVENT, new Date()).withAdicionalInfo(i + "")); } } }