@ -16,6 +16,7 @@
package org.thingsboard.server.dao.sql.user ;
import com.datastax.oss.driver.api.core.uuid.Uuids ;
import lombok.extern.slf4j.Slf4j ;
import org.junit.After ;
import org.junit.Before ;
import org.junit.Test ;
@ -37,11 +38,14 @@ import org.thingsboard.server.dao.user.UserSettingsDao;
import java.util.UUID ;
import static org.assertj.core.api.Assertions.assertThat ;
import static org.assertj.core.data.Index.atIndex ;
import static org.junit.Assert.assertEquals ;
import static org.junit.Assert.assertNull ;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID ;
import static org.thingsboard.server.dao.service.AbstractServiceTest.SYSTEM_TENANT_ID ;
@Slf4j
public class JpaUserSettingsDaoTest extends AbstractJpaDaoTest {
private UUID tenantId ;
@ -77,6 +81,34 @@ public class JpaUserSettingsDaoTest extends AbstractJpaDaoTest {
assertNull ( retrievedUserSettings2 ) ;
}
// If Hibernate fail to bind JSON path please check the hypersistence-utils-hibernate-XX artifact name and version in the dependency management
// Example: java.lang.ClassCastException: class [Ljava.lang.String; cannot be cast to class [B ([Ljava.lang.String; and [B are in module java.base of loader 'bootstrap')
@Test
public void testFindByTypeAndJsonPath ( ) {
UserSettings userSettings = createUserSettings ( user . getId ( ) ) ;
log . warn ( "userSettings {}" , userSettings ) ;
userSettings . setSettings ( JacksonUtil . toJsonNode ( "{\"text\":\"bla1\",\"sessions\":{\"tenantFcmToken\":{\"fcmTokenTimestamp\":0}}}" ) ) ;
userSettingsDao . save ( SYSTEM_TENANT_ID , userSettings ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( SYSTEM_TENANT_ID , UserSettingsType . GENERAL , "text" ) )
. isNotEmpty ( ) . hasSize ( 1 ) . contains ( userSettings , atIndex ( 0 ) ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( SYSTEM_TENANT_ID , UserSettingsType . GENERAL , "sessions" , "tenantFcmToken" ) )
. isNotEmpty ( ) . hasSize ( 1 ) . contains ( userSettings , atIndex ( 0 ) ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . GENERAL , "mistery" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . GENERAL , "text" , "text" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . GENERAL , "text" , "lvl2" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE , "text" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE , "sessions" , "1" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE , "text" , "text" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE , "" ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE , null ) ) . isEmpty ( ) ;
assertThat ( userSettingsDao . findByTypeAndPath ( user . getTenantId ( ) , UserSettingsType . MOBILE ) ) . isEmpty ( ) ;
}
private UserSettings createUserSettings ( UserId userId ) {
UserSettings userSettings = new UserSettings ( ) ;
userSettings . setType ( UserSettingsType . GENERAL ) ;