/** * Copyright © 2016-2017 The Thingsboard Authors * * 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 org.thingsboard.server.dao.service; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.lang3.RandomStringUtils; import org.junit.After; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageData; import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.dao.exception.DataValidationException; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.datastax.driver.core.utils.UUIDs; public class CustomerServiceImplTest extends AbstractServiceTest { private IdComparator<Customer> idComparator = new IdComparator<>(); private TenantId tenantId; @Before public void before() { Tenant tenant = new Tenant(); tenant.setTitle("My tenant"); Tenant savedTenant = tenantService.saveTenant(tenant); Assert.assertNotNull(savedTenant); tenantId = savedTenant.getId(); } @After public void after() { tenantService.deleteTenant(tenantId); } @Test public void testSaveCustomer() { Customer customer = new Customer(); customer.setTenantId(tenantId); customer.setTitle("My customer"); Customer savedCustomer = customerService.saveCustomer(customer); Assert.assertNotNull(savedCustomer); Assert.assertNotNull(savedCustomer.getId()); Assert.assertTrue(savedCustomer.getCreatedTime() > 0); Assert.assertEquals(customer.getTenantId(), savedCustomer.getTenantId()); Assert.assertEquals(customer.getTitle(), savedCustomer.getTitle()); savedCustomer.setTitle("My new customer"); customerService.saveCustomer(savedCustomer); Customer foundCustomer = customerService.findCustomerById(savedCustomer.getId()); Assert.assertEquals(foundCustomer.getTitle(), savedCustomer.getTitle()); customerService.deleteCustomer(savedCustomer.getId()); } @Test public void testFindCustomerById() { Customer customer = new Customer(); customer.setTenantId(tenantId); customer.setTitle("My customer"); Customer savedCustomer = customerService.saveCustomer(customer); Customer foundCustomer = customerService.findCustomerById(savedCustomer.getId()); Assert.assertNotNull(foundCustomer); Assert.assertEquals(savedCustomer, foundCustomer); customerService.deleteCustomer(savedCustomer.getId()); } @Test(expected = DataValidationException.class) public void testSaveCustomerWithEmptyTitle() { Customer customer = new Customer(); customer.setTenantId(tenantId); customerService.saveCustomer(customer); } @Test(expected = DataValidationException.class) public void testSaveCustomerWithEmptyTenant() { Customer customer = new Customer(); customer.setTitle("My customer"); customerService.saveCustomer(customer); } @Test(expected = DataValidationException.class) public void testSaveCustomerWithInvalidTenant() { Customer customer = new Customer(); customer.setTitle("My customer"); customer.setTenantId(new TenantId(UUIDs.timeBased())); customerService.saveCustomer(customer); } @Test(expected = DataValidationException.class) public void testSaveCustomerWithInvalidEmail() { Customer customer = new Customer(); customer.setTenantId(tenantId); customer.setTitle("My customer"); customer.setEmail("invalid@mail"); customerService.saveCustomer(customer); } @Test public void testDeleteCustomer() { Customer customer = new Customer(); customer.setTitle("My customer"); customer.setTenantId(tenantId); Customer savedCustomer = customerService.saveCustomer(customer); customerService.deleteCustomer(savedCustomer.getId()); Customer foundCustomer = customerService.findCustomerById(savedCustomer.getId()); Assert.assertNull(foundCustomer); } @Test public void testFindCustomersByTenantId() { Tenant tenant = new Tenant(); tenant.setTitle("Test tenant"); tenant = tenantService.saveTenant(tenant); TenantId tenantId = tenant.getId(); List<Customer> customers = new ArrayList<>(); for (int i = 0; i < 135; i++) { Customer customer = new Customer(); customer.setTenantId(tenantId); customer.setTitle("Customer" + i); customers.add(customerService.saveCustomer(customer)); } List<Customer> loadedCustomers = new ArrayList<>(); TextPageLink pageLink = new TextPageLink(23); TextPageData<Customer> pageData = null; do { pageData = customerService.findCustomersByTenantId(tenantId, pageLink); loadedCustomers.addAll(pageData.getData()); if (pageData.hasNext()) { pageLink = pageData.getNextPageLink(); } } while (pageData.hasNext()); Collections.sort(customers, idComparator); Collections.sort(loadedCustomers, idComparator); Assert.assertEquals(customers, loadedCustomers); customerService.deleteCustomersByTenantId(tenantId); pageLink = new TextPageLink(33); pageData = customerService.findCustomersByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertTrue(pageData.getData().isEmpty()); tenantService.deleteTenant(tenantId); } @Test public void testFindCustomersByTenantIdAndTitle() { String title1 = "Customer title 1"; List<Customer> customersTitle1 = new ArrayList<>(); for (int i = 0; i < 143; i++) { Customer customer = new Customer(); customer.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10)); String title = title1 + suffix; title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase(); customer.setTitle(title); customersTitle1.add(customerService.saveCustomer(customer)); } String title2 = "Customer title 2"; List<Customer> customersTitle2 = new ArrayList<>(); for (int i = 0; i < 175; i++) { Customer customer = new Customer(); customer.setTenantId(tenantId); String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10)); String title = title2 + suffix; title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase(); customer.setTitle(title); customersTitle2.add(customerService.saveCustomer(customer)); } List<Customer> loadedCustomersTitle1 = new ArrayList<>(); TextPageLink pageLink = new TextPageLink(15, title1); TextPageData<Customer> pageData = null; do { pageData = customerService.findCustomersByTenantId(tenantId, pageLink); loadedCustomersTitle1.addAll(pageData.getData()); if (pageData.hasNext()) { pageLink = pageData.getNextPageLink(); } } while (pageData.hasNext()); Collections.sort(customersTitle1, idComparator); Collections.sort(loadedCustomersTitle1, idComparator); Assert.assertEquals(customersTitle1, loadedCustomersTitle1); List<Customer> loadedCustomersTitle2 = new ArrayList<>(); pageLink = new TextPageLink(4, title2); do { pageData = customerService.findCustomersByTenantId(tenantId, pageLink); loadedCustomersTitle2.addAll(pageData.getData()); if (pageData.hasNext()) { pageLink = pageData.getNextPageLink(); } } while (pageData.hasNext()); Collections.sort(customersTitle2, idComparator); Collections.sort(loadedCustomersTitle2, idComparator); Assert.assertEquals(customersTitle2, loadedCustomersTitle2); for (Customer customer : loadedCustomersTitle1) { customerService.deleteCustomer(customer.getId()); } pageLink = new TextPageLink(4, title1); pageData = customerService.findCustomersByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertEquals(0, pageData.getData().size()); for (Customer customer : loadedCustomersTitle2) { customerService.deleteCustomer(customer.getId()); } pageLink = new TextPageLink(4, title2); pageData = customerService.findCustomersByTenantId(tenantId, pageLink); Assert.assertFalse(pageData.hasNext()); Assert.assertEquals(0, pageData.getData().size()); } }