View Javadoc
1   /*
2    * Licensed under the GPL License. You may not use this file except in compliance with the License.
3    * You may obtain a copy of the License at
4    *
5    *   https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6    *
7    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
8    * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
9    * PURPOSE.
10   */
11  package psiprobe.controllers;
12  
13  import static org.junit.jupiter.api.Assertions.assertEquals;
14  import static org.junit.jupiter.api.Assertions.assertNull;
15  import static org.junit.jupiter.api.Assertions.assertTrue;
16  
17  import com.codebox.bean.JavaBeanTester;
18  
19  import org.jfree.data.xy.DefaultTableXYDataset;
20  import org.jfree.data.xy.XYSeries;
21  import org.junit.jupiter.api.Test;
22  import org.springframework.context.support.StaticApplicationContext;
23  import org.springframework.mock.web.MockHttpServletRequest;
24  import org.springframework.mock.web.MockHttpServletResponse;
25  import org.springframework.test.util.ReflectionTestUtils;
26  
27  import psiprobe.beans.stats.providers.SeriesProvider;
28  import psiprobe.model.stats.StatsCollection;
29  
30  /**
31   * The Class RenderChartControllerTest.
32   */
33  class RenderChartControllerTest {
34  
35    public static class TestSeriesProvider implements SeriesProvider {
36  
37      @Override
38      public void populate(DefaultTableXYDataset dataset, StatsCollection statsCollection,
39          jakarta.servlet.http.HttpServletRequest request) {
40        XYSeries series = new XYSeries("series-1", true, false);
41        series.add(1L, 2L);
42        dataset.addSeries(series);
43      }
44    }
45  
46    public static class NotASeriesProvider {
47      // no-op
48    }
49  
50    /**
51     * Javabean tester.
52     */
53    @Test
54    void javabeanTester() {
55      JavaBeanTester.builder(RenderChartController.class)
56          .skip("applicationContext", "supportedMethods").test();
57    }
58  
59    @Test
60    void handleRequestRendersLineChartFromSeriesProvider() throws Exception {
61      RenderChartController controller = new RenderChartController();
62      ReflectionTestUtils.setField(controller, "statsCollection", new StatsCollection());
63  
64      StaticApplicationContext applicationContext = new StaticApplicationContext();
65      applicationContext.registerSingleton("seriesProvider", TestSeriesProvider.class);
66      controller.setApplicationContext(applicationContext);
67  
68      MockHttpServletRequest request = new MockHttpServletRequest("GET", "/chart.png");
69      request.addParameter("ct", "line");
70      request.addParameter("p", "seriesProvider");
71      request.addParameter("xz", "320");
72      request.addParameter("yz", "200");
73  
74      MockHttpServletResponse response = new MockHttpServletResponse();
75  
76      assertNull(controller.handleRequest(request, response));
77      assertEquals("image/png", response.getHeader("Content-type"));
78      assertTrue(response.getContentAsByteArray().length > 0);
79    }
80  
81    @Test
82    void handleRequestRendersChartWhenProviderBeanDoesNotImplementSeriesProvider() throws Exception {
83      RenderChartController controller = new RenderChartController();
84      ReflectionTestUtils.setField(controller, "statsCollection", new StatsCollection());
85  
86      StaticApplicationContext applicationContext = new StaticApplicationContext();
87      applicationContext.registerSingleton("badProvider", NotASeriesProvider.class);
88      controller.setApplicationContext(applicationContext);
89  
90      MockHttpServletRequest request = new MockHttpServletRequest("GET", "/chart.png");
91      request.addParameter("ct", "area");
92      request.addParameter("p", "badProvider");
93  
94      MockHttpServletResponse response = new MockHttpServletResponse();
95  
96      assertNull(controller.handleRequest(request, response));
97      assertEquals("image/png", response.getHeader("Content-type"));
98      assertTrue(response.getContentAsByteArray().length > 0);
99    }
100 
101 }