/*
* This file is part of LibrePlan
*
* Copyright (C) 2013 St. Antoniusziekenhuis
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.libreplan.importers;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.libreplan.importers.tim.DataDTO;
import org.libreplan.importers.tim.DepartmentDTO;
import org.libreplan.importers.tim.DurationDTO;
import org.libreplan.importers.tim.FilterDTO;
import org.libreplan.importers.tim.PeriodDTO;
import org.libreplan.importers.tim.PersonDTO;
import org.libreplan.importers.tim.ProductDTO;
import org.libreplan.importers.tim.RegistrationDateDTO;
import org.libreplan.importers.tim.RosterCategoryDTO;
import org.libreplan.importers.tim.RosterDTO;
import org.libreplan.importers.tim.RosterRequestDTO;
import org.libreplan.importers.tim.RosterResponseDTO;
import org.libreplan.importers.tim.TimOptions;
import org.libreplan.importers.tim.TimeRegistrationDTO;
import org.libreplan.importers.tim.TimeRegistrationRequestDTO;
import org.libreplan.importers.tim.TimeRegistrationResponseDTO;
/**
* Test for {@link TimSoapClient}
*
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
*/
public class TimSoapClientTest {
private Properties properties = null;
@Before
public void loadProperties() throws FileNotFoundException, IOException {
String filename = System.getProperty("user.dir")
+ "/../scripts/tim-connector/tim-conn.properties";
properties = new Properties();
properties.load(new FileInputStream(filename));
}
private TimeRegistrationDTO createTimeRegistration(String name,
String productCode, LocalDate localDate, Double hours) {
PersonDTO personDTO = new PersonDTO();
personDTO.setName(name);
personDTO.setOptions(TimOptions.UPDATE_OR_INSERT);
ProductDTO productDTO = new ProductDTO();
productDTO.setOptions(TimOptions.UPDATE_OR_INSERT);
productDTO.setCode(productCode);
RegistrationDateDTO dateDTO = new RegistrationDateDTO();
dateDTO.setOptions(TimOptions.UPDATE_OR_INSERT);
dateDTO.setDate(localDate);
DurationDTO durationDTO = new DurationDTO();
durationDTO.setOptions(TimOptions.DECIMAL);
durationDTO.setDuration(hours);
TimeRegistrationDTO timeRegistrationDTO = new TimeRegistrationDTO();
timeRegistrationDTO.setPerson(personDTO);
timeRegistrationDTO.setProduct(productDTO);
timeRegistrationDTO.setRegistrationDate(dateDTO);
timeRegistrationDTO.setDuration(durationDTO);
return timeRegistrationDTO;
}
private RosterRequestDTO createRosterRequest() {
RosterDTO rosterDTO = new RosterDTO();
rosterDTO.setStartDate(new LocalDate());
rosterDTO.setEndDate(new LocalDate().plusDays(7));
rosterDTO.setResourcePlanning(false);
rosterDTO.setDayPlanning(false);
rosterDTO.setCalendar(false);
rosterDTO.setNonPlaned(true);
rosterDTO.setFullDay(false);
rosterDTO.setConcept(false);
PeriodDTO periodeDTO = new PeriodDTO();
periodeDTO.setStart(new org.joda.time.DateTime());
periodeDTO.setEnd(new org.joda.time.DateTime().plusDays(7));
List<PeriodDTO> periods = new ArrayList<PeriodDTO>();
periods.add(periodeDTO);
DepartmentDTO departmentDTO = new DepartmentDTO();
departmentDTO.setRef("4");
RosterCategoryDTO rosterCategoryDTO = new RosterCategoryDTO();
rosterCategoryDTO.setName(new String());
List<RosterCategoryDTO> rosterCategories = new ArrayList<RosterCategoryDTO>();
rosterCategories.add(rosterCategoryDTO);
FilterDTO filterDTO = new FilterDTO();
filterDTO.setPeriods(periods);
filterDTO.setDepartment(departmentDTO);
rosterDTO.setFilter(filterDTO);
List<PersonDTO> personDTOs = new ArrayList<PersonDTO>();
personDTOs.add(new PersonDTO());
rosterDTO.setPersons(personDTOs);
rosterDTO.setRosterCategories(rosterCategories);
rosterDTO.setDepartment(departmentDTO);
rosterDTO.setPrecence(new String());
rosterDTO.setPeriods(periods);
RosterRequestDTO exportRosterRequestDTO = new RosterRequestDTO();
DataDTO<RosterDTO> data = new DataDTO<RosterDTO>();
data.setData(rosterDTO);
exportRosterRequestDTO.setData(data);
return exportRosterRequestDTO;
}
@Test
@Ignore("Only working if you have a Tim server configured")
public void testValidAuthorization() {
boolean result = TimSoapClient.checkAuthorization(
properties.getProperty("url"),
properties.getProperty("username"),
properties.getProperty("password"));
assertTrue(result);
}
@Test
public void testInvalidAuthorization() {
boolean result = TimSoapClient.checkAuthorization(
properties.getProperty("url"),
properties.getProperty("username"), properties.getProperty(""));
assertTrue(!result);
}
@Test
@Ignore("Only working if you have a Tim server configured")
public void testImportRostersFromFile() {
String filename = System.getProperty("user.dir")
+ "/../scripts/tim_test/rosterResponse.xml";
File file = new File(filename);
RosterResponseDTO rosterResponseDTO = TimSoapClient
.unmarshalRosterFromFile(file);
if (rosterResponseDTO == null) {
fail("Roster Response is null");
}
assertTrue(rosterResponseDTO.getRosters().size() > 0);
}
@Test
@Ignore("Only working if you have a Tim server configured")
public void testImportRostersFromServer() {
RosterResponseDTO rosterResponseDTO = TimSoapClient
.sendRequestReceiveResponse(properties.getProperty("url"),
properties.getProperty("username"),
properties.getProperty("password"),
createRosterRequest(), RosterResponseDTO.class);
if (rosterResponseDTO == null) {
fail("Roster Response is null");
}
assertTrue(rosterResponseDTO.getRosters().size() > 0);
}
@Test
@Ignore("Only working if you have a Tim server configured")
public void testExportTimeRegistrationWith1Item() {
List<TimeRegistrationDTO> timeRegistrations = new ArrayList<TimeRegistrationDTO>();
TimeRegistrationDTO timeRegistration = createTimeRegistration(
"Baten, Jeroen", "5160", new LocalDate().minusDays(1), 9.00);
timeRegistrations.add(timeRegistration);
TimeRegistrationRequestDTO timeRegistrationRequestDTO = new TimeRegistrationRequestDTO();
timeRegistrationRequestDTO.setTimeRegistrations(timeRegistrations);
TimeRegistrationResponseDTO timeRegistrationResponse = TimSoapClient
.sendRequestReceiveResponse(properties.getProperty("url"),
properties.getProperty("username"),
properties.getProperty("password"),
timeRegistrationRequestDTO,
TimeRegistrationResponseDTO.class);
if (timeRegistrationResponse == null) {
fail("Time Registration Response is null");
}
assertTrue(!timeRegistrationResponse.getRefs().isEmpty());
}
@Test
@Ignore("Only working if you have a Tim server configured")
public void testExportTimeRegistrationWith2Items() {
List<TimeRegistrationDTO> timeRegistrationDTOs = new ArrayList<TimeRegistrationDTO>();
TimeRegistrationDTO timeRegistrationDTO1 = createTimeRegistration(
"Baten, Jeroen", "5160", new LocalDate(), 8.00);
timeRegistrationDTOs.add(timeRegistrationDTO1);
TimeRegistrationDTO timeRegistrationDTO2 = createTimeRegistration(
"Baten, Jeroen", "5160", new LocalDate(), 9.00);
timeRegistrationDTOs.add(timeRegistrationDTO2);
TimeRegistrationRequestDTO timeRegistrationRequest = new TimeRegistrationRequestDTO();
timeRegistrationRequest.setTimeRegistrations(timeRegistrationDTOs);
TimeRegistrationResponseDTO timeRegistrationResponse = TimSoapClient
.sendRequestReceiveResponse(properties.getProperty("url"),
properties.getProperty("username"),
properties.getProperty("password"),
timeRegistrationRequest,
TimeRegistrationResponseDTO.class);
if (timeRegistrationResponse == null) {
fail("Time Registration Response is null");
}
assertTrue(!timeRegistrationResponse.getRefs().isEmpty());
}
}