Представьте, что существует форма для массового обновления группы логинов и их статусов; используемая логика заключается в наличии скрытого поля, которое отслеживает все возможные идентификаторы, и группы… например, Радио БТНС. позже через сервис, активируя все проверенные идентификаторы в нашем списке и деактивируя остальные:
def enabledLogins = toList(params.enabledLogins)
def allLoginIds = params.allLoginIds.toString().split(',')
loginService.updateLoginStatus(allLoginIds,enabledLogins)
вот определение для услуги
def updateLoginStatus(String[] allLoginIds, List<Long> enabledLoginIds) {
for (item in allLoginIds) {
def login = Login.get(item.toLong())
if (login) {
login.enabled = enabledLoginIds.contains(item.toLong()) ? true : false
login.save()
if (login.hasErrors()) {
login.errors.each { log.error(it) }
}
}
}
}
А вот и интеграционный тест:
def testUpdateLoginStatus() {
def id1 = createLogin().id
def id2 = createLogin().id
String[] allLoginIds = [id1 as String, id2 as String]
List<Long> enabledLoginIds = [id1]
loginService.updateLoginStatus(allLoginIds, enabledLoginIds)
def login1 = Login.get(id1)
def login2 = Login.get(id2)
assertTrue login1.enabled
assertFalse login2.enabled
}
Login createLogin() {
def now = System.currentTimeMillis()
def email = "int-test-" + now + "@somewhere.com"
def password = "Pwd" + now + "pwD"
def login = new Login(username: email, password: password, firstName: "Integration", lastName: "Test")
login.save(flush: true)
assertNotNull login.id
return login
}
Теперь вот проблема:
Приведенный выше код просто проходит тест интеграции, но не работает на практике, если я не возьму toLong из
enabledLoginIds.contains(item.toLong())
, который в этом случае не пройдёт интеграционный тест ...
так что тип где-то как-то не так ... но я его не вижу
спасибо
Ps: grails 1.3.7