@ -18,6 +18,7 @@ package org.thingsboard.server.controller;
import com.fasterxml.jackson.core.type.TypeReference ;
import com.fasterxml.jackson.core.type.TypeReference ;
import com.fasterxml.jackson.databind.JsonNode ;
import com.fasterxml.jackson.databind.JsonNode ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import org.apache.commons.lang3.RandomStringUtils ;
import org.junit.After ;
import org.junit.After ;
import org.junit.Assert ;
import org.junit.Assert ;
import org.junit.Ignore ;
import org.junit.Ignore ;
@ -32,6 +33,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.web.servlet.ResultActions ;
import org.springframework.test.web.servlet.ResultActions ;
import org.thingsboard.server.common.data.Customer ;
import org.thingsboard.server.common.data.Customer ;
import org.thingsboard.server.common.data.Device ;
import org.thingsboard.server.common.data.Device ;
import org.thingsboard.server.common.data.Dashboard ;
import org.thingsboard.server.common.data.StringUtils ;
import org.thingsboard.server.common.data.StringUtils ;
import org.thingsboard.server.common.data.Tenant ;
import org.thingsboard.server.common.data.Tenant ;
import org.thingsboard.server.common.data.User ;
import org.thingsboard.server.common.data.User ;
@ -45,6 +47,8 @@ import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.page.PageData ;
import org.thingsboard.server.common.data.page.PageData ;
import org.thingsboard.server.common.data.page.PageLink ;
import org.thingsboard.server.common.data.page.PageLink ;
import org.thingsboard.server.common.data.security.Authority ;
import org.thingsboard.server.common.data.security.Authority ;
import org.thingsboard.server.common.data.settings.StarredDashboardInfo ;
import org.thingsboard.server.common.data.settings.UserDashboardsInfo ;
import org.thingsboard.server.dao.exception.DataValidationException ;
import org.thingsboard.server.dao.exception.DataValidationException ;
import org.thingsboard.server.dao.user.UserDao ;
import org.thingsboard.server.dao.user.UserDao ;
@ -360,7 +364,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
String userIdStr = savedUser . getId ( ) . getId ( ) . toString ( ) ;
String userIdStr = savedUser . getId ( ) . getId ( ) . toString ( ) ;
doGet ( "/api/user/" + userIdStr )
doGet ( "/api/user/" + userIdStr )
. andExpect ( status ( ) . isNotFound ( ) )
. andExpect ( status ( ) . isNotFound ( ) )
. andExpect ( statusReason ( containsString ( msgErrorNoFound ( "User" , userIdStr ) ) ) ) ;
. andExpect ( statusReason ( containsString ( msgErrorNoFound ( "User" , userIdStr ) ) ) ) ;
}
}
@Test
@Test
@ -578,9 +582,9 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
String email1 = "testEmail1" ;
String email1 = "testEmail1" ;
String email2 = "testEmail2" ;
String email2 = "testEmail2" ;
List < User > customerUsersEmail1 = new ArrayList < > ( ) ;
List < User > customerUsersEmail1 = new ArrayList < > ( ) ;
List < User > customerUsersEmail2 = new ArrayList < > ( ) ;
List < User > customerUsersEmail2 = new ArrayList < > ( ) ;
for ( int i = 0 ; i < 45 ; i + + ) {
for ( int i = 0 ; i < 45 ; i + + ) {
User customerUser = createCustomerUser ( customerId ) ;
User customerUser = createCustomerUser ( customerId ) ;
customerUser . setEmail ( email1 + StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) + "@thingsboard.org" ) ;
customerUser . setEmail ( email1 + StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) + "@thingsboard.org" ) ;
customerUsersEmail1 . add ( doPost ( "/api/user" , customerUser , User . class ) ) ;
customerUsersEmail1 . add ( doPost ( "/api/user" , customerUser , User . class ) ) ;
@ -772,7 +776,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
JsonNode retrievedSettings = doGet ( "/api/user/settings" , JsonNode . class ) ;
JsonNode retrievedSettings = doGet ( "/api/user/settings" , JsonNode . class ) ;
Assert . assertEquals ( retrievedSettings , userSettings ) ;
Assert . assertEquals ( retrievedSettings , userSettings ) ;
}
}
@Test
@Test
public void testShouldNotSaveJsonWithRestrictedSymbols ( ) throws Exception {
public void testShouldNotSaveJsonWithRestrictedSymbols ( ) throws Exception {
@ -947,7 +951,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
List < UserEmailInfo > expectedUserInfos = customerUsersContainingWord . stream ( ) . map ( customerUser - > new UserEmailInfo ( customerUser . getId ( ) ,
List < UserEmailInfo > expectedUserInfos = customerUsersContainingWord . stream ( ) . map ( customerUser - > new UserEmailInfo ( customerUser . getId ( ) ,
customerUser . getEmail ( ) , customerUser . getFirstName ( ) = = null ? "" : customerUser . getFirstName ( ) ,
customerUser . getEmail ( ) , customerUser . getFirstName ( ) = = null ? "" : customerUser . getFirstName ( ) ,
customerUser . getLastName ( ) = = null ? "" : customerUser . getLastName ( ) ) )
customerUser . getLastName ( ) = = null ? "" : customerUser . getLastName ( ) ) )
. sorted ( userDataIdComparator ) . collect ( Collectors . toList ( ) ) ;
. sorted ( userDataIdComparator ) . collect ( Collectors . toList ( ) ) ;
usersInfo . sort ( userDataIdComparator ) ;
usersInfo . sort ( userDataIdComparator ) ;
@ -999,8 +1003,8 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
List < UserEmailInfo > usersInfo = getUsersInfo ( pageLink ) ;
List < UserEmailInfo > usersInfo = getUsersInfo ( pageLink ) ;
List < UserEmailInfo > expectedUserInfos = usersContainingWord . stream ( ) . map ( customerUser - > new UserEmailInfo ( customerUser . getId ( ) ,
List < UserEmailInfo > expectedUserInfos = usersContainingWord . stream ( ) . map ( customerUser - > new UserEmailInfo ( customerUser . getId ( ) ,
customerUser . getEmail ( ) , customerUser . getFirstName ( ) = = null ? "" : customerUser . getFirstName ( ) ,
customerUser . getEmail ( ) , customerUser . getFirstName ( ) = = null ? "" : customerUser . getFirstName ( ) ,
customerUser . getLastName ( ) = = null ? "" : customerUser . getLastName ( ) ) )
customerUser . getLastName ( ) = = null ? "" : customerUser . getLastName ( ) ) )
. sorted ( userDataIdComparator ) . collect ( Collectors . toList ( ) ) ;
. sorted ( userDataIdComparator ) . collect ( Collectors . toList ( ) ) ;
usersInfo . sort ( userDataIdComparator ) ;
usersInfo . sort ( userDataIdComparator ) ;
@ -1009,7 +1013,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
// find user by full last name
// find user by full last name
pageLink = new PageLink ( 10 , 0 , searchText + "3" ) ;
pageLink = new PageLink ( 10 , 0 , searchText + "3" ) ;
usersInfo = getUsersInfo ( pageLink ) ;
usersInfo = getUsersInfo ( pageLink ) ;
Assert . assertEquals ( 2 , usersInfo . size ( ) ) ;
Assert . assertEquals ( 2 , usersInfo . size ( ) ) ;
//clear users
//clear users
doDelete ( "/api/customer/" + customerId . getId ( ) . toString ( ) )
doDelete ( "/api/customer/" + customerId . getId ( ) . toString ( ) )
@ -1028,6 +1032,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
private static User createCustomerUser ( CustomerId customerId ) {
private static User createCustomerUser ( CustomerId customerId ) {
return createCustomerUser ( null , null , customerId ) ;
return createCustomerUser ( null , null , customerId ) ;
}
}
private static User createCustomerUser ( String firstName , String lastName , CustomerId customerId ) {
private static User createCustomerUser ( String firstName , String lastName , CustomerId customerId ) {
String suffix = StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) ;
String suffix = StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) ;
return createCustomerUser ( firstName , lastName , "testMail" + suffix + "@thingsboard.org" , customerId ) ;
return createCustomerUser ( firstName , lastName , "testMail" + suffix + "@thingsboard.org" , customerId ) ;
@ -1046,6 +1051,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
private User createTenantAdminUser ( ) {
private User createTenantAdminUser ( ) {
return createTenantAdminUser ( null , null ) ;
return createTenantAdminUser ( null , null ) ;
}
}
private User createTenantAdminUser ( String firstName , String lastName ) {
private User createTenantAdminUser ( String firstName , String lastName ) {
String suffix = StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) ;
String suffix = StringUtils . randomAlphanumeric ( ( int ) ( 5 + Math . random ( ) * 10 ) ) ;
@ -1062,7 +1068,8 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
List < UserEmailInfo > loadedCustomerUsers = new ArrayList < > ( ) ;
List < UserEmailInfo > loadedCustomerUsers = new ArrayList < > ( ) ;
PageData < UserEmailInfo > pageData = null ;
PageData < UserEmailInfo > pageData = null ;
do {
do {
pageData = doGetTypedWithPageLink ( "/api/users/info?" , new TypeReference < > ( ) { } , pageLink ) ;
pageData = doGetTypedWithPageLink ( "/api/users/info?" , new TypeReference < > ( ) {
} , pageLink ) ;
loadedCustomerUsers . addAll ( pageData . getData ( ) ) ;
loadedCustomerUsers . addAll ( pageData . getData ( ) ) ;
if ( pageData . hasNext ( ) ) {
if ( pageData . hasNext ( ) ) {
pageLink = pageLink . nextPageLink ( ) ;
pageLink = pageLink . nextPageLink ( ) ;
@ -1071,6 +1078,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
return loadedCustomerUsers ;
return loadedCustomerUsers ;
}
}
private Alarm createTestAlarm ( Device device ) {
private Alarm createTestAlarm ( Device device ) {
Alarm alarm = new Alarm ( ) ;
Alarm alarm = new Alarm ( ) ;
alarm . setOriginator ( device . getId ( ) ) ;
alarm . setOriginator ( device . getId ( ) ) ;
@ -1079,6 +1087,168 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
alarm . setType ( "testAlarm" ) ;
alarm . setType ( "testAlarm" ) ;
alarm . setStartTs ( System . currentTimeMillis ( ) ) ;
alarm . setStartTs ( System . currentTimeMillis ( ) ) ;
return doPost ( "/api/alarm" , alarm , Alarm . class ) ;
return doPost ( "/api/alarm" , alarm , Alarm . class ) ;
@Test
public void testEmptyDashboardSettings ( ) throws Exception {
loginCustomerUser ( ) ;
UserDashboardsInfo retrievedSettings = doGet ( "/api/user/dashboards" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( retrievedSettings ) ;
Assert . assertNotNull ( retrievedSettings . getLast ( ) ) ;
Assert . assertTrue ( retrievedSettings . getLast ( ) . isEmpty ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
}
@Test
public void testDashboardSettingsFlow ( ) throws Exception {
loginTenantAdmin ( ) ;
Dashboard dashboard1 = new Dashboard ( ) ;
dashboard1 . setTitle ( "My dashboard 1" ) ;
Dashboard savedDashboard1 = doPost ( "/api/dashboard" , dashboard1 , Dashboard . class ) ;
Dashboard dashboard2 = new Dashboard ( ) ;
dashboard2 . setTitle ( "My dashboard 2" ) ;
Dashboard savedDashboard2 = doPost ( "/api/dashboard" , dashboard2 , Dashboard . class ) ;
UserDashboardsInfo retrievedSettings = doGet ( "/api/user/dashboards" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( retrievedSettings ) ;
Assert . assertNotNull ( retrievedSettings . getLast ( ) ) ;
Assert . assertTrue ( retrievedSettings . getLast ( ) . isEmpty ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
UserDashboardsInfo newSettings = doGet ( "/api/user/dashboards/" + savedDashboard1 . getId ( ) . getId ( ) + "/visit" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getLast ( ) . size ( ) ) ;
var lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
newSettings = doGet ( "/api/user/dashboards/" + savedDashboard2 . getId ( ) . getId ( ) + "/visit" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
newSettings = doGet ( "/api/user/dashboards" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
newSettings = doGet ( "/api/user/dashboards/" + savedDashboard1 . getId ( ) . getId ( ) + "/star" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertFalse ( lastVisited . isStarred ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 1 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getStarred ( ) . size ( ) ) ;
StarredDashboardInfo starred = newSettings . getStarred ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , starred . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , starred . getTitle ( ) ) ;
newSettings = doGet ( "/api/user/dashboards/" + savedDashboard2 . getId ( ) . getId ( ) + "/star" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 1 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getStarred ( ) . size ( ) ) ;
starred = newSettings . getStarred ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , starred . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , starred . getTitle ( ) ) ;
newSettings = doGet ( "/api/user/dashboards/" + savedDashboard1 . getId ( ) . getId ( ) + "/unstar" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 1 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertFalse ( lastVisited . isStarred ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getStarred ( ) . size ( ) ) ;
starred = newSettings . getStarred ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , starred . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , starred . getTitle ( ) ) ;
//TEST renaming in the cache.
savedDashboard1 . setTitle ( RandomStringUtils . randomAlphanumeric ( 10 ) ) ;
savedDashboard1 = doPost ( "/api/dashboard" , savedDashboard1 , Dashboard . class ) ;
savedDashboard2 . setTitle ( RandomStringUtils . randomAlphanumeric ( 10 ) ) ;
savedDashboard2 = doPost ( "/api/dashboard" , savedDashboard2 , Dashboard . class ) ;
newSettings = doGet ( "/api/user/dashboards/" + savedDashboard1 . getId ( ) . getId ( ) + "/unstar" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 2 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 1 ) ;
Assert . assertEquals ( savedDashboard1 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard1 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertFalse ( lastVisited . isStarred ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getStarred ( ) . size ( ) ) ;
starred = newSettings . getStarred ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , starred . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , starred . getTitle ( ) ) ;
doDelete ( "/api/dashboard/" + savedDashboard1 . getId ( ) . getId ( ) . toString ( ) ) . andExpect ( status ( ) . isOk ( ) ) ;
newSettings = doGet ( "/api/user/dashboards" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( newSettings ) ;
Assert . assertNotNull ( newSettings . getLast ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getLast ( ) . size ( ) ) ;
lastVisited = newSettings . getLast ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , lastVisited . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , lastVisited . getTitle ( ) ) ;
Assert . assertTrue ( lastVisited . isStarred ( ) ) ;
Assert . assertEquals ( 1 , newSettings . getStarred ( ) . size ( ) ) ;
starred = newSettings . getStarred ( ) . get ( 0 ) ;
Assert . assertEquals ( savedDashboard2 . getId ( ) . getId ( ) , starred . getId ( ) ) ;
Assert . assertEquals ( savedDashboard2 . getTitle ( ) , starred . getTitle ( ) ) ;
doDelete ( "/api/dashboard/" + savedDashboard2 . getId ( ) . getId ( ) . toString ( ) ) . andExpect ( status ( ) . isOk ( ) ) ;
retrievedSettings = doGet ( "/api/user/dashboards" , UserDashboardsInfo . class ) ;
Assert . assertNotNull ( retrievedSettings ) ;
Assert . assertNotNull ( retrievedSettings . getLast ( ) ) ;
Assert . assertTrue ( retrievedSettings . getLast ( ) . isEmpty ( ) ) ;
Assert . assertNotNull ( retrievedSettings . getStarred ( ) ) ;
Assert . assertTrue ( retrievedSettings . getStarred ( ) . isEmpty ( ) ) ;
}
}
}
}