Package info.archinnov.achilles.internal.metadata.holder

Source Code of info.archinnov.achilles.internal.metadata.holder.PropertyMetaTableCreatorTest

package info.archinnov.achilles.internal.metadata.holder;

import static java.util.Arrays.asList;
import static org.fest.assertions.api.Assertions.*;
import static org.mockito.Mockito.*;

import com.datastax.driver.core.DataType;
import info.archinnov.achilles.annotations.TimeUUID;
import info.archinnov.achilles.schemabuilder.Create;
import info.archinnov.achilles.schemabuilder.Create.Options;
import info.archinnov.achilles.schemabuilder.Create.Options.ClusteringOrder;
import info.archinnov.achilles.schemabuilder.Create.Options.ClusteringOrder.Sorting;
import info.archinnov.achilles.schemabuilder.SchemaBuilder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

import java.nio.ByteBuffer;

import java.util.Arrays;

@RunWith(MockitoJUnitRunner.class)
public class PropertyMetaTableCreatorTest {

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private PropertyMeta meta;

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private EmbeddedIdProperties embeddedIdProperties;

    private PropertyMetaTableCreator view;

    @Before
    public void setUp() {
        view = new PropertyMetaTableCreator(meta);
        when(meta.getEmbeddedIdProperties()).thenReturn(embeddedIdProperties);
    }

    @Test
    public void should_add_partition_keys() throws Exception {
        //Given
        final Create create = mock(Create.class);
        PropertyMeta partitionMeta1 = mock(PropertyMeta.class, RETURNS_DEEP_STUBS);
        PropertyMeta partitionMeta2 = mock(PropertyMeta.class, RETURNS_DEEP_STUBS);
        when(embeddedIdProperties.getPartitionComponents()).thenReturn(new PartitionComponents(asList(partitionMeta1, partitionMeta2)));

        when(partitionMeta1.getCQL3ColumnName()).thenReturn("id");
        when(partitionMeta2.getCQL3ColumnName()).thenReturn("name");

        when(partitionMeta1.config().<Long>getCQL3ValueType()).thenReturn(Long.class);
        when(partitionMeta2.config().<String>getCQL3ValueType()).thenReturn(String.class);

        //When
        view.addPartitionKeys(create);

        //Then
        InOrder inOrder = Mockito.inOrder(create);

        inOrder.verify(create).addPartitionKey("id", DataType.bigint());
        inOrder.verify(create).addPartitionKey("name", DataType.text());
    }

    @Test
    public void should_add_clustering_keys() throws Exception {
        //Given
        final Create create = mock(Create.class);
        PropertyMeta clusteringMeta1 = mock(PropertyMeta.class, RETURNS_DEEP_STUBS);
        PropertyMeta clusteringMeta2 = mock(PropertyMeta.class, RETURNS_DEEP_STUBS);
        when(embeddedIdProperties.getClusteringComponents()).thenReturn(new ClusteringComponents(asList(clusteringMeta1, clusteringMeta2), Arrays.<ClusteringOrder>asList()));

        when(clusteringMeta1.getCQL3ColumnName()).thenReturn("id");
        when(clusteringMeta2.getCQL3ColumnName()).thenReturn("name");

        when(clusteringMeta1.config().<Long>getCQL3ValueType()).thenReturn(Long.class);
        when(clusteringMeta2.config().<String>getCQL3ValueType()).thenReturn(String.class);

        //When
        view.addClusteringKeys(create);

        //Then
        InOrder inOrder = Mockito.inOrder(create);

        inOrder.verify(create).addClusteringKey("id", DataType.bigint());
        inOrder.verify(create).addClusteringKey("name", DataType.text());
    }

    @Test
    public void should_create_new_index() throws Exception {
        //Given

        IndexProperties indexProperties = mock(IndexProperties.class, RETURNS_DEEP_STUBS);
        when(meta.getIndexProperties()).thenReturn(indexProperties);
        when(indexProperties.getIndexName()).thenReturn("name_index");
        when(meta.getCQL3ColumnName()).thenReturn("name");

        //When
        final String indexScript = view.createNewIndexScript("my_table");

        //Then
        assertThat(indexScript.trim()).isEqualTo("CREATE INDEX name_index ON my_table(name)");
    }

    @Test
    public void should_create_new_index_with_default_name() throws Exception {
        //Given

        IndexProperties indexProperties = mock(IndexProperties.class, RETURNS_DEEP_STUBS);
        when(meta.getIndexProperties()).thenReturn(indexProperties);
        when(indexProperties.getIndexName()).thenReturn(null);
        when(meta.getCQL3ColumnName()).thenReturn("name");

        //When
        final String indexScript = view.createNewIndexScript("my_table");

        //Then
        assertThat(indexScript.trim()).isEqualTo("CREATE INDEX my_table_name_idx ON my_table(name)");
    }

    @Test
    public void should_add_clustering_order() throws Exception {
        //Given
        ClusteringOrder clusteringOrder = new ClusteringOrder("date", Sorting.DESC);
        Create.Options tableOptions = mock(Create.Options.class);
        when(meta.structure().isClustered()).thenReturn(true);
        ArgumentCaptor<ClusteringOrder> clusteringOrdersCaptor = ArgumentCaptor.forClass(ClusteringOrder.class);

        when(embeddedIdProperties.getClusteringComponents().getClusteringOrders()).thenReturn(asList(clusteringOrder));
        when(tableOptions.clusteringOrder(clusteringOrdersCaptor.capture())).thenReturn(tableOptions);

        //When
        final Options actual = view.addClusteringOrder(tableOptions);

        //Then
        assertThat(actual).isSameAs(tableOptions);
        assertThat(clusteringOrdersCaptor.getValue()).isSameAs(clusteringOrder);
    }
}
TOP

Related Classes of info.archinnov.achilles.internal.metadata.holder.PropertyMetaTableCreatorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.