1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
package DNPM.services.consent;
import de.itc.onkostar.api.IOnkostarApi;
import de.itc.onkostar.api.Item;
import de.itc.onkostar.api.Procedure;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.sql.Date;
import java.time.Instant;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class UkwConsentManagerServiceTest {
private IOnkostarApi onkostarApi;
private UkwConsentManagerService service;
@BeforeEach
void setup(
@Mock IOnkostarApi onkostarApi
) {
this.onkostarApi = onkostarApi;
this.service = new UkwConsentManagerService(onkostarApi);
}
@Test
void testShouldSkipUpdateRelatedDnpmKlinikAnamneseFormIfNoConsentAvailable() throws Exception {
var excelForm = new Procedure(this.onkostarApi);
excelForm.setId(111);
excelForm.setPatientId(123);
excelForm.setValue("refdnpmklinikanamnese", new Item("refdnpmklinikanamnese", 2));
var dnpmKlinikAnamneseForm = new Procedure(this.onkostarApi);
dnpmKlinikAnamneseForm.setId(2);
dnpmKlinikAnamneseForm.setPatientId(123);
when(onkostarApi.getProcedure(anyInt())).thenReturn(dnpmKlinikAnamneseForm);
this.service.applyConsent(excelForm);
verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean());
}
@Test
void testShouldSkipUpdateRelatedDnpmKlinikAnamneseFormIfNoConsentDateAvailable() throws Exception {
var consentSubForm = new Procedure(this.onkostarApi);
consentSubForm.setId(1);
consentSubForm.setPatientId(123);
consentSubForm.setValue("status", new Item("status", "accepted"));
var excelForm = new Procedure(this.onkostarApi);
excelForm.setId(111);
excelForm.setPatientId(123);
excelForm.setValue("refdnpmklinikanamnese", new Item("refdnpmklinikanamnese", 2));
excelForm.addSubProcedure("ufdnpmconsent", consentSubForm);
var dnpmKlinikAnamneseForm = new Procedure(this.onkostarApi);
dnpmKlinikAnamneseForm.setId(2);
dnpmKlinikAnamneseForm.setPatientId(123);
when(onkostarApi.getProcedure(anyInt())).thenReturn(dnpmKlinikAnamneseForm);
this.service.applyConsent(excelForm);
verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean());
}
@Test
void testShouldSkipUpdateRelatedDnpmKlinikAnamneseFormIfNoConsentValueAvailable() throws Exception {
var consentSubForm = new Procedure(this.onkostarApi);
consentSubForm.setId(1);
consentSubForm.setPatientId(123);
consentSubForm.setStartDate(Date.from(Instant.parse("2023-04-03T12:00:00Z")));
consentSubForm.setValue("datum", new Item("datum", Date.from(Instant.parse("2023-04-03T12:00:00Z"))));
var excelForm = new Procedure(this.onkostarApi);
excelForm.setId(111);
excelForm.setPatientId(123);
excelForm.setValue("refdnpmklinikanamnese", new Item("refdnpmklinikanamnese", 2));
excelForm.addSubProcedure("ufdnpmconsent", consentSubForm);
var dnpmKlinikAnamneseForm = new Procedure(this.onkostarApi);
dnpmKlinikAnamneseForm.setId(2);
dnpmKlinikAnamneseForm.setPatientId(123);
when(onkostarApi.getProcedure(anyInt())).thenReturn(dnpmKlinikAnamneseForm);
this.service.applyConsent(excelForm);
verify(onkostarApi, times(0)).saveProcedure(any(Procedure.class), anyBoolean());
}
@Test
void testShouldUpdateRelatedDnpmKlinikAnamneseFormOnFormSave() throws Exception {
var consentSubForm = new Procedure(this.onkostarApi);
consentSubForm.setId(1);
consentSubForm.setPatientId(123);
consentSubForm.setStartDate(Date.from(Instant.parse("2023-04-03T12:00:00Z")));
consentSubForm.setValue("datum", new Item("datum", Date.from(Instant.parse("2023-04-03T12:00:00Z"))));
consentSubForm.setValue("status", new Item("status", "accepted"));
var excelForm = new Procedure(this.onkostarApi);
excelForm.setId(111);
excelForm.setPatientId(123);
excelForm.setValue("refdnpmklinikanamnese", new Item("refdnpmklinikanamnese", 2));
excelForm.addSubProcedure("ufdnpmconsent", consentSubForm);
var dnpmKlinikAnamneseForm = new Procedure(this.onkostarApi);
dnpmKlinikAnamneseForm.setId(2);
dnpmKlinikAnamneseForm.setPatientId(123);
when(onkostarApi.getProcedure(anyInt())).thenReturn(dnpmKlinikAnamneseForm);
this.service.applyConsent(excelForm);
var argumentCaptor = ArgumentCaptor.forClass(Procedure.class);
verify(onkostarApi, times(1)).saveProcedure(argumentCaptor.capture(), anyBoolean());
var savedForm = argumentCaptor.getValue();
assertThat(savedForm).isExactlyInstanceOf(Procedure.class);
assertThat(savedForm.getValue("ConsentStatusEinwilligungDNPM").getString()).isEqualTo("accepted");
assertThat(savedForm.getValue("ConsentDatumEinwilligungDNPM").getDate()).isEqualTo("2023-04-03T12:00:00Z");
}
}
|