Coverage Summary for Class: SnackbarValidator (cloud.mindbox.mobile_sdk.inapp.data.validators)

Class Class, % Method, % Branch, % Line, % Instruction, %
SnackbarValidator 100% (1/1) 100% (2/2) 84.4% (27/32) 100% (33/33) 96.2% (151/157)


 package cloud.mindbox.mobile_sdk.inapp.data.validators
 
 import cloud.mindbox.mobile_sdk.inapp.data.dto.BackgroundDto
 import cloud.mindbox.mobile_sdk.inapp.data.dto.PayloadDto
 import cloud.mindbox.mobile_sdk.logger.mindboxLogI
 
 internal class SnackbarValidator(
     private val imageLayerValidator: ImageLayerValidator,
     private val elementValidator: SnackBarElementValidator
 ) : Validator<PayloadDto.SnackbarDto?> {
     override fun isValid(item: PayloadDto.SnackbarDto?): Boolean {
         if (item?.type != PayloadDto.SnackbarDto.SNACKBAR_JSON_NAME) {
             mindboxLogI("InApp is not valid. Expected type is ${PayloadDto.SnackbarDto.SNACKBAR_JSON_NAME}. Actual type = ${item?.type}")
             return false
         }
         val layers = item.content?.background?.layers?.filterNotNull()
         if (layers.isNullOrEmpty()) {
             mindboxLogI("InApp is not valid. Layers should not be empty. Layers are = $layers")
             return false
         }
         val invalidLayer = layers.find { layerDto ->
             when (layerDto) {
                 is BackgroundDto.LayerDto.ImageLayerDto -> {
                     mindboxLogI("Start checking image layer")
                     val rez = imageLayerValidator.isValid(layerDto)
                     mindboxLogI("Finish checking image layer and it's validity = $rez")
                     !rez
                 }
                 else -> {
                     mindboxLogI("InApp is not valid. Snackbar supports only image layer, got ${layerDto.javaClass.simpleName}")
                     true
                 }
             }
         }
         if (invalidLayer != null) {
             mindboxLogI("InApp is not valid. At least one layer is invalid")
             return false
         }
         val isValidMargin = item.content.position.margin.isValidPosition()
         if (!isValidMargin) {
             mindboxLogI("InApp has invalid margin")
             return false
         }
         item.content.elements?.forEach { elementDto ->
             if (!elementValidator.isValid(elementDto)) {
                 mindboxLogI("InApp is not valid. At least one element is invalid")
                 return false
             }
         }
         mindboxLogI("Current inApp payload is valid")
         return true
     }
 }