##########################################################################################################

                                        SPECTRUM TESTBOOK RESULTS
                                    Generated on: ${timestamp}

##########################################################################################################

<#assign
    testsSize = mappedTests?size
    totalWeighted = statistics.totalWeighted
    grandTotal = statistics.grandTotal
    grandTotalWeighted = statistics.grandTotalWeighted
>
STATISTICS
<#assign pad = 15>
----------------------------------------------------------------------------------------------------------
  Mapped Tests:        ${mappedTests?size?left_pad(pad)}
  Unmapped Tests:      ${unmappedTests?size?left_pad(pad)}
  Grand Total:         ${"${testsSize} + ${unmappedTests?size} = ${grandTotal}"?left_pad(pad)}
  Total Weighted:      ${totalWeighted?left_pad(pad)}
  Grand Total Weighted:${"${totalWeighted} + ${unmappedTests?size} = ${grandTotalWeighted}"?left_pad(pad)}
----------------------------------------------------------------------------------------------------------

MAPPED WEIGHTED TESTS RATIO
<#assign
    ratioPad = 7
    pad = 6
>
[Ratio of tests mapped in the TestBook, based on their weights]
----------------------------------------------------------------------------------------------------------
  Successful: ${"${weightedSuccessful.total}/${totalWeighted}"?left_pad(ratioPad)} ${weightedSuccessful.percentage?left_pad(pad)}% <${""?left_pad(weightedSuccessful.percentage / 1.5, "=")}>
  Failed:     ${"${weightedFailed.total}/${totalWeighted}"?left_pad(ratioPad)} ${weightedFailed.percentage?left_pad(pad)}% <${""?left_pad(weightedFailed.percentage / 1.5, "=")}>
  Aborted:    ${"${weightedAborted.total}/${totalWeighted}"?left_pad(ratioPad)} ${weightedAborted.percentage?left_pad(pad)}% <${""?left_pad(weightedAborted.percentage / 1.5, "=")}>
  Disabled:   ${"${weightedDisabled.total}/${totalWeighted}"?left_pad(ratioPad)} ${weightedDisabled.percentage?left_pad(pad)}% <${""?left_pad(weightedDisabled.percentage / 1.5, "=")}>
  Not run:    ${"${weightedNotRun.total}/${totalWeighted}"?left_pad(ratioPad)} ${weightedNotRun.percentage?left_pad(pad)}% <${""?left_pad(weightedNotRun.percentage / 1.5, "=")}>
----------------------------------------------------------------------------------------------------------

GRAND TOTAL WEIGHTED TESTS RATIO
[Ratio of all tests, mapped or not, based on their weights]
----------------------------------------------------------------------------------------------------------
  Successful: ${"${grandWeightedSuccessful.total}/${grandTotalWeighted}"?left_pad(ratioPad)} ${grandWeightedSuccessful.percentage?left_pad(pad)}% <${""?left_pad(grandWeightedSuccessful.percentage / 1.5, "=")}>
  Failed:     ${"${grandWeightedFailed.total}/${grandTotalWeighted}"?left_pad(ratioPad)} ${grandWeightedFailed.percentage?left_pad(pad)}% <${""?left_pad(grandWeightedFailed.percentage / 1.5, "=")}>
  Aborted:    ${"${grandWeightedAborted.total}/${grandTotalWeighted}"?left_pad(ratioPad)} ${grandWeightedAborted.percentage?left_pad(pad)}% <${""?left_pad(grandWeightedAborted.percentage / 1.5, "=")}>
  Disabled:   ${"${grandWeightedDisabled.total}/${grandTotalWeighted}"?left_pad(ratioPad)} ${grandWeightedDisabled.percentage?left_pad(pad)}% <${""?left_pad(grandWeightedDisabled.percentage / 1.5, "=")}>
  Not run:    ${"${grandWeightedNotRun.total}/${grandTotalWeighted}"?left_pad(ratioPad)} ${grandWeightedNotRun.percentage?left_pad(pad)}% <${""?left_pad(grandWeightedNotRun.percentage / 1.5, "=")}>
----------------------------------------------------------------------------------------------------------

