summaryrefslogtreecommitdiff
path: root/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java
blob: b4868126bec001d08603f9fe8f1a3f32b0c50bf8 (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
package com.stileeducation.markr.controller;

import com.stileeducation.markr.MarkrApplication;
import com.stileeducation.markr.converter.XmlMarkrMessageConverter;
import com.stileeducation.markr.dto.MCQTestResultsDTO;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.*;
import org.springframework.test.context.ActiveProfiles;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;

import static com.stileeducation.markr.controller.TestResultsController.IMPORT_ENDPOINT;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest(classes = MarkrApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class TestResultsControllerTest {

    private static MCQTestResultsDTO sampleResults;

    @Autowired
    private TestRestTemplate restTemplate;

    @BeforeAll
    static void setup() throws JAXBException, IOException {
        ClassPathResource resource = new ClassPathResource("sample-results.xml");
        try (InputStream inputStream = resource.getInputStream()) {
            JAXBContext jaxbContext = JAXBContext.newInstance(MCQTestResultsDTO.class);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            sampleResults = (MCQTestResultsDTO) unmarshaller.unmarshal(inputStream);
        }
    }

    private static String toXmlString(MCQTestResultsDTO mcqTestResultsDTO) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(MCQTestResultsDTO.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        StringWriter stringWriter = new StringWriter();
        marshaller.marshal(mcqTestResultsDTO, stringWriter);
        return stringWriter.toString();
    }

    @Test
    void testPost() throws Exception {
        // Given
        String requestXml = toXmlString(sampleResults);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(XmlMarkrMessageConverter.MEDIA_TYPE);

        // When
        HttpEntity<String> entity = new HttpEntity<>(requestXml, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, String.class);

        // Then
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
    }

    @Test
    void testUnsupportedMediaType() throws Exception {
        // Given
        MCQTestResultsDTO request = new MCQTestResultsDTO();
        String requestXml = toXmlString(request);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_XML);

        // When
        HttpEntity<String> entity = new HttpEntity<>(requestXml, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, String.class);

        // Then
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.UNSUPPORTED_MEDIA_TYPE);
    }

}