kopia lustrzana https://github.com/simonw/s3-credentials
68 wiersze
2.8 KiB
Python
68 wiersze
2.8 KiB
Python
from click.testing import CliRunner
|
|
from s3_credentials.cli import cli
|
|
import json
|
|
import pytest
|
|
from unittest.mock import Mock
|
|
|
|
|
|
def test_whoami(mocker):
|
|
boto3 = mocker.patch("boto3.client")
|
|
boto3().get_user.return_value = {"User": {"username": "name"}}
|
|
runner = CliRunner()
|
|
with runner.isolated_filesystem():
|
|
result = runner.invoke(cli, ["whoami"])
|
|
assert result.exit_code == 0
|
|
assert json.loads(result.output) == {"username": "name"}
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"option,expected",
|
|
(
|
|
("", '{\n "name": "one"\n}\n{\n "name": "two"\n}\n'),
|
|
(
|
|
"--array",
|
|
'[\n {\n "name": "one"\n },\n'
|
|
' {\n "name": "two"\n }\n]\n',
|
|
),
|
|
("--nl", '{"name": "one"}\n{"name": "two"}\n'),
|
|
),
|
|
)
|
|
def test_list_users(mocker, option, expected):
|
|
boto3 = mocker.patch("boto3.client")
|
|
boto3().get_paginator().paginate.return_value = [
|
|
{"Users": [{"name": "one"}, {"name": "two"}]}
|
|
]
|
|
runner = CliRunner()
|
|
with runner.isolated_filesystem():
|
|
result = runner.invoke(cli, ["list-users"] + ([option] if option else []))
|
|
assert result.exit_code == 0
|
|
assert result.output == expected
|
|
|
|
|
|
def test_create(mocker):
|
|
boto3 = mocker.patch("boto3.client")
|
|
boto3.return_value = Mock()
|
|
boto3.return_value.create_access_key.return_value = {
|
|
"AccessKey": {
|
|
"AccessKeyId": "access",
|
|
"SecretAccessKey": "secret",
|
|
}
|
|
}
|
|
runner = CliRunner()
|
|
with runner.isolated_filesystem():
|
|
result = runner.invoke(cli, ["create", "pytest-bucket-simonw-1", "-c"])
|
|
assert result.exit_code == 0
|
|
assert result.output == (
|
|
"Attached policy s3.read-write.pytest-bucket-simonw-1 to user s3.read-write.pytest-bucket-simonw-1\n"
|
|
"Created access key for user: s3.read-write.pytest-bucket-simonw-1\n"
|
|
'{\n "AccessKeyId": "access",\n "SecretAccessKey": "secret"\n}\n'
|
|
)
|
|
assert [str(c) for c in boto3.mock_calls] == [
|
|
"call('s3')",
|
|
"call('iam')",
|
|
"call().head_bucket(Bucket='pytest-bucket-simonw-1')",
|
|
"call().get_user(UserName='s3.read-write.pytest-bucket-simonw-1')",
|
|
'call().put_user_policy(PolicyDocument=\'{"Version": "2012-10-17", "Statement": [{"Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::pytest-bucket-simonw-1"]}, {"Sid": "AllObjectActions", "Effect": "Allow", "Action": "s3:*Object", "Resource": ["arn:aws:s3:::pytest-bucket-simonw-1/*"]}]}\', PolicyName=\'s3.read-write.pytest-bucket-simonw-1\', UserName=\'s3.read-write.pytest-bucket-simonw-1\')',
|
|
"call().create_access_key(UserName='s3.read-write.pytest-bucket-simonw-1')",
|
|
]
|