package brainslug.jpa;
import brainslug.flow.execution.instance.FlowInstanceProperties;
import static brainslug.util.IdUtil.*;
import brainslug.jpa.entity.FlowInstanceEntity;
import brainslug.util.UuidGenerator;
import org.assertj.core.api.Assertions;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import static brainslug.flow.execution.property.ExecutionProperties.newProperties;
import static java.util.Arrays.asList;
public class JpaPropertyStoreIT extends AbstractDatabaseTest {
JpaTokenStore jpaTokenStore;
FlowInstanceEntity instance;
JpaPropertyStore jpaPropertyStore;
JpaInstanceStore jpaInstanceStore;
@Before
public void setup() {
UuidGenerator idGenerator = new UuidGenerator();
jpaTokenStore = new JpaTokenStore(database, idGenerator, jpaInstanceStore);
jpaInstanceStore = new JpaInstanceStore(database, idGenerator);
instance = (FlowInstanceEntity) jpaInstanceStore.createInstance(id("definitionId"));
jpaPropertyStore = new JpaPropertyStore(database, idGenerator, jpaInstanceStore);
}
@Test
public void shouldStoreStringProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("stringTest", "value"));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("stringTest", String.class)).isEqualTo("value");
}
@Test
public void shouldStoreDoubleProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("doubleTest", 1.2));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("doubleTest", Double.class)).isEqualTo(1.2);
}
@Test
public void shouldStoreFloatProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("floatTest", 1.2f));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("floatTest", Float.class)).isEqualTo(1.2f);
}
@Test
public void shouldStoreLongProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("longTest", 12l));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("longTest", Long.class)).isEqualTo(12l);
}
@Test
public void shouldStoreBooleanProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("booleanTest", true));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("booleanTest", Boolean.class)).isEqualTo(true);
}
@Test
public void shouldStoreIntProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("intTest", 1));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.value("intTest", Double.class)).isEqualTo(1);
}
@Test
public void shouldStoreSerializable() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("serializableTest", asList("1", "2")));
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
List list = (List) loadedProperties.value("serializableTest", List.class);
Assertions.assertThat(list).contains("1", "2");
}
@Test
public void shouldUpdateProperty() throws Exception {
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("doubleTest", 1.2));
database.flush();
Assertions.assertThat(jpaPropertyStore.propertyEntity(instance, "doubleTest").get().getVersion()).isEqualTo(0);
jpaPropertyStore.setProperties(instance.getIdentifier(), newProperties().with("doubleTest", 1.3));
database.flush();
Assertions.assertThat(jpaPropertyStore.propertyEntity(instance, "doubleTest").get().getVersion()).isEqualTo(1);
FlowInstanceProperties loadedProperties = jpaPropertyStore.getProperties(instance.getIdentifier());
Assertions.assertThat(loadedProperties.values().size()).isEqualTo(1);
Assertions.assertThat(loadedProperties.value("doubleTest", Double.class)).isEqualTo(1.3);
}
}