View Javadoc
1   package fr.ifremer.dali.service.administration.context;
2   
3   /*
4    * #%L
5    * Dali :: Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import com.google.common.collect.Lists;
27  import fr.ifremer.dali.dao.DaliDatabaseResource;
28  import fr.ifremer.dali.dto.DaliBeanFactory;
29  import fr.ifremer.dali.dto.configuration.context.ContextDTO;
30  import fr.ifremer.dali.dto.configuration.filter.FilterDTO;
31  import fr.ifremer.dali.dto.configuration.programStrategy.ProgramDTO;
32  import fr.ifremer.dali.dto.enums.FilterTypeValues;
33  import fr.ifremer.dali.dto.referential.LocationDTO;
34  import fr.ifremer.dali.service.DaliServiceLocator;
35  import org.apache.commons.logging.Log;
36  import org.apache.commons.logging.LogFactory;
37  import org.junit.Assert;
38  import org.junit.Before;
39  import org.junit.ClassRule;
40  import org.junit.Test;
41  
42  import java.io.File;
43  import java.util.Collection;
44  import java.util.List;
45  
46  /**
47   * @author Lionel Touseau <lionel.touseau@e-is.pro>
48   */
49  public class ContextServiceTest {
50  
51      private static final Log log = LogFactory.getLog(ContextServiceTest.class);
52  
53      @ClassRule
54      public static final DaliDatabaseResource dbResource = DaliDatabaseResource.writeDb();
55  
56      private ContextService service;
57  
58      @Before
59      public void setUp() {
60          service = DaliServiceLocator.instance().getContextService();
61      }
62  
63      @Test
64      @SuppressWarnings("unchecked")
65      public void getLocationFilter() {
66          FilterDTO f = service.getFilter(1001); // filter 1000
67          Assert.assertNotNull(f);
68          service.loadFilteredElements(f);
69  
70          List<LocationDTO> l = (List<LocationDTO>) f.getElements();
71          Assert.assertEquals(2, l.size());
72          Assert.assertEquals("Jetée est Dunkerque", ((LocationDTO) f.getElements().get(0)).getName());
73          Assert.assertEquals("Cap Gris nez", ((LocationDTO) f.getElements().get(1)).getName());
74  
75          FilterDTO fp = service.getFilter(1002);
76          Assert.assertNotNull(fp);
77          service.loadFilteredElements(fp);
78  
79          List<ProgramDTO> p = (List<ProgramDTO>) fp.getElements();
80          Assert.assertEquals(2, p.size());
81          Assert.assertEquals("REBENT", ((ProgramDTO) fp.getElements().get(0)).getCode());
82          Assert.assertEquals("REMIS", ((ProgramDTO) fp.getElements().get(1)).getCode());
83      }
84  
85      @Test
86      public void saveAndDeleteFilters() {
87          FilterDTO f1 = service.getFilter(1001);
88  
89          FilterDTO f2 = DaliBeanFactory.newFilterDTO();
90          LocationDTO l1 = DaliBeanFactory.newLocationDTO();
91          l1.setId(2); // Digue du Braek
92          l1.setLabel("L1");
93          f2.setFilterTypeId(FilterTypeValues.LOCATION.getFilterTypeId());
94          f2.setName("test new");
95          f2.setElements(Lists.newArrayList(l1));
96          f2.setDirty(true);
97  
98          List<FilterDTO> filters = Lists.newArrayList(f1, f2);
99  //        DaliServiceLocator.instance().getDataContext().setRecorderPersonId(1);
100         service.saveFilters(filters);
101 
102         filters.remove(f1);
103         f2 = filters.get(0);
104 
105         Integer newFilterId = f2.getId();
106 
107         Assert.assertNotNull(newFilterId);
108 
109         List<FilterDTO> filtersToRemove = Lists.newArrayList();
110         filtersToRemove.add(f2);
111 
112         service.deleteFilters(filtersToRemove);
113 
114         f2 = service.getFilter(newFilterId);
115 
116         Assert.assertNull(f2);
117 
118     }
119 
120     @Test
121     public void getContexts() {
122         List<ContextDTO> contexts = service.getAllContexts();
123         Assert.assertTrue(contexts.size() >= 2);
124 
125         ContextDTO c1 = service.getContext(1001);
126         Assert.assertNotNull(c1);
127         Assert.assertEquals(3, c1.getFilters().size());
128 
129     }
130 
131     @Test
132     public void saveContexts() {
133         List<ContextDTO> contexts = service.getAllContexts();
134 
135         ContextDTO newCtxt = DaliBeanFactory.newContextDTO();
136         newCtxt.setDirty(true);
137         newCtxt.setName("Test NEW");
138 
139         Collection<FilterDTO> filters = Lists.newArrayList();
140         filters.addAll(service.getAllLocationFilter());
141         filters.addAll(service.getAllProgramFilter());
142 
143         newCtxt.setFilters(filters);
144 
145         contexts.add(newCtxt);
146 
147         service.saveContexts(contexts);
148 
149         Assert.assertNotNull(newCtxt.getId());
150 
151     }
152 
153     @Test
154     public void deleteContexts() {
155         List<ContextDTO> contexts = service.getAllContexts();
156         List<ContextDTO> contextsToDelete = Lists.newArrayList();
157 
158         int contextNbBefore = contexts.size();
159 
160         for (ContextDTO c : contexts) {
161             if (c.getId() < 1000) {
162                 contextsToDelete.add(c);
163             }
164         }
165 
166         int nbToDelete = contextsToDelete.size();
167 
168         service.deleteContexts(contextsToDelete);
169 
170         int contextNbAfter = service.getAllContexts().size();
171 
172         Assert.assertEquals(contextNbAfter, contextNbBefore - nbToDelete);
173 
174     }
175 
176     @Test
177     public void exportImportFilters() {
178         List<FilterDTO> filters = Lists.newArrayList();
179         FilterDTO f1 = service.getFilter(1004);
180         filters.add(f1);
181         Assert.assertFalse(filters.isEmpty());
182         int filtersNb = filters.size();
183 
184         File exportFile = new File(dbResource.getResourceDirectory(), "filters.dat");
185         service.exportFilter(filters, exportFile);
186 
187         service.importFilter(exportFile, f1.getFilterTypeId());
188         service.deleteFilters(filters);
189         List<FilterDTO> importedFilters = service.importFilter(exportFile, f1.getFilterTypeId());
190         Assert.assertEquals(filtersNb, importedFilters.size());
191 
192         FilterDTO importedFilter = importedFilters.get(0);
193         Assert.assertEquals(1, importedFilter.getElements().size());
194 
195     }
196 
197     @Test
198     public void duplicateFilter() throws CloneNotSupportedException {
199 
200         FilterDTO filter = service.getFilter(1001);
201         service.loadFilteredElements(filter);
202 
203         int nbLoc = filter.getElements().size();
204 
205         FilterDTO newFilter = service.duplicateFilter(filter);
206 
207         Assert.assertNull(newFilter.getId());
208         Assert.assertEquals(nbLoc, newFilter.getElements().size());
209 
210     }
211 
212 }