s3-credentials/tests/test_s3_credentials.py

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')",
]