package de.widdix.awscftemplates.state;

import com.amazonaws.services.cloudformation.model.Parameter;
import de.widdix.awscftemplates.ACloudFormationTest;
import org.junit.Test;

public class TestDynamoDB extends ACloudFormationTest {

    @Test
    public void test() {
        final String stackName = "dynamodb-" + this.random8String();
        try {
            this.createStack(stackName,
                    "state/dynamodb.yaml",
                    new Parameter().withParameterKey("PartitionKeyName").withParameterValue("id")
            );
            // TODO how can we check if this stack works?
        } finally {
            this.deleteStack(stackName);
        }
    }

    @Test
    public void testEncryption() {
        final String kmsKeyStackName = "key-" + this.random8String();
        final String stackName = "dynamodb-" + this.random8String();
        try {
            this.createStack(kmsKeyStackName,"security/kms-key.yaml");
            try {
                this.createStack(stackName,
                        "state/dynamodb.yaml",
                        new Parameter().withParameterKey("ParentKmsKeyStack").withParameterValue(kmsKeyStackName),
                        new Parameter().withParameterKey("PartitionKeyName").withParameterValue("id")
                );
                // TODO how can we check if this stack works?
            } finally {
                this.deleteStack(stackName);
            }
        } finally {
            this.deleteStack(kmsKeyStackName);
        }
    }

    @Test
    public void testGSI() {
        final String stackName = "dynamodb-" + this.random8String();
        try {
            this.createStack(stackName,
                    "state/dynamodb.yaml",
                    new Parameter().withParameterKey("PartitionKeyName").withParameterValue("id"),
                    new Parameter().withParameterKey("SortKeyName").withParameterValue("timestamp"),
                    new Parameter().withParameterKey("Attribute1Name").withParameterValue("organisation"),
                    new Parameter().withParameterKey("Attribute2Name").withParameterValue("category"),
                    new Parameter().withParameterKey("Index1PartitionKeyName").withParameterValue("timestamp"),
                    new Parameter().withParameterKey("Index2PartitionKeyName").withParameterValue("organisation"),
                    new Parameter().withParameterKey("Index2SortKeyName").withParameterValue("category")
            );
            // TODO how can we check if this stack works?
        } finally {
            this.deleteStack(stackName);
        }
    }

}