Merge "Remove compass4nfv weekly danube job"
[releng.git] / utils / test / testapi / opnfv_testapi / ui / results-report / resultsReport.html
1 <h3>Test Run Results</h3>
2
3 <div ng-show="ctrl.resultsData"  class="container-fluid">
4     <div class="row">
5         <div class="pull-left">
6             <div class="test-report">
7                 <strong>Test ID:</strong> {{ctrl.testId}}<br />
8                 <div ng-if="ctrl.isResultAdmin()"><strong>Cloud ID:</strong> {{ctrl.resultsData.cpid}}<br /></div>
9                 <strong>Upload Date:</strong> {{ctrl.resultsData.created_at}} UTC<br />
10                 <strong>Duration:</strong> {{ctrl.resultsData.duration_seconds}} seconds<br />
11                 <strong>Total Number of Passed Tests:</strong>
12                 <a title="See all passed tests" ng-click="ctrl.openFullTestListModal()">
13                     {{ctrl.resultsData.results.length}}
14                 </a>
15             </div>
16             <hr>
17             <div ng-show="ctrl.isResultAdmin()">
18                 <strong>Publicly Shared:</strong>
19                 <span ng-if="ctrl.resultsData.meta.shared">Yes</span>
20                 <span ng-if="!ctrl.resultsData.meta.shared">No</span>
21                 <br />
22             </div>
23             <div ng-show="ctrl.resultsData.product_version">
24                 <strong>Product:</strong>
25                 {{ctrl.resultsData.product_version.product_info.name}}
26                 <span ng-if="ctrl.resultsData.product_version.version">
27                     ({{ctrl.resultsData.product_version.version}})
28                 </span><br />
29             </div>
30             <div ng-show="ctrl.resultsData.meta.guideline">
31                 <strong>Associated Guideline:</strong>
32                 {{ctrl.resultsData.meta.guideline.slice(0, -5)}}
33             </div>
34             <div ng-show="ctrl.resultsData.meta.target">
35                 <strong>Associated Target Program:</strong>
36                 {{ctrl.targetMappings[ctrl.resultsData.meta.target]}}
37             </div>
38             <div ng-show="ctrl.resultsData.verification_status">
39                 <strong>Verified:</strong>
40                 <span class="yes">YES</span>
41             </div>
42             <hr>
43         </div>
44
45         <div class="pull-right">
46             <div ng-show="ctrl.isResultAdmin() && !ctrl.resultsData.verification_status">
47                 <button class="btn btn-info" ng-click="ctrl.openEditTestModal()">Edit</button>
48                 <button type="button" class="btn btn-danger" ng-click="ctrl.deleteTestRun()" confirm="Are you sure you want to delete these test run results?">Delete</button>
49             </div>
50             <div ng-show="ctrl.resultsData.user_role === 'foundation'">
51                 <hr>
52                 <div class="checkbox checkbox-verified">
53                     <label><input type="checkbox"
54                                   ng-model="ctrl.isVerified"
55                                   ng-change="ctrl.updateVerificationStatus()"
56                                   ng-true-value="1"
57                                   ng-false-value="0">
58                                   <strong>Verified</strong>
59                     </label>
60                 </div>
61             </div>
62         </div>
63     </div>
64 </div>
65
66 <div ng-show="ctrl.resultsData">
67     <p>See how these results stack up against Interop Working Group capabilities and OpenStack
68         <a target="_blank" href="http://www.openstack.org/brand/interop/">target marketing programs.</a>
69     </p>
70
71     <!-- User Options -->
72     <div class="row">
73         <div class="col-md-3">
74             <strong>Guideline Version:</strong>
75             <!-- Slicing the version file name here gets rid of the '.json' file extension -->
76             <select ng-model="ctrl.version"
77                     ng-change="ctrl.updateGuidelines()"
78                     class="form-control"
79                     ng-options="versionFile.slice(0,-5) for versionFile in ctrl.versionList">
80             </select>
81         </div>
82         <div class="col-md-4">
83             <strong>Target Program:</strong>
84             <select ng-model="ctrl.target" class="form-control" ng-change="ctrl.buildCapabilitiesObject()">
85                 <option value="platform">OpenStack Powered Platform</option>
86                 <option value="compute">OpenStack Powered Compute</option>
87                 <option value="object">OpenStack Powered Object Storage</option>
88             </select>
89         </div>
90     </div>
91     <!-- End User Options -->
92
93     <br />
94     <div ng-if="ctrl.guidelineData">
95         <strong>Guideline Status:</strong>
96         {{ctrl.guidelineData.status | capitalize}}
97     </div>
98
99     <strong>Corresponding OpenStack Releases:</strong>
100     <ul class="list-inline">
101         <li ng-repeat="release in ctrl.guidelineData.releases">
102             {{release | capitalize}}
103         </li>
104     </ul>
105     <hr >
106
107     <div ng-show="ctrl.guidelineData">
108         <strong>Status:</strong>
109         <p>This cloud passes <strong>{{ctrl.requiredPassPercent | number:1}}% </strong>
110            ({{ctrl.caps.required.passedCount}}/{{ctrl.caps.required.count}})
111            of the tests in the <strong>{{ctrl.version.slice(0, -5)}}</strong> <em>required</em> capabilities for the
112            <strong>{{ctrl.targetMappings[target]}}</strong> program. <br />
113            Excluding flagged tests, this cloud passes
114            <strong>{{ctrl.nonFlagRequiredPassPercent | number:1}}%</strong>
115            ({{ctrl.nonFlagPassCount}}/{{ctrl.totalNonFlagCount}})
116            of the <em>required</em> tests.
117         </p>
118
119         <p>Compliance with <strong>{{ctrl.version.slice(0, -5)}}</strong>:
120             <strong>
121                 <span ng-if="ctrl.nonFlagPassCount === ctrl.totalNonFlagCount" class="yes">YES</span>
122                 <span ng-if="ctrl.nonFlagPassCount !== ctrl.totalNonFlagCount" class="no">NO</span>
123             </strong>
124         </p>
125
126         <hr>
127         <h4>Capability Overview</h4>
128
129         Test Filters:<br />
130         <div class="btn-group button-margin" data-toggle="buttons">
131             <label class="btn btn-default" ng-class="{'active': ctrl.testStatus === 'total'}">
132                 <input type="radio" ng-model="ctrl.testStatus" value="total">
133                 <span class="text-primary">All</span>
134             </label>
135             <label class="btn btn-default" ng-class="{'active': ctrl.testStatus === 'passed'}">
136                 <input type="radio" ng-model="ctrl.testStatus" value="passed">
137                 <span class="text-success">Passed</span>
138             </label>
139             <label class="btn btn-default" ng-class="{'active': ctrl.testStatus === 'not passed'}">
140                 <input type="radio" ng-model="ctrl.testStatus" value="not passed">
141                 <span class="text-danger">Not Passed</span>
142             </label>
143             <label class="btn btn-default" ng-class="{'active': ctrl.testStatus === 'flagged'}">
144                 <input type="radio" ng-model="ctrl.testStatus" value="flagged">
145                 <span class="text-warning">Flagged</span>
146             </label>
147         </div>
148
149         <uib-accordion close-others=false>
150             <!-- The ng-repeat is used to pass in a local variable to the template. -->
151             <ng-include
152                 ng-repeat="status in ['required']"
153                 src="ctrl.detailsTemplate"
154                 onload="isOpen = true">
155             </ng-include>
156             <br />
157             <ng-include
158                 ng-repeat="status in ['advisory']"
159                 src="ctrl.detailsTemplate">
160             </ng-include>
161             <br />
162             <ng-include
163                 ng-repeat="status in ['deprecated']"
164                 src="ctrl.detailsTemplate">
165             </ng-include>
166             <br />
167             <ng-include
168                 ng-repeat="status in ['removed']"
169                 src="ctrl.detailsTemplate">
170             </ng-include>
171         </uib-accordion>
172     </div>
173 </div>
174
175 <div class="loading">
176     <div cg-busy="{promise:versionsRequest,message:'Loading versions'}"></div>
177     <div cg-busy="{promise:capsRequest,message:'Loading capabilities'}"></div>
178     <div cg-busy="{promise:resultsRequest,message:'Loading results'}"></div>
179 </div>
180
181 <div ng-show="ctrl.showError" class="alert alert-danger" role="alert">
182     <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
183     <span class="sr-only">Error:</span>
184     {{ctrl.error}}
185 </div>