import hudson.tasks.test.AbstractTestResultAction

@Library('cadoles') _

pipeline {
  parameters {
    text(name: 'URLS', defaultValue: 'https://msedev.crous-toulouse.fr\nhttps://msedev.crous-toulouse.fr/envole/enregistrement\nhttps://msedev.crous-toulouse.fr/envole/page/faq\nhttps://msedev.crous-toulouse.fr/envole/page/?t=liens_utiles\nhttps://msedev.crous-toulouse.fr/envole/page/?t=mentions_legales\nhttps://msedev.crous-toulouse.fr/envole/message/new\nhttps://msedev.crous-toulouse.fr/envole/recuperation/email\nhttps://msedev.crous-toulouse.fr/envole/courriel/raz', description: 'Liste des URLs à tester, une par ligne')
    booleanParam(name: 'INCLUDE_WARNINGS', defaultValue: false, description: 'Inclure les avertissements')
    booleanParam(name: 'INCLUDE_NOTICES', defaultValue: false, description: 'Inclure les notifications')
  }

  options {
    disableConcurrentBuilds()
  }

  agent {
    node {
      label 'docker'
    }
  }

  stages {
    stage('Run RGAA audit') {
        steps {
            script {
          def urls = params.URLS.split('\n')

          def count = 0
          urls.each { u ->
            stage("Audit page '${u}'") {
              withCredentials([
                  usernamePassword(
                    credentialsId: 'msedev-basic-auth',
                    usernameVariable: 'MSEDEV_USERNAME',
                    passwordVariable: 'MSEDEV_PASSWORD'
                  )
              ]) {
                def report = pa11y.audit(u.trim(), [
                  reporter: 'junit',
                  username: env.MSEDEV_USERNAME,
                  password: env.MSEDEV_PASSWORD,
                  standard: 'WCAG2AA',
                  includeNotices: params.INCLUDE_NOTICES,
                  includeWarnings: params.INCLUDE_WARNINGS,
                ])

                writeFile file:"./report_${count}.xml", text:report
                count++
              }
            }
          }

          junit testResults: '*.xml', skipPublishingChecks: true

          rocketSend(
                    channel: '#cnous-mse',
                    avatar: 'https://jenkins.cadol.es/static/b5f67753/images/headshot.png',
                    message: """
                    Audit RGAA | ${testStatuses()}

                    - [Voir les tests](${env.RUN_DISPLAY_URL})

                    @here
                    """.stripIndent(),
                    rawMessage: true,
                )
            }
        }
    }
  }

  post {
    always {
      cleanWs()
    }
  }
}

@NonCPS
def testStatuses() {
  def testStatus = ''
  AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class)
  if (testResultAction != null) {
    def total = testResultAction.totalCount
    def failed = testResultAction.failCount
    def skipped = testResultAction.skipCount
    def passed = total - failed - skipped
    testStatus = "Passant(s): ${passed}, Échoué(s): ${failed} ${testResultAction.failureDiffString}, Désactivé(s): ${skipped}"
  }
  return testStatus
}