Skip to content

Commit

Permalink
Extract a list of contributors for inclusion in success email
Browse files Browse the repository at this point in the history
  • Loading branch information
BenGalewsky committed Jan 29, 2024
1 parent 5410d0c commit 2959ee9
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 70 deletions.
1 change: 1 addition & 0 deletions aws/automate_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ def submit(self, mdf_rec, organization,
test_submit=is_test
),
"search_index": search_index_uuid,
"creators_list": ", ".join([creator['creatorName'] for creator in mdf_rec["dc"]["creators"]]),
# @Ben group_by_dir This will be an XTract flow option
"group_by_dir": True,
"dataset_mdata": mdf_rec,
Expand Down
180 changes: 110 additions & 70 deletions aws/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,127 +11,167 @@

fake_uuid = "abcdefgh-1234-4321-zyxw-hgfedcba"


@pytest.fixture
@mock.patch('mdf_connect_client.mdfcc.mdf_toolbox.login')
@mock.patch("mdf_connect_client.mdfcc.mdf_toolbox.login")
def mdf(_):
mdf = MDFConnectClient()
mdf.create_dc_block(title="How to make a dataset", authors=['Bob Dobolina'])
mdf.add_data_source("https://app.globus.org/file-manager?destination_id=e38ee745-6d04-11e5-ba46-22000b92c6ec&destination_path=%2FMDF%2Fmdf_connect%2Ftest_files%2Fcanonical_datasets%2Fdft%2F")
mdf.create_dc_block(title="How to make a dataset", authors=["Bob Dobolina"])
mdf.add_data_source(
"https://app.globus.org/file-manager?destination_id=e38ee745-6d04-11e5-ba46-22000b92c6ec&destination_path=%2FMDF%2Fmdf_connect%2Ftest_files%2Fcanonical_datasets%2Fdft%2F"
)
return mdf


@pytest.fixture
def mdf_rec():
return {
"mdf": {
"source_id": "123-456-7890",
"version": "1.0.1"
}
"dc": {
"titles": [{"title": "How to make a dataset"}],
"creators": [
{
"creatorName": "Bob Dobolina",
"familyName": "Dobolina",
"givenName": "Bob",
"affiliations": [
"University of Illinois",
"National Center for Supercomputing Applications",
],
},
{
"creatorName": "Dobo Bobolina",
"familyName": "Bobolina",
"givenName": "Dobbo",
"affiliations": [
"University of Illinois",
"National Center for Supercomputing Applications",
],
},
],
},
"mdf": {"source_id": "123-456-7890", "version": "1.0.1"},
}


@given("I'm authenticated with MDF", target_fixture='mdf_environment')
@given("I'm authenticated with MDF", target_fixture="mdf_environment")
def authenticated_with_globus(mocker):
dynamo_manager = mocker.Mock()
dynamo_manager.create_status = mocker.Mock(return_value={
'success': True
})
dynamo_manager.create_status = mocker.Mock(return_value={"success": True})

automate_manager = mocker.Mock()
automate_manager.submit = mocker.Mock(return_value='action-id-1')
automate_manager.submit = mocker.Mock(return_value="action-id-1")

os.environ['MANAGE_FLOWS_SCOPE'] = 'https://manage.flows.scope.123'
os.environ['TEST_DATA_DESTINATION'] = "globus://test_data"
os.environ['TEST_SEARCH_INDEX_UUID'] = "https://test-search.index"
os.environ['FLOW_ID'] = 'flow-id-1'
os.environ['FLOW_SCOPE'] = 'flow-scope-1'
os.environ['MDF_SECRETS_NAME'] = 'mdf-secrets'
os.environ['MDF_AWS_REGION'] = 'us-east-1'
os.environ['REQUIRED_GROUP_MEMBERSHIP'] = '123-45-6789-123'
os.environ["MANAGE_FLOWS_SCOPE"] = "https://manage.flows.scope.123"
os.environ["TEST_DATA_DESTINATION"] = "globus://test_data"
os.environ["TEST_SEARCH_INDEX_UUID"] = "https://test-search.index"
os.environ["FLOW_ID"] = "flow-id-1"
os.environ["FLOW_SCOPE"] = "flow-scope-1"
os.environ["MDF_SECRETS_NAME"] = "mdf-secrets"
os.environ["MDF_AWS_REGION"] = "us-east-1"
os.environ["REQUIRED_GROUP_MEMBERSHIP"] = "123-45-6789-123"

environment = {
'dynamo_manager': dynamo_manager,
'automate_manager': automate_manager,
'authorizer': {
'identities': "['me']",
'user_id': 'my-id',
'principalId': '[email protected]',
'name': 'Bob Dobolina',
'globus_dependent_token': "{'0c7ee169-cefc-4a23-81e1-dc323307c863': '12sdfkj23-8j'}",
'user_email': '[email protected]',
'group_info': "{'123-45-6789-123': {'name': 'my-group', 'description': 'my-group-description'}}"
}
"dynamo_manager": dynamo_manager,
"automate_manager": automate_manager,
"authorizer": {
"identities": "['me']",
"user_id": "my-id",
"principalId": "[email protected]",
"name": "Bob Dobolina",
"globus_dependent_token": "{'0c7ee169-cefc-4a23-81e1-dc323307c863': '12sdfkj23-8j'}",
"user_email": "[email protected]",
"group_info": "{'123-45-6789-123': {'name': 'my-group', 'description': 'my-group-description'}}",
},
}
return environment

@given('I have a new MDF dataset to submit', target_fixture='mdf_submission')

