/*
* ====================================================================
* Copyright (c) 2005-2012 sventon project. All rights reserved.
*
* This software is licensed as described in the file LICENSE, which
* you should have received as part of this distribution. The terms
* are also available at http://www.sventon.org.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.sventon.appl;
import org.junit.Before;
import org.junit.Test;
import org.sventon.model.RepositoryName;
import java.util.Collection;
import java.util.Set;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public class RepositoryConfigurationsTest {
private RepositoryConfigurations configs;
private RepositoryConfiguration cheeseConfig;
private RepositoryConfiguration hamConfig;
private RepositoryConfigurations configs2;
private RepositoryConfiguration milkConfig;
private RepositoryConfiguration cerealConfig;
@Before
public void setUp() throws Exception {
configs = new RepositoryConfigurations();
cheeseConfig = new RepositoryConfiguration("cheese");
hamConfig = new RepositoryConfiguration("ham");
configs2 = new RepositoryConfigurations();
milkConfig = new RepositoryConfiguration("milk");
cerealConfig = new RepositoryConfiguration("cereal");
}
@Test
public void addAndRemoveConfigurations() {
configs.add(cheeseConfig);
assertThat(configs.getConfiguration(new RepositoryName("cheese")), sameInstance(cheeseConfig));
assertThat(configs.getConfiguration(new RepositoryName("ham")), nullValue());
RepositoryConfiguration removedConfig = configs.remove(new RepositoryName("cheese"));
assertThat(removedConfig, sameInstance(cheeseConfig));
assertThat(configs.getConfiguration(new RepositoryName("cheese")), nullValue());
}
@Test
public void getAllConfigurations() {
configs.add(cheeseConfig);
configs.add(hamConfig);
Collection<RepositoryConfiguration> allConfigs = configs.getAllConfigurations();
assertThat(allConfigs.size(), is(2));
}
@Test
public void containsConfiguration() {
configs.add(cheeseConfig);
configs.add(hamConfig);
assertThat(configs.containsConfiguration(new RepositoryName("cheese")), is(true));
}
@Test
public void getAllConfigurationNames() {
configs.add(cheeseConfig);
configs.add(hamConfig);
Set<RepositoryName> names = configs.getAllConfigurationNames();
assertThat(names.size(), is(2));
assertThat(names.contains(hamConfig.getName()), is(true));
assertThat(names.contains(cheeseConfig.getName()), is(true));
}
//-- Diff tests
@Test
public void getRepositoryConfigurationCount() {
RepositoryConfigurations configs = new RepositoryConfigurations();
assertThat(configs.count(), is(0));
configs.add(cheeseConfig);
configs.add(hamConfig);
assertThat(configs.count(), is(2));
}
@Test
public void diffTwoConfigurationsThatHasNothingInCommon() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(milkConfig);
configs2.add(cerealConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
assertThat(diff.added.size(), is(2));
assertThat(diff.removed.size(), is(2));
assertThat(diff.added.contains(milkConfig), is(true));
assertThat(diff.added.contains(cerealConfig), is(true));
assertThat(diff.removed.contains(cheeseConfig), is(true));
assertThat(diff.removed.contains(hamConfig), is(true));
}
@Test
public void diffTwoConfigurationsThatHaveTheSameContents() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(cheeseConfig);
configs2.add(hamConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
assertThat(diff.added.size(), is(0));
assertThat(diff.removed.size(), is(0));
}
@Test
public void diffTwoOverlappingConfigurations() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(cheeseConfig);
configs2.add(cerealConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
assertThat(diff.added.size(), is(1));
assertThat(diff.removed.size(), is(1));
assertThat(diff.added.contains(cerealConfig), is(true));
assertThat(diff.removed.contains(hamConfig), is(true));
}
@Test
public void diffTwoConfigurationsWhereTheNewContainsAllOldConfigurations() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(cheeseConfig);
configs2.add(hamConfig);
configs2.add(cerealConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
assertThat(diff.added.size(), is(1));
assertThat(diff.removed.size(), is(0));
assertThat(diff.added.contains(cerealConfig), is(true));
}
@Test
public void diffTwoConfigurationsWhereTheNewContainsFewerConfigurations() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(hamConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
assertThat(diff.added.size(), is(0));
assertThat(diff.removed.size(), is(1));
assertThat(diff.removed.contains(cheeseConfig), is(true));
}
//-- apply tests
@Test
public void applyConfigDiffs() {
configs.add(cheeseConfig);
configs.add(hamConfig);
configs2.add(cheeseConfig);
configs2.add(cerealConfig);
RepositoryConfigurations.ConfigsDiff diff = configs.diffByRepositoryName(configs2);
configs.apply(diff);
assertThat(configs.count(), is(2));
assertThat(configs.getConfiguration(new RepositoryName("cheese")), sameInstance(cheeseConfig));
assertThat(configs.getConfiguration(new RepositoryName("cheese")), sameInstance(cheeseConfig));
assertThat(configs.getConfiguration(new RepositoryName("ham")), nullValue());
}
}