com.devicehive.dao.NetworkDaoTest.java Source code

Java tutorial

Introduction

Here is the source code for com.devicehive.dao.NetworkDaoTest.java

Source

package com.devicehive.dao;

/*
 * #%L
 * DeviceHive Dao Riak Implementation
 * %%
 * Copyright (C) 2016 DataArt
 * %%
 * 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.
 * #L%
 */

import com.devicehive.dao.riak.UserNetworkDaoRiakImpl;
import com.devicehive.dao.riak.model.UserNetwork;
import com.devicehive.vo.NetworkVO;
import com.devicehive.vo.NetworkWithUsersAndDevicesVO;
import com.devicehive.vo.UserVO;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;

import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

public class NetworkDaoTest {

    @Autowired
    private NetworkDao networkDao;

    @Autowired
    private UserDao userDao;

    @Autowired(required = false)
    private UserNetworkDaoRiakImpl userNetworkDao;

    @Autowired
    private ApplicationContext context;

    @Before
    public void beforeMethod() {
        Assume.assumeTrue(context.getEnvironment().acceptsProfiles("riak"));
    }

    @Test
    public void shouldCreateNetwork() throws Exception {
        NetworkVO network = new NetworkVO();
        network.setKey(RandomStringUtils.randomAlphabetic(10));
        network.setName(RandomStringUtils.randomAlphabetic(10));

        networkDao.persist(network);

        NetworkVO created = networkDao.find(network.getId());
        assertThat(created, notNullValue());
        assertThat(created.getKey(), equalTo(network.getKey()));
        assertThat(created.getName(), equalTo(network.getName()));
    }

    @Test
    public void shouldUpdateNetwork() throws Exception {
        NetworkVO network = new NetworkVO();
        network.setKey(RandomStringUtils.randomAlphabetic(10));

        networkDao.persist(network);

        NetworkVO created = networkDao.find(network.getId());
        assertThat(created, notNullValue());
        assertThat(created.getKey(), equalTo(network.getKey()));

        created.setKey(RandomStringUtils.randomAlphabetic(20));
        networkDao.merge(created);

        NetworkVO updated = networkDao.find(created.getId());
        assertThat(updated, notNullValue());
        assertThat(updated.getId(), equalTo(created.getId()));
        assertThat(updated.getKey(), equalTo(created.getKey()));
        assertThat(updated.getKey(), not(equalTo(network.getKey())));
    }

    @Test
    public void shouldDeleteNetwork() throws Exception {
        NetworkVO network = new NetworkVO();
        network.setKey(RandomStringUtils.randomAlphabetic(10));

        networkDao.persist(network);

        assertNotNull(networkDao.find(network.getId()));

        networkDao.deleteById(network.getId());

        assertNull(networkDao.find(network.getId()));
    }

    @Test
    public void shouldFindByName() throws Exception {
        String name = RandomStringUtils.randomAlphabetic(10);
        int count = 0;
        for (int i = 0; i < 100; i++) {
            NetworkVO network = new NetworkVO();
            network.setKey(RandomStringUtils.randomAlphabetic(20));
            network.setDescription(RandomStringUtils.randomAlphabetic(20));
            if (i % 2 == 0) {
                network.setName(name);
                count++;
            } else {
                network.setName(RandomStringUtils.randomAlphabetic(10));
            }
            networkDao.persist(network);
        }
        List<NetworkVO> networks = networkDao.findByName(name);
        assertThat(networks, hasSize(count));
        Set<String> names = networks.stream().map(NetworkVO::getName).collect(Collectors.toSet());
        assertThat(names, hasSize(1));
        assertThat(names, hasItem(name));
    }

    @Test
    public void shouldFindById() throws Exception {
        NetworkVO network = new NetworkVO();
        network.setKey(RandomStringUtils.randomAlphabetic(10));
        networkDao.persist(network);
        assertThat(network.getId(), notNullValue());

        NetworkVO found = networkDao.find(network.getId());
        assertThat(found, notNullValue());
        assertThat(network.getId(), equalTo(found.getId()));
        assertThat(network.getKey(), equalTo(found.getKey()));
    }

