com.streamreduce.core.service.InventoryServiceImplTest.java Source code

Java tutorial

Introduction

Here is the source code for com.streamreduce.core.service.InventoryServiceImplTest.java

Source

/*
 * Copyright 2012 Nodeable Inc
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        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 com.streamreduce.core.service;

import com.google.common.collect.Lists;
import com.streamreduce.connections.AuthType;
import com.streamreduce.connections.ConnectionProviderFactory;
import com.streamreduce.connections.ConnectionProvidersForTests;
import com.streamreduce.core.dao.EventDAO;
import com.streamreduce.core.model.Account;
import com.streamreduce.core.model.Connection;
import com.streamreduce.core.model.Event;
import com.streamreduce.core.model.User;
import com.streamreduce.core.model.messages.details.SobaMessageDetails;
import com.streamreduce.core.model.messages.details.feed.FeedEntryDetails;
import org.apache.shiro.authc.AuthenticationException;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.test.util.ReflectionTestUtils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.streamreduce.test.service.TestUtils.SAMPLE_FEED_FILE_PATH;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;

public class InventoryServiceImplTest {

    Connection sampleFeedConnection;
    InventoryServiceImpl inventoryService;
    MessageService mockMessageService;

    @Before
    public void setUp() throws Exception {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String feb282012TimeStamp = Long.toString(sdf.parse("2012-02-28").getTime());
        User sampleUser = new User.Builder().account(new Account.Builder().name("ABC").build())
                .username("sampleUser").build();
        sampleFeedConnection = new Connection.Builder().provider(ConnectionProvidersForTests.RSS_PROVIDER)
                .url(SAMPLE_FEED_FILE_PATH).alias("EC2").user(sampleUser).authType(AuthType.NONE).build();
        Map<String, String> metadata = new HashMap<>();

        metadata.put("last_activity_poll", feb282012TimeStamp);

        sampleFeedConnection.setMetadata(metadata);
        sampleFeedConnection.setId(new ObjectId());

        inventoryService = new InventoryServiceImpl();

        ConnectionProviderFactory cpf = mock(ConnectionProviderFactory.class);
        when(cpf.externalIntegrationConnectionProviderFromId(sampleFeedConnection.getProviderId()))
                .thenReturn(ConnectionProvidersForTests.RSS_PROVIDER);
        ReflectionTestUtils.setField(inventoryService, "connectionProviderFactory", cpf);

        SecurityService ssMock = Mockito.mock(SecurityService.class);
        EventDAO edMock = Mockito.mock(EventDAO.class);
        EventServiceImpl esImpl = new EventServiceImpl();

        // Return null for the current user
        Mockito.when(ssMock.getCurrentUser()).thenThrow(new AuthenticationException("A user must be logged in!"));

        // Use reflection to set the EventDAO in EventServiceImpl
        ReflectionTestUtils.setField(esImpl, "eventDAO", edMock);

        mockMessageService = mock(MessageService.class);
    }

    @Test
    public void testRefreshFeedMessagesProperOrder() throws Exception {
        final List<Long> pubDates = new ArrayList<>();
        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                Long pubDate = (Long) invocation.getArguments()[2];
                pubDates.add(pubDate);
                return null;
            }
        }).when(mockMessageService).sendActivityMessage(any(Event.class), any(Connection.class), anyLong(),
                Matchers.any(SobaMessageDetails.class));

        inventoryService.eventService = mock(EventService.class);

        ReflectionTestUtils.setField(inventoryService, "messageService", mockMessageService);

        inventoryService.pullInventoryItemActivity(sampleFeedConnection);

        assertEquals(2, pubDates.size());
        assertTrue(pubDates.get(1) > pubDates.get(0)); // messages should  appear in chronological order, not reverse
    }

    @Test
    public void testRefreshFeedMessagesIncludesFeedEntryDetails() throws Exception {
        final List<FeedEntryDetails> feedEntryDetailList = Lists.newArrayList();
        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                FeedEntryDetails feedEntryDetails = (FeedEntryDetails) invocation.getArguments()[3];
                feedEntryDetailList.add(feedEntryDetails);
                return null;
            }
        }).when(mockMessageService).sendActivityMessage(any(Event.class), any(Connection.class), anyLong(),
                any(SobaMessageDetails.class));

        inventoryService.eventService = mock(EventService.class);

        ReflectionTestUtils.setField(inventoryService, "messageService", mockMessageService);

        inventoryService.pullInventoryItemActivity(sampleFeedConnection);

        assertEquals(2, feedEntryDetailList.size());

        FeedEntryDetails degradedPerformanceDetails = feedEntryDetailList.get(0);
        assertEquals("Informational message: Investigating degraded performance of EBS volumes",
                degradedPerformanceDetails.getTitle());
        assertEquals("http://status.aws.amazon.com/#EC2_1330560778", degradedPerformanceDetails.getUrl());

        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
        assertEquals(sdf.parse("Wed, 29 Feb 2012 16:12:58 PST"), degradedPerformanceDetails.getPublishedDate());
        assertTrue(degradedPerformanceDetails.getDescription().startsWith("We are investigating"));
    }

}