@given("I have a new MDF dataset to submit", target_fixture="mdf_submission")
def mdf_datset(mdf, mdf_environment, mocker):
mdf.update = False

# No existing record
mdf_environment['dynamo_manager'].get_current_version = mocker.Mock(return_value=None)
mdf_environment["dynamo_manager"].get_current_version = mocker.Mock(
return_value=None
)

# No provided source_id so use a uuid
mdf_environment['source_id'] = fake_uuid
mdf_environment["source_id"] = fake_uuid

return mdf.get_submission()

@when('I submit the dataset', target_fixture='submit_result')

@when("I submit the dataset", target_fixture="submit_result")
def submit_dataset(mdf_environment, mdf_submission, mocker):
dynamo_manager_class = mocker.Mock(return_value=mdf_environment['dynamo_manager'])
if mdf_submission['update']:
dynamo_manager_class.increment_record_version = mocker.Mock(return_value='1.1')
dynamo_manager_class = mocker.Mock(return_value=mdf_environment["dynamo_manager"])
if mdf_submission["update"]:
dynamo_manager_class.increment_record_version = mocker.Mock(return_value="1.1")
else:
dynamo_manager_class.increment_record_version = mocker.Mock(return_value='1.0')
dynamo_manager_class.increment_record_version = mocker.Mock(return_value="1.0")

os.environ['RUN_AS_SCOPE'] = '0c7ee169-cefc-4a23-81e1-dc323307c863'
os.environ['MONITOR_BY_GROUP'] = 'urn:groups:my-group'
os.environ['SEARCH_INDEX_UUID'] = '098-765-4321'
os.environ["RUN_AS_SCOPE"] = "0c7ee169-cefc-4a23-81e1-dc323307c863"
os.environ["MONITOR_BY_GROUP"] = "urn:groups:my-group"
os.environ["SEARCH_INDEX_UUID"] = "098-765-4321"
print(64)
print(mdf_environment)
automate_manager_class = mocker.Mock(return_value=mdf_environment['automate_manager'])
mocker.patch('aws.submit.get_secret')
mock_uuid = mocker.patch('aws.submit.uuid.uuid4')
automate_manager_class = mocker.Mock(
return_value=mdf_environment["automate_manager"]
)
mocker.patch("aws.submit.get_secret")
mock_uuid = mocker.patch("aws.submit.uuid.uuid4")
mock_uuid.return_value = fake_uuid

with patch('aws.submit.DynamoManager', new=dynamo_manager_class), \
patch('aws.submit.AutomateManager', new=automate_manager_class):
return lambda_handler({
'requestContext': {'authorizer': mdf_environment['authorizer']},
'headers': {'authorization': 'Bearer 1209hkehjwerkhjre'},
'body': json.dumps(mdf_submission)
}, None)


@then('a dynamo record should be created with the provided source_id', target_fixture="dynamo_record")
@then('a dynamo record should be created with the original source_id', target_fixture="dynamo_record")
@then('a dynamo record should be created with the generated uuid', target_fixture="dynamo_record")
@then('a dynamo record should be created', target_fixture="dynamo_record")
with patch("aws.submit.DynamoManager", new=dynamo_manager_class), patch(
"aws.submit.AutomateManager", new=automate_manager_class
):
return lambda_handler(
{
"requestContext": {"authorizer": mdf_environment["authorizer"]},
"headers": {"authorization": "Bearer 1209hkehjwerkhjre"},
"body": json.dumps(mdf_submission),
},
None,
)


@then(
"a dynamo record should be created with the provided source_id",
target_fixture="dynamo_record",
)
@then(
"a dynamo record should be created with the original source_id",
target_fixture="dynamo_record",
)
@then(
"a dynamo record should be created with the generated uuid",
target_fixture="dynamo_record",
)
@then("a dynamo record should be created", target_fixture="dynamo_record")
def check_dynamo_record(mdf_environment):
dynamo_manager = mdf_environment['dynamo_manager']
dynamo_manager = mdf_environment["dynamo_manager"]
print(86, dynamo_manager)
dynamo_manager.create_status.assert_called()
dynamo_record = dynamo_manager.create_status.call_args[0][0]
print(dynamo_record)
assert dynamo_record['source_id'] == mdf_environment['source_id']
assert dynamo_record['action_id'] == 'action-id-1'
assert dynamo_record["source_id"] == mdf_environment["source_id"]
assert dynamo_record["action_id"] == "action-id-1"
return dynamo_record


@then('an automate flow started', target_fixture="automate_record")
@then("an automate flow started", target_fixture="automate_record")
def check_automate_submission(mdf_environment):
automate_manager = mdf_environment['automate_manager']
automate_manager = mdf_environment["automate_manager"]
automate_manager.submit.assert_called()
automate_record = automate_manager.submit.call_args[1]
assert automate_record['submitting_user_id'] == 'my-id'
assert automate_record['submitting_user_token'] == '12sdfkj23-8j'
assert not automate_record['update_metadata_only']
assert automate_record["submitting_user_id"] == "my-id"
assert automate_record["submitting_user_token"] == "12sdfkj23-8j"
assert not automate_record["update_metadata_only"]
return automate_record


@then('I should receive a success result')
@then("I should receive a success result")
def no_error(submit_result):
print("---------->", submit_result)
assert submit_result['statusCode'] == 202
body = json.loads(submit_result['body'])
assert body['success']
assert submit_result["statusCode"] == 202
body = json.loads(submit_result["body"])
assert body["success"]

0 comments on commit 2959ee9

Please sign in to comment.