| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | import datetime | 
					
						
							| 
									
										
										
										
											2022-08-13 09:49:43 +00:00
										 |  |  | from moto.core import DEFAULT_ACCOUNT_ID | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | from moto.organizations import utils | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_make_random_org_id(): | 
					
						
							|  |  |  |     org_id = utils.make_random_org_id() | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     org_id.should.match(utils.ORG_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_make_random_root_id(): | 
					
						
							|  |  |  |     root_id = utils.make_random_root_id() | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     root_id.should.match(utils.ROOT_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_make_random_ou_id(): | 
					
						
							|  |  |  |     root_id = utils.make_random_root_id() | 
					
						
							|  |  |  |     ou_id = utils.make_random_ou_id(root_id) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     ou_id.should.match(utils.OU_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_make_random_account_id(): | 
					
						
							|  |  |  |     account_id = utils.make_random_account_id() | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     account_id.should.match(utils.ACCOUNT_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_make_random_create_account_status_id(): | 
					
						
							|  |  |  |     create_account_status_id = utils.make_random_create_account_status_id() | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     create_account_status_id.should.match(utils.CREATE_ACCOUNT_STATUS_ID_REGEX) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-02 11:56:19 +02:00
										 |  |  | def test_make_random_policy_id(): | 
					
						
							|  |  |  |     policy_id = utils.make_random_policy_id() | 
					
						
							|  |  |  |     policy_id.should.match(utils.POLICY_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_organization(response): | 
					
						
							|  |  |  |     org = response["Organization"] | 
					
						
							|  |  |  |     sorted(org.keys()).should.equal( | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             "Arn", | 
					
						
							|  |  |  |             "AvailablePolicyTypes", | 
					
						
							|  |  |  |             "FeatureSet", | 
					
						
							|  |  |  |             "Id", | 
					
						
							|  |  |  |             "MasterAccountArn", | 
					
						
							|  |  |  |             "MasterAccountEmail", | 
					
						
							|  |  |  |             "MasterAccountId", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     org["Id"].should.match(utils.ORG_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2022-08-13 09:49:43 +00:00
										 |  |  |     org["MasterAccountId"].should.equal(DEFAULT_ACCOUNT_ID) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     org["MasterAccountArn"].should.equal( | 
					
						
							|  |  |  |         utils.MASTER_ACCOUNT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"]) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     org["Arn"].should.equal( | 
					
						
							|  |  |  |         utils.ORGANIZATION_ARN_FORMAT.format(org["MasterAccountId"], org["Id"]) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     org["MasterAccountEmail"].should.equal(utils.MASTER_ACCOUNT_EMAIL) | 
					
						
							|  |  |  |     org["FeatureSet"].should.be.within(["ALL", "CONSOLIDATED_BILLING"]) | 
					
						
							|  |  |  |     org["AvailablePolicyTypes"].should.equal( | 
					
						
							|  |  |  |         [{"Type": "SERVICE_CONTROL_POLICY", "Status": "ENABLED"}] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_roots(org, response): | 
					
						
							|  |  |  |     response.should.have.key("Roots").should.be.a(list) | 
					
						
							| 
									
										
										
										
											2022-04-18 20:44:56 +00:00
										 |  |  |     response["Roots"].shouldnt.equal([]) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     root = response["Roots"][0] | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     root.should.have.key("Id").should.match(utils.ROOT_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     root.should.have.key("Arn").should.equal( | 
					
						
							|  |  |  |         utils.ROOT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], root["Id"]) | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     root.should.have.key("Name").should.be.a(str) | 
					
						
							| 
									
										
										
										
											2022-02-19 23:45:36 -01:00
										 |  |  |     root.should.have.key("PolicyTypes").should.equal([]) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_organizational_unit(org, response): | 
					
						
							|  |  |  |     response.should.have.key("OrganizationalUnit").should.be.a(dict) | 
					
						
							|  |  |  |     ou = response["OrganizationalUnit"] | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     ou.should.have.key("Id").should.match(utils.OU_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     ou.should.have.key("Arn").should.equal( | 
					
						
							|  |  |  |         utils.OU_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], ou["Id"]) | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     ou.should.have.key("Name").should.be.a(str) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_account(org, account): | 
					
						
							|  |  |  |     sorted(account.keys()).should.equal( | 
					
						
							|  |  |  |         ["Arn", "Email", "Id", "JoinedMethod", "JoinedTimestamp", "Name", "Status"] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     account["Id"].should.match(utils.ACCOUNT_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     account["Arn"].should.equal( | 
					
						
							|  |  |  |         utils.ACCOUNT_ARN_FORMAT.format( | 
					
						
							|  |  |  |             org["MasterAccountId"], org["Id"], account["Id"] | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     account["Email"].should.match(utils.EMAIL_REGEX) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     account["JoinedMethod"].should.be.within(["INVITED", "CREATED"]) | 
					
						
							|  |  |  |     account["Status"].should.be.within(["ACTIVE", "SUSPENDED"]) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     account["Name"].should.be.a(str) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     account["JoinedTimestamp"].should.be.a(datetime.datetime) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_create_account_status(create_status): | 
					
						
							|  |  |  |     sorted(create_status.keys()).should.equal( | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             "AccountId", | 
					
						
							|  |  |  |             "AccountName", | 
					
						
							|  |  |  |             "CompletedTimestamp", | 
					
						
							|  |  |  |             "Id", | 
					
						
							|  |  |  |             "RequestedTimestamp", | 
					
						
							|  |  |  |             "State", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     create_status["Id"].should.match(utils.CREATE_ACCOUNT_STATUS_ID_REGEX) | 
					
						
							|  |  |  |     create_status["AccountId"].should.match(utils.ACCOUNT_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     create_status["AccountName"].should.be.a(str) | 
					
						
							| 
									
										
										
										
											2018-07-19 11:50:24 -07:00
										 |  |  |     create_status["State"].should.equal("SUCCEEDED") | 
					
						
							|  |  |  |     create_status["RequestedTimestamp"].should.be.a(datetime.datetime) | 
					
						
							|  |  |  |     create_status["CompletedTimestamp"].should.be.a(datetime.datetime) | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | def validate_policy_summary(org, summary): | 
					
						
							|  |  |  |     summary.should.be.a(dict) | 
					
						
							| 
									
										
										
										
											2020-08-02 11:56:19 +02:00
										 |  |  |     summary.should.have.key("Id").should.match(utils.POLICY_ID_REGEX) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     summary.should.have.key("Arn").should.equal( | 
					
						
							|  |  |  |         utils.SCP_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], summary["Id"]) | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     summary.should.have.key("Name").should.be.a(str) | 
					
						
							|  |  |  |     summary.should.have.key("Description").should.be.a(str) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     summary.should.have.key("Type").should.equal("SERVICE_CONTROL_POLICY") | 
					
						
							|  |  |  |     summary.should.have.key("AwsManaged").should.be.a(bool) | 
					
						
							| 
									
										
										
										
											2019-10-31 08:44:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | def validate_service_control_policy(org, response): | 
					
						
							|  |  |  |     response.should.have.key("PolicySummary").should.be.a(dict) | 
					
						
							| 
									
										
										
										
											2021-07-26 07:40:39 +01:00
										 |  |  |     response.should.have.key("Content").should.be.a(str) | 
					
						
							| 
									
										
										
										
											2019-05-25 02:20:19 -07:00
										 |  |  |     validate_policy_summary(org, response["PolicySummary"]) |