package de.otto.edison.jobs.service;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static de.otto.edison.testsupport.util.Sets.hashSet;
import static java.util.Collections.singleton;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.contains;
public class JobMutexGroupsTest {
@Configuration
static class TestMutexGroupConfiguration {
@Bean
JobMutexGroup first() {
return new JobMutexGroup("first", "foo", "foo1", "foo2");
}
@Bean
JobMutexGroup second() {
return new JobMutexGroup("second", "bar", "bar1", "foo1");
}
}
@Test
public void shouldAutowireMultipleMutexGroups() {
try (final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) {
context.register(TestMutexGroupConfiguration.class);
context.register(JobMutexGroups.class);
context.refresh();
final JobMutexGroups jobMutexGroups = context.getBean("jobMutexGroups", JobMutexGroups.class);
assertThat(jobMutexGroups.getMutexGroups(), hasSize(2));
}
}
@Test
public void shouldNeverMutuallyExcludeSameType() {
final JobMutexGroups mutexGroups = new JobMutexGroups();
mutexGroups.setMutexGroups(singleton(
new JobMutexGroup("test", "foo", "bar"))
);
assertThat(mutexGroups.mutexJobTypesFor("foo"), contains("bar"));
}
@Test
public void shouldMutuallyExcludeOthers() {
final JobMutexGroups mutexGroups = new JobMutexGroups();
mutexGroups.setMutexGroups(hashSet(
new JobMutexGroup("first", "foo", "foo1", "foo2"),
new JobMutexGroup("second", "bar", "bar1", "foo1")
));
assertThat(mutexGroups.mutexJobTypesFor("foo1"), containsInAnyOrder("foo", "foo2", "bar", "bar1"));;
}
}