<?php
/**
 * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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.
 */

namespace Aws\Silex;

use Silex\Application;

/**
 * AwsServiceProvider test cases
 */
class AwsServiceProviderTest extends \PHPUnit_Framework_TestCase
{
    public function testRegisterAwsServiceProvider()
    {
        // Setup the Silex app and AWS service provider
        $app = new Application();
        $provider = new AwsServiceProvider();
        $app->register($provider, array(
            'aws.config' => array(
                'version' => '2006-03-01',
                'region' => 'us-east-1',
                'credentials' => [
                    'key' => 'fake-aws-key',
                    'secret' => 'fake-aws-secret',
                ],
            )
        ));

        // Get an instance of a client (S3) to use for testing
        $s3 = $app['aws']->createS3();

        // Verify that the app and clients created by the SDK receive the provided credentials
        $this->assertEquals('2006-03-01', $app['aws.config']['version']);
        $this->assertEquals('us-east-1', $app['aws.config']['region']);
        $this->assertEquals('2006-03-01', $s3->getApi()->getApiVersion());
        $this->assertEquals('us-east-1', $s3->getRegion());
    }

    /**
     * @expectedException \InvalidArgumentException
     */
    public function testNoConfigProvided()
    {
        // Setup the Silex app and AWS service provider
        $app = new Application();
        $provider = new AwsServiceProvider();
        $app->register($provider, array(
            'aws.config' => array(
                'credentials' => [
                    'key' => 'fake-aws-key',
                    'secret' => 'fake-aws-secret',
                ],
            )
        ));

        // Instantiate a client, which should trigger an exception for missing configs
        $s3 = $app['aws']->createS3();
    }
}