SurveyUsersDto {
val completedUserDto = mapToDto(surveyCompleteStatusRepository.findCompletedUsers(surveyId))
val notCompletedUserDto = mapToDto(surveyCompleteStatusRepository.findNotCompletedUsers(surveyId))
return SurveyUsersDto(
surveyId = surveyId,
isCompleted = completedUserDto,
isNotCompleted = notCompletedUserDto
)
}
этот просто мапит
private fun mapToDto(completedUsers: List<SurveyCompleteStatusDo>): List<SurveyUserDto> {
val userIdList = completedUsers.mapNotNull { it.userProfileId }
val userLoginList = userIdList.mapNotNull { userId ->
userProfileRepository.findById(userId)?.login
}
val completedUserDto = userIdList.zip(userLoginList).map { (userId, userLogin) ->
SurveyUserDto(
userProfileId = userId,
userLogin = userLogin
)
}
return completedUserDto
}
на выходе получем такую шляпу:
@Schema(description = "DTO с информацией о пользователе, прошедшем или не прошедшем опрос")
data class SurveyUserDto(
@Schema(description = "Идентификатор пользователя")
var userProfileId: Long? = null,
@Schema(description = "Логин пользователя")
var userLogin: String? = null
)
data class SurveyUsersDto(
@Schema(description = "Идентификатор опроса")
@JsonProperty("surveyId")
var surveyId: Long? = null,
@Schema(description = "Список пользователей, прошедших опрос")
@JsonProperty("isCompleted")
var isCompleted: List<SurveyUserDto>? = null,
@Schema(description = "Список пользователей, не прошедших опрос")
@JsonProperty("isNotCompleted")
var isNotCompleted: List<SurveyUserDto>? = null
)
т.е финальный жысон имеет вид
surveyId
isCompleted : список
isNotCompleted: список
но по итогу имеем : что в свагере отображается лишь surveyId
а поля завершено или нет - не отображаются
написан тест (сотв-но он тоже падает с ошибкой java.lang.AssertionError: No value at JSON path "$.isCompleted[0].userProfileId"):
@Test
fun testGetSurveyUsers() {
val surveyAdminService = Mockito.mock(SurveyAdminService::class.java)
val completedUserDto = SurveyUserDto(userProfileId = 1L, userLogin = "user1")
val notCompletedUserDto = SurveyUserDto(userProfileId = 2L, userLogin = "user2")
val surveyUsersDto = SurveyUsersDto(
surveyId = 1L,
isCompleted = listOf(completedUserDto),
isNotCompleted = listOf(notCompletedUserDto)
)
Mockito.`when`(surveyAdminService.getSurveyUsers(1L)).thenReturn(surveyUsersDto)
val surveyAdminController = SurveyAdminController(surveyAdminService)
val mockMvc: MockMvc = MockMvcBuilders.standaloneSetup(surveyAdminController).build()
val token = Tokens.USER
mockMvc.perform(
MockMvcRequestBuilders.get("/ns/survey/users/1")
.contentType(MediaType.APPLICATION_JSON)
.headers(token.getAuthorisationHeaders())
)
.andExpect(MockMvcResultMatchers.status().isOk)
.andExpect(MockMvcResultMatchers.jsonPath("$.surveyId").exists())
.andExpect(MockMvcResultMatchers.jsonPath("$.isCompleted[0].userProfileId").exists())
.andExpect(MockMvcResultMatchers.jsonPath("$.isCompleted[0].userLogin").exists())
.andExpect(MockMvcResultMatchers.jsonPath("$.isNotCompleted[0].userProfileId").exists())
.andExpect(MockMvcResultMatchers.jsonPath("$.isNotCompleted[0].userLogin").exists())
}
вопрос: пасаны куда копать??? уже аноташки JsonProperty перепробовал...такое ощущение что что-то не так с парсингом в жысон, вернее там оно и есть ... но как поправить
при этом если просто вывести обьект дтошки в консольку - он нормально отображается, а если ехать дальше через контроллер - там уже куй
На пастбин лучше
че???
да и вообще урл на получение как бы одного пользователя, а возвращаешь ты userSDto, и проверяешь есть ли поле, в userDto, когда на самом деле у тебя в userSDto лежат листы
Обсуждают сегодня