MAPPED TESTS RATIO
[Ratio of tests mapped in the TestBook]
----------------------------------------------------------------------------------------------------------
  Successful: ${"${successful.total}/${testsSize}"?left_pad(ratioPad)} ${successful.percentage?left_pad(pad)}% <${""?left_pad(successful.percentage / 1.5, "=")}>
  Failed:     ${"${failed.total}/${testsSize}"?left_pad(ratioPad)} ${failed.percentage?left_pad(pad)}% <${""?left_pad(failed.percentage / 1.5, "=")}>
  Aborted:    ${"${aborted.total}/${testsSize}"?left_pad(ratioPad)} ${aborted.percentage?left_pad(pad)}% <${""?left_pad(aborted.percentage / 1.5, "=")}>
  Disabled:   ${"${disabled.total}/${testsSize}"?left_pad(ratioPad)} ${disabled.percentage?left_pad(pad)}% <${""?left_pad(disabled.percentage / 1.5, "=")}>
  Not run:    ${"${notRun.total}/${testsSize}"?left_pad(ratioPad)} ${notRun.percentage?left_pad(pad)}% <${""?left_pad(notRun.percentage / 1.5, "=")}>
----------------------------------------------------------------------------------------------------------

GRAND TOTAL TESTS RATIO
[Ratio of tests, mapped or not, based on their weights]
----------------------------------------------------------------------------------------------------------
  Successful: ${"${grandSuccessful.total}/${grandTotal}"?left_pad(ratioPad)} ${grandSuccessful.percentage?left_pad(pad)}% <${""?left_pad(grandSuccessful.percentage / 1.5, "=")}>
  Failed:     ${"${grandFailed.total}/${grandTotal}"?left_pad(ratioPad)} ${grandFailed.percentage?left_pad(pad)}% <${""?left_pad(grandFailed.percentage / 1.5, "=")}>
  Aborted:    ${"${grandAborted.total}/${grandTotal}"?left_pad(ratioPad)} ${grandAborted.percentage?left_pad(pad)}% <${""?left_pad(grandAborted.percentage / 1.5, "=")}>
  Disabled:   ${"${grandDisabled.total}/${grandTotal}"?left_pad(ratioPad)} ${grandDisabled.percentage?left_pad(pad)}% <${""?left_pad(grandDisabled.percentage / 1.5, "=")}>
  Not run:    ${"${grandNotRun.total}/${grandTotal}"?left_pad(ratioPad)} ${grandNotRun.percentage?left_pad(pad)}% <${""?left_pad(grandNotRun.percentage / 1.5, "=")}>
----------------------------------------------------------------------------------------------------------

QUALITY GATE:
----------------------------------------------------------------------------------------------------------
<#assign evaluatedCondition = "${qg.condition}"?interpret>
| Condition: ${qg.condition}
| Evaluated: <@evaluatedCondition />
| Result:    ${qgStatus?eval?string('OK', 'KO')}
----------------------------------------------------------------------------------------------------------
<#assign maxLength = 84>
MAPPED TESTS:
----------------------------------------------------------------------------------------------------------
<#list groupedMappedTests as className, tests>
<#if className?length &gt; maxLength>
    <#assign className = className?substring(0, maxLength - 4) + "...">
</#if>
| ${"Test Name"?right_pad(maxLength - 4)} | Weight | Result     |
| ${className?right_pad(maxLength - 3, '-')}|--------|------------|
    <#list tests as test>
        <#assign fullName = test.testName>
        <#if fullName?length &gt; maxLength>
            <#assign fullName = fullName?substring(0, maxLength - 4) + "...">
        </#if>
|   - ${fullName?right_pad(maxLength - 8)} | ${test.weight?left_pad(6)} | ${test.result.value?right_pad(11)}|
    </#list>
----------------------------------------------------------------------------------------------------------
</#list>
----------------------------------------------------------------------------------------------------------

UNMAPPED TESTS:
----------------------------------------------------------------------------------------------------------
<#list groupedUnmappedTests as className, tests>
<#if className?length &gt; maxLength>
    <#assign className = className?substring(0, maxLength - 4) + "...">
</#if>
| ${"Test Name"?right_pad(maxLength - 4)} | Weight | Result     |
| ${className?right_pad(maxLength - 3, '-')}|--------|------------|
    <#list tests as test>
        <#assign fullName = test.testName>
        <#if fullName?length &gt; maxLength>
            <#assign fullName = fullName?substring(0, maxLength - 4) + "...">
        </#if>
|   - ${fullName?right_pad(maxLength - 8)} | ${test.weight?left_pad(6)} | ${test.result.value?right_pad(11)}|
    </#list>
----------------------------------------------------------------------------------------------------------
</#list>
----------------------------------------------------------------------------------------------------------

##########################################################################################################
