Fixed JIRA transitions

This commit is contained in:
Šesták Vít
2016-12-14 08:31:49 +01:00
parent 5680eec2d5
commit 3d39c2e6a5

View File

@@ -6,8 +6,10 @@ import com.google.inject.name.Named
import com.ysoft.odc.{Absolutizer, AtlassianAuthentication, SetDiff} import com.ysoft.odc.{Absolutizer, AtlassianAuthentication, SetDiff}
import controllers.{ReportInfo, Vulnerability, friendlyProjectNameString, routes} import controllers.{ReportInfo, Vulnerability, friendlyProjectNameString, routes}
import models.ExportedVulnerability import models.ExportedVulnerability
import play.api.Logger
import play.api.libs.json.Json.JsValueWrapper import play.api.libs.json.Json.JsValueWrapper
import play.api.libs.json._ import play.api.libs.json._
import play.api.libs.json.Json.obj
import play.api.libs.ws.{WS, WSClient, WSResponse} import play.api.libs.ws.{WS, WSClient, WSResponse}
import services.JiraIssueTrackerService.Fields import services.JiraIssueTrackerService.Fields
@@ -71,7 +73,7 @@ class JiraIssueTrackerService @Inject()(absolutizer: Absolutizer, @Named("jira-s
def requireStatus(expectedStatus: Int): Future[WSResponse] = { def requireStatus(expectedStatus: Int): Future[WSResponse] = {
r.map{ resp => r.map{ resp =>
if(resp.status != expectedStatus){ if(resp.status != expectedStatus){
sys.error(s"Request expected to end with status $expectedStatus, but it has failed with ${resp.status} / ${resp.statusText}.") sys.error(s"Request expected to end with status $expectedStatus, but it has failed with ${resp.status} / ${resp.statusText}. Response:\n"+resp.body)
} }
resp resp
} }
@@ -92,12 +94,14 @@ class JiraIssueTrackerService @Inject()(absolutizer: Absolutizer, @Named("jira-s
} }
} }
}.getOrElse(Future.successful(None)) }.getOrElse(Future.successful(None))
transitionOptionFuture flatMap {transitionOption => val fieldsUpdateResult = api(s"issue/$ticket").put(obj(
val transitionJson = transitionOption.fold(Json.obj())(transition => Json.obj("transition" -> Json.obj("id" -> transition.id))) "fields" -> extractManagedFields(vuln, diff.newSet)
val fieldsJson = Json.obj( )).requireStatus(204).map{ resp => () }
"fields" -> extractManagedFields(vuln, diff.newSet) fieldsUpdateResult.flatMap { (_: Unit) =>
) transitionOptionFuture flatMap {
api(s"issue/$ticket").put(transitionJson ++ fieldsJson).requireStatus(204).map{ resp => () } case Some(transition) => api(s"issue/$ticket/transitions").post(obj("transition" -> obj("id" -> transition.id))).requireStatus(204).map{resp =>()}
case None => Future.successful(())
}
} }
} }