    @Test
    public void shouldGetNetworksByIdsSet() throws Exception {
        Set<Long> networkIds = new HashSet<>();
        for (int i = 0; i < 100; i++) {
            NetworkVO network = new NetworkVO();
            network.setKey(RandomStringUtils.randomAlphabetic(10));
            networkDao.persist(network);
            if (i % 2 == 0) {
                networkIds.add(network.getId());
            }
        }

        List<NetworkWithUsersAndDevicesVO> networks = networkDao.getNetworksByIdsAndUsers(null, networkIds, null);
        assertNotNull(networks);
        assertThat(networks, hasSize(networkIds.size()));
        Set<Long> returnedIds = networks.stream().map(NetworkWithUsersAndDevicesVO::getId)
                .collect(Collectors.toSet());
        assertThat(networkIds, equalTo(returnedIds));
    }

    @Test
    public void shouldGetNetworksWithUserFilter() throws Exception {
        UserVO user = new UserVO();
        user.setLogin(RandomStringUtils.randomAlphabetic(10));
        userDao.persist(user);
        assertNotNull(user.getId());

        Set<Long> networkIds = new HashSet<>();
        for (int i = 0; i < 100; i++) {
            NetworkVO network = new NetworkVO();
            network.setKey(RandomStringUtils.randomAlphabetic(10));
            networkDao.persist(network);
            if (i % 2 == 0) {
                UserNetwork un = new UserNetwork();
                un.setNetworkId(network.getId());
                un.setUserId(user.getId());
                userNetworkDao.persist(un);
            }
            networkIds.add(network.getId());
        }

        List<NetworkWithUsersAndDevicesVO> networks = networkDao.getNetworksByIdsAndUsers(user.getId(), networkIds,
                null);
        assertNotNull(networks);
        assertThat(networks, hasSize(50));
        networks.forEach(n -> {
            assertNotNull(n.getUsers());
            assertThat(n.getUsers(), hasSize(1));
            assertThat(n.getUsers().stream().findFirst().get().getId(), equalTo(user.getId()));
        });
    }

    @Test
    public void shouldGetOnlyPermittedNetworks() throws Exception {
        Set<Long> networkIds = new HashSet<>();
        Set<Long> permitted = new HashSet<>();
        for (int i = 0; i < 100; i++) {
            NetworkVO network = new NetworkVO();
            network.setKey(RandomStringUtils.randomAlphabetic(10));
            networkDao.persist(network);
            if (i % 2 == 0) {
                permitted.add(network.getId());
            }
            networkIds.add(network.getId());
        }

        List<NetworkWithUsersAndDevicesVO> networks = networkDao.getNetworksByIdsAndUsers(null, networkIds,
                permitted);
        assertNotNull(networks);
        assertThat(networks, hasSize(permitted.size()));
        Set<Long> returned = networks.stream().map(NetworkVO::getId).collect(Collectors.toSet());
        assertThat(permitted, equalTo(returned));
    }

    @Test
    public void shouldListByNameWithSortingAndLimit() throws Exception {
        String name = RandomStringUtils.randomAlphabetic(10);
        for (int i = 0; i < 100; i++) {
            NetworkVO network = new NetworkVO();
            network.setKey(RandomStringUtils.randomAlphabetic(10));
            if (i % 2 == 0) {
                network.setName(name);
            } else {
                network.setName(RandomStringUtils.randomAlphabetic(10));
            }
            network.setEntityVersion((long) i);
            networkDao.persist(network);
        }

        List<NetworkVO> networks = networkDao.list(name, null, "entityVersion", true, 10, 0, Optional.empty());
        assertThat(networks, hasSize(10));
        networks.forEach(n -> assertEquals(name, n.getName()));
        networks.stream().reduce((last, current) -> {
            if (last.getEntityVersion() > current.getEntityVersion())
                Assert.fail("Not sorted");
            return current;
        });
    }

}