/* * Copyright 2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.statemachine.data.mongodb; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; //import org.springframework.data.keyvalue.core.KeyValueTemplate; import org.springframework.statemachine.data.AbstractRepositoryTests; import org.springframework.statemachine.transition.TransitionKind; /** * MongoDb repository config tests. * * @author Janne Valkealahti */ public class MongoDbRepositoryTests extends AbstractRepositoryTests { @Rule public MongoDbRule MongoDbAvailableRule = new MongoDbRule(); @Override protected void cleanInternal() { AnnotationConfigApplicationContext c = new AnnotationConfigApplicationContext(); c.register(TestConfig.class); c.refresh(); MongoTemplate template = c.getBean(MongoTemplate.class); template.dropCollection(MongoDbRepositoryAction.class); template.dropCollection(MongoDbRepositoryGuard.class); template.dropCollection(MongoDbRepositoryState.class); template.dropCollection(MongoDbRepositoryTransition.class); c.close(); } @Test public void testPopulate1() { context.register(getRegisteredClasses()); context.register(Config2.class); context.refresh(); MongoDbStateRepository stateRepository = context.getBean(MongoDbStateRepository.class); MongoDbTransitionRepository transitionRepository = context.getBean(MongoDbTransitionRepository.class); assertThat(stateRepository.count(), is(3l)); assertThat(transitionRepository.count(), is(3l)); List<MongoDbRepositoryState> states = new ArrayList<>(); stateRepository.findAll().iterator().forEachRemaining(states::add); List<MongoDbRepositoryTransition> transitions = new ArrayList<>(); transitionRepository.findAll().iterator().forEachRemaining(transitions::add); assertThat(states.size(), is(3)); assertThat(transitions.size(), is(3)); MongoDbRepositoryTransition transition1 = transitions.get(0); assertThat(transition1.getSource(), notNullValue()); assertThat(transition1.getTarget(), notNullValue()); } @Test public void testRepository1() { context.register(getRegisteredClasses()); context.refresh(); MongoDbStateRepository statesRepository = context.getBean(MongoDbStateRepository.class); MongoDbRepositoryState stateS1 = new MongoDbRepositoryState("S1"); MongoDbRepositoryState stateS2 = new MongoDbRepositoryState("S2"); assertThat(statesRepository.count(), is(0l)); statesRepository.save(stateS1); statesRepository.save(stateS2); assertThat(statesRepository.count(), is(2l)); MongoDbTransitionRepository transitionsRepository = context.getBean(MongoDbTransitionRepository.class); MongoDbRepositoryTransition transition = new MongoDbRepositoryTransition(stateS1, stateS2, "E1"); transition.setKind(TransitionKind.EXTERNAL); transitionsRepository.save(transition); assertThat(statesRepository.count(), is(2l)); MongoDbRepositoryTransition transition2 = transitionsRepository.findAll().iterator().next(); assertThat(transition2.getSource().getState(), is("S1")); assertThat(transition2.getTarget().getState(), is("S2")); assertThat(transition2.getEvent(), is("E1")); assertThat(transition2.getKind(), is(TransitionKind.EXTERNAL)); List<MongoDbRepositoryState> findByMachineId = statesRepository.findByMachineId(""); assertThat(findByMachineId.size(), is(2)); context.close(); } @Override protected Class<?>[] getRegisteredClasses() { return new Class<?>[] { TestConfig.class }; } @Override protected AnnotationConfigApplicationContext buildContext() { return new AnnotationConfigApplicationContext(); } @EnableAutoConfiguration static class TestConfig { } }