summaryrefslogtreecommitdiff
path: root/src/test/java/dev/dnpm/services/mtb/MrMtbAnmeldungToProtocolMapperTest.java
blob: 5253cfca5ab57b87b72e09df635b9f4da6786fca (plain)
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 dev.dnpm.services.mtb;

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.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Set;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doAnswer;

@ExtendWith(MockitoExtension.class)
class MrMtbAnmeldungToProtocolMapperTest {

    private IOnkostarApi onkostarApi;

    private MrMtbAnmeldungToProtocolMapper mapper;

    @BeforeEach
    void setup(
            @Mock IOnkostarApi onkostarApi
    ) {
        this.onkostarApi = onkostarApi;
        this.mapper = new MrMtbAnmeldungToProtocolMapper(onkostarApi);
    }

    @Test
    void testShouldMapCompletedForm() {
        var anmeldung = new Procedure(onkostarApi);
        anmeldung.setId(1);
        anmeldung.setFormName("MR.MTB_Anmeldung");
        anmeldung.setValue("Fragestellung", new Item("Fragestellung", "Frage?"));
        anmeldung.setValue("Empfehlung", new Item("Empfehlung", 2));

        var empfehlung = new Procedure(onkostarApi);
        empfehlung.setId(2);
        empfehlung.setFormName("MR.MTB_Empfehlung");

        var einzelempfehlung1 = new Procedure(onkostarApi);
        einzelempfehlung1.setId(10);
        einzelempfehlung1.setFormName("MR.MTB_Einzelempfehlung");
        einzelempfehlung1.setValue("Prioritaet", new Item("Empfehlungsprio", 1));
        einzelempfehlung1.setValue("Empfehlung", new Item("Empfehlung", "Empfehlung1"));

        var einzelempfehlung2 = new Procedure(onkostarApi);
        einzelempfehlung2.setId(20);
        einzelempfehlung2.setFormName("MR.MTB_Einzelempfehlung");
        einzelempfehlung2.setValue("Prioritaet", new Item("Empfehlungsprio", 2));
        einzelempfehlung2.setValue("Empfehlung", new Item("Empfehlung", "Empfehlung2"));

        doAnswer(invocationOnMock -> {
            var procedureId = invocationOnMock.getArgument(0, Integer.class);
            if (2 == procedureId) {
                return empfehlung;
            } else if (10 == procedureId) {
                return einzelempfehlung1;
            } else if (20 == procedureId) {
                return einzelempfehlung2;
            }
            return null;
        }).when(onkostarApi).getProcedure(anyInt());

        doAnswer(invocationOnMock -> {
            var procedureId = invocationOnMock.getArgument(0, Integer.class);
            if (2 == procedureId) {
                return Set.of(einzelempfehlung1, einzelempfehlung2);
            }
            return null;
        }).when(onkostarApi).getSubprocedures(anyInt());

        var actual = this.mapper.apply(anmeldung);

        assertThat(actual)
                .isPresent()
                .contains(
                        "Fragestellung:\nFrage?\n\n"
                                + "Empfehlung:\nEmpfehlung1\n\n"
                                + "Empfehlung:\nEmpfehlung2"
                );
    }

    @Test
    void testShouldMapFormWithMissingEinzelempfehlungen() {
        var anmeldung = new Procedure(onkostarApi);
        anmeldung.setId(1);
        anmeldung.setFormName("MR.MTB_Anmeldung");
        anmeldung.setValue("Fragestellung", new Item("Fragestellung", "Frage?"));
        anmeldung.setValue("Empfehlung", new Item("Empfehlung", 2));

        var empfehlung = new Procedure(onkostarApi);
        empfehlung.setId(2);
        empfehlung.setFormName("MR.MTB_Empfehlung");

        doAnswer(invocationOnMock -> {
            var procedureId = invocationOnMock.getArgument(0, Integer.class);
            if (2 == procedureId) {
                return empfehlung;
            }
            return null;
        }).when(onkostarApi).getProcedure(anyInt());

        var actual = this.mapper.apply(anmeldung);

        assertThat(actual)
                .isPresent()
                .contains("Fragestellung:\nFrage?");
    }

    @Test
    void testShouldMapFormWithMissingEmpfehlung() {
        var anmeldung = new Procedure(onkostarApi);
        anmeldung.setId(1);
        anmeldung.setFormName("MR.MTB_Anmeldung");
        anmeldung.setValue("Fragestellung", new Item("Fragestellung", "Frage?"));

        var actual = this.mapper.apply(anmeldung);

        assertThat(actual)
                .isPresent()
                .contains("Fragestellung:\nFrage?");
    }

    @Test
    void testShouldMapFormWithMissingFragestellungAndEmpfehlung() {
        var anmeldung = new Procedure(onkostarApi);
        anmeldung.setId(1);
        anmeldung.setFormName("MR.MTB_Anmeldung");

        var actual = this.mapper.apply(anmeldung);

        assertThat(actual).isEmpty();
    }
}