package net.rrm.ehour.backup.service.backup;
import com.google.common.collect.Lists;
import net.rrm.ehour.backup.common.BackupConfig;
import net.rrm.ehour.backup.config.EhourBackupConfig;
import net.rrm.ehour.config.ConfigurationItem;
import net.rrm.ehour.config.EhourConfigStub;
import net.rrm.ehour.config.service.ConfigurationService;
import net.rrm.ehour.domain.Configuration;
import net.rrm.ehour.persistence.backup.dao.BackupDao;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.*;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class DatabaseBackupServiceImplTest {
@Mock
private BackupDao exportDao;
@Mock
private ConfigurationService configurationService;
private BackupConfig backupConfig;
private DatabaseBackupServiceImpl service;
@Before
public void setUp() {
backupConfig = new EhourBackupConfig();
service = new DatabaseBackupServiceImpl(exportDao, configurationService, backupConfig);
}
@SuppressWarnings("unchecked")
@Test
public void shouldProduceXml() {
Map<String, Object> map = new HashMap<>();
map.put("ASSIGNMENT_ID", 1);
map.put("ENTRY_DATE", new Date());
map.put("COMMENT", "\uC3BC and \uC3B6 and <&> für");
List<Map<String, Object>> rows = Lists.newArrayList(map);
when(exportDao.findAll("TIMESHEET_ENTRY")).thenReturn(rows);
EhourConfigStub configuration = new EhourConfigStub();
configuration.setVersion("0.9");
when(configurationService.getConfiguration()).thenReturn(configuration);
List<Configuration> configurationList = Lists.newArrayList(new Configuration(ConfigurationItem.AVAILABLE_TRANSLATIONS.getDbField(), "nl"));
when(configurationService.findAllConfiguration()).thenReturn(configurationList);
byte[] xmlBytes = service.exportDatabase();
String xml = new String(xmlBytes);
assertThat(xml, containsString("0.9"));
assertThat(xml, containsString("TIMESHEET_ENTRY"));
assertThat(xml, containsString("CONFIG"));
assertTrue(xml.startsWith("<?xml version="));
}
}