Package com.streamreduce.service

Source Code of com.streamreduce.service.MessageServiceGetMessagesITCase

/*
* 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.service;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.streamreduce.AbstractServiceTestCase;
import com.streamreduce.Constants;
import com.streamreduce.core.event.EventId;
import com.streamreduce.core.model.Connection;
import com.streamreduce.core.model.Event;
import com.streamreduce.core.model.User;
import com.streamreduce.core.model.messages.SobaMessage;
import com.streamreduce.core.service.MessageService;
import com.streamreduce.core.service.UserService;
import com.streamreduce.test.service.TestService;

import java.util.List;
import java.util.Map;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

/**
* Integration test that exercises different permutations of
* {@link com.streamreduce.core.service.MessageService#getAllMessages(com.streamreduce.core.model.User, Long, Long, int, boolean, String, java.util.List, String, boolean)}.
*/
public class MessageServiceGetMessagesITCase extends AbstractServiceTestCase {

    @Autowired
    private UserService userService;
    @Autowired
    private MessageService messageService;
    @Autowired
    private TestService testService;


    private User user;

    @Before
    public void setUp() throws Exception {
        super.setUp();
        user = userService.getUser(Constants.NODEABLE_SUPER_USERNAME);
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesAscOrder() throws Exception {
        List<SobaMessage> messages = messageService.getAllMessages(user, null, null, 4, true, null, null, null, false);
        Assert.assertEquals(2, messages.size());

        // test the order, should be ascending
        long lastDate = 0;
        for (SobaMessage message : messages) {
            if (lastDate != 0) {
                logger.debug(message.getCreated() + ":" + message.getTransformedMessage());
                Assert.assertTrue(message.getCreated() >= lastDate);
            }
            lastDate = message.getCreated();
        }

    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesDescOrder() throws Exception {
        List<SobaMessage> messages = messageService.getAllMessages(user, null, null, 4, false, null, null, null, false);
        Assert.assertEquals(2, messages.size());

        // test the order, should be descending
        long lastDate = 0;
        for (SobaMessage message : messages) {
            if (lastDate != 0) {
                logger.debug(message.getCreated() + ":" + message.getTransformedMessage());
                Assert.assertTrue(message.getCreated() <= lastDate);
            }
            lastDate = message.getCreated();
        }
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesSearchByHashtagORSender() throws Exception {
        List<SobaMessage> messages = messageService.getAllMessages(user, null, null, 4, false, null, Lists.newArrayList("#foo"), "nodeable", false);
        Assert.assertEquals(2, messages.size());
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesShowsPrivatesForOwner() throws Exception {
        long beforeCreateConnectionTimestamp = System.currentTimeMillis();
        testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);

        // We expect 3 messages for the testUser since they are private and only testUser should see them.
        List<SobaMessage> messages = messageService.getAllMessages(testUser, beforeCreateConnectionTimestamp, null, 5, false, null, null, null, false);
        Assert.assertEquals(3, messages.size());

        // The super user should not see those same messages.
        User superUser = userService.getSuperUser();
        superUser.setAccount(testUser.getAccount());
        List<SobaMessage> messagesForSuperUser = messageService.getAllMessages(superUser, beforeCreateConnectionTimestamp, null, 5, false, null, null, null, false);
        Assert.assertEquals(0, messagesForSuperUser.size());
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesSearchParameterForTransformedMessage() throws Exception {
        testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);

        //Search for all messages that contain the text "operating".  There is exactly one message in the sample feed that has "operating"
        List<SobaMessage> messages = messageService.getAllMessages(testUser, null, null, 50, false, "operating", null, null, false);
        Assert.assertEquals(1, messages.size());
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesSearchParameterForSenderName() throws Exception {
        Connection c = testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);

        //Search for all messages from the Connection.alias sender name.  There should be 3 total (2 feed entries and 1 for creation).
        List<SobaMessage> messages = messageService.getAllMessages(testUser, null, null, 50, false, c.getAlias(), null, null, false);
        Assert.assertEquals(3, messages.size());
    }


    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetMessagesExcludesInsights() throws Exception {
        // Create a connection just to get some messages to assert against... this should create 3 messages for the testUser's account
        long beforeCreateConnectionTimestamp = System.currentTimeMillis();
        testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);

        // Send one insight message for the 4th message
        sendInsightMessage(beforeCreateConnectionTimestamp - 10);

        // We expect 3 messages for the testUser since we are are excluding Nodeables/Inishgts
        List<SobaMessage> messages = messageService.getAllMessages(testUser, beforeCreateConnectionTimestamp, null, 5, false, "", null, null, true);
        Assert.assertEquals(3, messages.size());

        //Not excluding Nodeables should give us 4 messages now
        List<SobaMessage> messagesWithNodeables = messageService.getAllMessages(testUser, beforeCreateConnectionTimestamp, null, 5, false, "", null, null, false);
        Assert.assertEquals(4, messagesWithNodeables.size());
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testSendNodebellyAnalyticsMessage() throws Exception {
        long sampleTime = System.currentTimeMillis();
        sendInsightMessage(sampleTime);

        //Look for insight messages with the #insight tag
        List<SobaMessage> messagesWithNodeables = messageService.getAllMessages(testUser, sampleTime - 1000, null, 5, false, "", Lists.newArrayList("#insight"), null, false);
        Assert.assertEquals(1, messagesWithNodeables.size());
    }


    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesSearchParameterDoesNotRevealPrivates() throws Exception {
        long beforeCreateConnectionTimestamp = System.currentTimeMillis();
        Connection c = testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);


        // The super user should not see those same messages.
        User superUser = userService.getSuperUser();
        superUser.setAccount(testUser.getAccount());
        List<SobaMessage> messagesForSuperUser = messageService.getAllMessages(superUser, beforeCreateConnectionTimestamp, null, 5, false, c.getAlias(), null, null, false);
        Assert.assertEquals(0, messagesForSuperUser.size());
    }

    @Test
    @Ignore("Integration Tests depended on sensitive account keys, ignoring until better harness is in place.")
    public void testGetAllMessagesReturnsInsightsAndConversations() throws Exception {
        //ElasticSearch can't be implemented soon enough.

        //create a Connection to generate messages, send an insight message, and a user message
        long messageSendTime = System.currentTimeMillis();
        testService.createSampleRssFeedPrivateConnectionAndRefresh(testUser);
        sendInsightMessage(messageSendTime);
        sendUserMessage(messageSendTime);

        //ensure that when searching for #insight and conversation we do an OR on #insight and #conversation (instead of AND)
        //and that the connection messages do not appear
        List<SobaMessage> messages = messageService.getAllMessages(testUser, messageSendTime, null, 5, false, null, Lists.newArrayList("#insight", "#conversation"), null, false);
        Assert.assertEquals(2, messages.size());
    }


    private void sendInsightMessage(long sampleTime) {
        // Send one insight message for the 4th message
        Event event = new Event();
        Map<String, Object> metadata = Maps.newHashMap();
        metadata.put("targetType", "feed");
        metadata.put("targetProviderId", "rss");
        metadata.put("name", "someMetric");
        metadata.put("timestamp", sampleTime);
        event.setAccountId(testUser.getAccount().getId());
        event.setMetadata(metadata);
        event.setEventId(EventId.NODEBELLY_SUMMARY);
        messageService.sendNodebellyInsightMessage(event, sampleTime, Sets.newHashSet("#foo"));
    }

    private void sendUserMessage(long sampleTime) throws Exception {
        // Send one insight message for the 4th message
        Event event = new Event();
        Map<String, Object> metadata = Maps.newHashMap();
        metadata.put("targetType", "when_can_we_have_elastic_search_please?");
        metadata.put("targetProviderId", "when_can_we_have_elastic_search_please?");
        metadata.put("name", "when_can_we_have_elastic_search_please?");
        metadata.put("timestamp", sampleTime);
        event.setAccountId(testUser.getAccount().getId());
        event.setMetadata(metadata);
        event.setEventId(EventId.NODEBELLY_SUMMARY);
        messageService.sendUserMessage(event, testUser, "All praise be to Shay Banon");
    }

}
TOP

Related Classes of com.streamreduce.service.MessageServiceGetMessagesITCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.