Skip to content

Commit 269d3f1

Browse files
committed
Fixed report bug for projects with no data sets #2971
1 parent 1b27fb5 commit 269d3f1

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

src/main/groovy/au/org/ala/merit/reports/NHTOutputReportData.groovy

+6-2
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@ class NHTOutputReportData extends ReportData {
1616

1717
Map getContextData(Map project) {
1818
// Side effect - filter data sets.
19-
project.custom.dataSets = new JSONArray(project.custom.dataSets?.findAll {
19+
List eligibleDataSets = project.custom?.dataSets?.findAll {
2020
// This is a side effect and a workaround for the problem that selected outcomes
2121
// are an array and the knockout binding doesn't support arrays as a value.
2222
if (it.projectOutcomes) {
2323
it.outcomesLabel = new ArrayList(it.projectOutcomes).join(',')
2424
}
2525
it.progress == ActivityService.PROGRESS_FINISHED
26-
})
26+
}
27+
if (project.custom) {
28+
project.custom.dataSets = new JSONArray(eligibleDataSets ?: [])
29+
}
30+
2731
return [
2832
protocols:projectService.listProjectProtocols(project).collect {
2933
[label: it.name, value: it.externalId]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package au.org.ala.merit.reports
2+
3+
import au.org.ala.merit.ProjectService
4+
import au.org.ala.merit.ActivityService
5+
import spock.lang.Specification
6+
7+
class NhtOutputReportDataSpec extends Specification {
8+
9+
NHTOutputReportData reportData = new NHTOutputReportData()
10+
ProjectService projectService = Mock(ProjectService)
11+
12+
void setup() {
13+
reportData.projectService = projectService
14+
}
15+
16+
def "The context data doesn't need project data sets to exist"() {
17+
18+
setup:
19+
Map project = [:]
20+
List protocols = [[name:'test', externalId:'e1']]
21+
22+
when:
23+
Map contextData = reportData.getContextData(project)
24+
25+
then:
26+
1 * projectService.listProjectProtocols(project) >> protocols
27+
contextData.protocols.size() == 1
28+
contextData.protocols[0].label == 'test'
29+
contextData.protocols[0].value == 'e1'
30+
project.custom == null
31+
32+
}
33+
34+
35+
def "Project data sets will be filtered to only finished data sets"() {
36+
setup:
37+
List dataSets = [[dataSetId:'d1', progress:ActivityService.PROGRESS_FINISHED, projectOutcomes:['a','b','c']],
38+
[dataSetId:'d2', progress:ActivityService.PROGRESS_FINISHED, projectOutcomes:['d','e','f']],
39+
[dataSetId:'d3', progress:ActivityService.PROGRESS_STARTED, projectOutcomes:['g','h','i']],
40+
[dataSetId:'d4', progress:ActivityService.PROGRESS_FINISHED, projectOutcomes:['j','k','l']]]
41+
Map project = [custom:[dataSets:dataSets]]
42+
List protocols = [[name:'test', externalId:'e1']]
43+
44+
when:
45+
Map contextData = reportData.getContextData(project)
46+
47+
then:
48+
1 * projectService.listProjectProtocols(project) >> protocols
49+
project.custom.dataSets.size() == 3
50+
project.custom.dataSets*.dataSetId == ['d1','d2','d4']
51+
}
52+
53+
}

0 commit comments

Comments
 (0)