Skip to content

Commit 32b6b69

Browse files
fix: Fix continuous event analytics export (#23860)
* Invert skipPrograms ternary in getRegularAnalyticsTables (was returning all programs when skip list was set, filtering when not) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3d4cd1b commit 32b6b69

2 files changed

Lines changed: 41 additions & 3 deletions

File tree

dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,10 @@ private List<AnalyticsTable> getRegularAnalyticsTables(
194194

195195
List<Program> programs =
196196
params.isSkipPrograms()
197-
? idObjectManager.getAllNoAcl(Program.class)
198-
: idObjectManager.getAllNoAcl(Program.class).stream()
197+
? idObjectManager.getAllNoAcl(Program.class).stream()
199198
.filter(p -> !params.getSkipPrograms().contains(p.getUid()))
200-
.collect(toList());
199+
.collect(toList())
200+
: idObjectManager.getAllNoAcl(Program.class);
201201

202202
Integer firstDataYear = availableDataYears.get(0);
203203
Integer latestDataYear = availableDataYears.get(availableDataYears.size() - 1);

dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManagerTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
import static org.hamcrest.MatcherAssert.assertThat;
3232
import static org.hamcrest.Matchers.containsString;
3333
import static org.hamcrest.Matchers.equalTo;
34+
import static org.hamcrest.Matchers.hasItem;
3435
import static org.hamcrest.Matchers.hasSize;
3536
import static org.hamcrest.Matchers.is;
37+
import static org.hamcrest.Matchers.not;
3638
import static org.hamcrest.Matchers.notNullValue;
3739
import static org.hisp.dhis.DhisConvenienceTest.createCategory;
3840
import static org.hisp.dhis.DhisConvenienceTest.createCategoryCombo;
@@ -1113,6 +1115,42 @@ void verifyTeaTypeOrgUnitFetchesOuNameWhenPopulatingEventAnalyticsTable() {
11131115
assertThat(sql.getValue(), containsString(String.format(ouQuery, "name")));
11141116
}
11151117

1118+
@Test
1119+
@DisplayName("getRegularAnalyticsTables excludes programs listed in skipPrograms")
1120+
void getRegularAnalyticsTablesExcludesSkippedPrograms() {
1121+
Program prA = createProgram('A');
1122+
Program prB = createProgram('B');
1123+
Program prC = createProgram('C');
1124+
Program prD = createProgram('D');
1125+
1126+
Set<String> skipPrograms = new HashSet<>();
1127+
skipPrograms.add(prC.getUid());
1128+
skipPrograms.add(prD.getUid());
1129+
1130+
AnalyticsTableUpdateParams params =
1131+
AnalyticsTableUpdateParams.newBuilder()
1132+
.withLastYears(2)
1133+
.withStartTime(START_TIME)
1134+
.withToday(today)
1135+
.withSkipPrograms(skipPrograms)
1136+
.build();
1137+
1138+
when(idObjectManager.getAllNoAcl(Program.class)).thenReturn(List.of(prA, prB, prC, prD));
1139+
when(periodDataProvider.getAvailableYears(DATABASE))
1140+
.thenReturn(List.of(2018, 2019, now().getYear()));
1141+
when(jdbcTemplate.queryForList(Mockito.anyString(), Mockito.eq(Integer.class)))
1142+
.thenReturn(List.of(2018, 2019));
1143+
1144+
List<AnalyticsTable> tables = subject.getAnalyticsTables(params);
1145+
1146+
assertThat(tables, hasSize(2));
1147+
1148+
List<String> programUids =
1149+
tables.stream().map(t -> t.getProgram().getUid()).collect(Collectors.toList());
1150+
assertThat(programUids, not(hasItem(prC.getUid())));
1151+
assertThat(programUids, not(hasItem(prD.getUid())));
1152+
}
1153+
11161154
private String toAlias(String template, String uid) {
11171155
return String.format(template, uid, uid, uid);
11181156
}

0 commit comments

Comments
 (0)