from __future__ import unicode_literals
import boto3
import sure  # noqa
import re

from moto import mock_opsworks


@mock_opsworks
def test_create_stack_response():
    client = boto3.client('opsworks', region_name='us-east-1')
    response = client.create_stack(
        Name="test_stack_1",
        Region="us-east-1",
        ServiceRoleArn="service_arn",
        DefaultInstanceProfileArn="profile_arn"
    )
    response.should.contain("StackId")


@mock_opsworks
def test_describe_stacks():
    client = boto3.client('opsworks', region_name='us-east-1')
    for i in range(1, 4):
        client.create_stack(
            Name="test_stack_{0}".format(i),
            Region="us-east-1",
            ServiceRoleArn="service_arn",
            DefaultInstanceProfileArn="profile_arn"
        )

    response = client.describe_stacks()
    response['Stacks'].should.have.length_of(3)
    for stack in response['Stacks']:
        stack['ServiceRoleArn'].should.equal("service_arn")
        stack['DefaultInstanceProfileArn'].should.equal("profile_arn")

    _id = response['Stacks'][0]['StackId']
    response = client.describe_stacks(StackIds=[_id])
    response['Stacks'].should.have.length_of(1)
    response['Stacks'][0]['Arn'].should.contain(_id)

    # ClientError/ResourceNotFoundException
    client.describe_stacks.when.called_with(StackIds=["foo"]).should.throw(
        Exception, re.compile(r'foo')
    )
