Merge pull request #2729 from grodzik/add-update-organizational-unit-endpoint
Add update organizational unit endpoint
This commit is contained in:
commit
58b3304310
@ -10,3 +10,13 @@ class InvalidInputException(JsonRESTError):
|
|||||||
"InvalidInputException",
|
"InvalidInputException",
|
||||||
"You provided a value that does not match the required pattern.",
|
"You provided a value that does not match the required pattern.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DuplicateOrganizationalUnitException(JsonRESTError):
|
||||||
|
code = 400
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(DuplicateOrganizationalUnitException, self).__init__(
|
||||||
|
"DuplicateOrganizationalUnitException",
|
||||||
|
"An OU with the same name already exists.",
|
||||||
|
)
|
||||||
|
@ -8,7 +8,10 @@ from moto.core import BaseBackend, BaseModel
|
|||||||
from moto.core.exceptions import RESTError
|
from moto.core.exceptions import RESTError
|
||||||
from moto.core.utils import unix_time
|
from moto.core.utils import unix_time
|
||||||
from moto.organizations import utils
|
from moto.organizations import utils
|
||||||
from moto.organizations.exceptions import InvalidInputException
|
from moto.organizations.exceptions import (
|
||||||
|
InvalidInputException,
|
||||||
|
DuplicateOrganizationalUnitException,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class FakeOrganization(BaseModel):
|
class FakeOrganization(BaseModel):
|
||||||
@ -222,6 +225,14 @@ class OrganizationsBackend(BaseBackend):
|
|||||||
self.attach_policy(PolicyId=utils.DEFAULT_POLICY_ID, TargetId=new_ou.id)
|
self.attach_policy(PolicyId=utils.DEFAULT_POLICY_ID, TargetId=new_ou.id)
|
||||||
return new_ou.describe()
|
return new_ou.describe()
|
||||||
|
|
||||||
|
def update_organizational_unit(self, **kwargs):
|
||||||
|
for ou in self.ou:
|
||||||
|
if ou.name == kwargs["Name"]:
|
||||||
|
raise DuplicateOrganizationalUnitException
|
||||||
|
ou = self.get_organizational_unit_by_id(kwargs["OrganizationalUnitId"])
|
||||||
|
ou.name = kwargs["Name"]
|
||||||
|
return ou.describe()
|
||||||
|
|
||||||
def get_organizational_unit_by_id(self, ou_id):
|
def get_organizational_unit_by_id(self, ou_id):
|
||||||
ou = next((ou for ou in self.ou if ou.id == ou_id), None)
|
ou = next((ou for ou in self.ou if ou.id == ou_id), None)
|
||||||
if ou is None:
|
if ou is None:
|
||||||
|
@ -36,6 +36,11 @@ class OrganizationsResponse(BaseResponse):
|
|||||||
self.organizations_backend.create_organizational_unit(**self.request_params)
|
self.organizations_backend.create_organizational_unit(**self.request_params)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def update_organizational_unit(self):
|
||||||
|
return json.dumps(
|
||||||
|
self.organizations_backend.update_organizational_unit(**self.request_params)
|
||||||
|
)
|
||||||
|
|
||||||
def describe_organizational_unit(self):
|
def describe_organizational_unit(self):
|
||||||
return json.dumps(
|
return json.dumps(
|
||||||
self.organizations_backend.describe_organizational_unit(
|
self.organizations_backend.describe_organizational_unit(
|
||||||
|
@ -713,3 +713,41 @@ def test_untag_resource_errors():
|
|||||||
ex.response["Error"]["Message"].should.equal(
|
ex.response["Error"]["Message"].should.equal(
|
||||||
"You provided a value that does not match the required pattern."
|
"You provided a value that does not match the required pattern."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_organizations
|
||||||
|
def test_update_organizational_unit():
|
||||||
|
client = boto3.client("organizations", region_name="us-east-1")
|
||||||
|
org = client.create_organization(FeatureSet="ALL")["Organization"]
|
||||||
|
root_id = client.list_roots()["Roots"][0]["Id"]
|
||||||
|
ou_name = "ou01"
|
||||||
|
response = client.create_organizational_unit(ParentId=root_id, Name=ou_name)
|
||||||
|
validate_organizational_unit(org, response)
|
||||||
|
response["OrganizationalUnit"]["Name"].should.equal(ou_name)
|
||||||
|
new_ou_name = "ou02"
|
||||||
|
response = client.update_organizational_unit(
|
||||||
|
OrganizationalUnitId=response["OrganizationalUnit"]["Id"], Name=new_ou_name
|
||||||
|
)
|
||||||
|
validate_organizational_unit(org, response)
|
||||||
|
response["OrganizationalUnit"]["Name"].should.equal(new_ou_name)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_organizations
|
||||||
|
def test_update_organizational_unit_duplicate_error():
|
||||||
|
client = boto3.client("organizations", region_name="us-east-1")
|
||||||
|
org = client.create_organization(FeatureSet="ALL")["Organization"]
|
||||||
|
root_id = client.list_roots()["Roots"][0]["Id"]
|
||||||
|
ou_name = "ou01"
|
||||||
|
response = client.create_organizational_unit(ParentId=root_id, Name=ou_name)
|
||||||
|
validate_organizational_unit(org, response)
|
||||||
|
response["OrganizationalUnit"]["Name"].should.equal(ou_name)
|
||||||
|
with assert_raises(ClientError) as e:
|
||||||
|
client.update_organizational_unit(
|
||||||
|
OrganizationalUnitId=response["OrganizationalUnit"]["Id"], Name=ou_name
|
||||||
|
)
|
||||||
|
exc = e.exception
|
||||||
|
exc.operation_name.should.equal("UpdateOrganizationalUnit")
|
||||||
|
exc.response["Error"]["Code"].should.contain("DuplicateOrganizationalUnitException")
|
||||||
|
exc.response["Error"]["Message"].should.equal(
|
||||||
|
"An OU with the same name already exists."
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user