def test_handle_multiple_roles_no_match_role(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = ([{ 'account': 'acct1', 'role_name': 'role1', 'roleIdx': 0 }, { 'account': 'acct1', 'role_name': 'role2', 'roleIdx': 1 }, { 'account': 'acct2', 'role_name': 'role1', 'roleIdx': 2 }]) mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = 'role3' keyman.config.role = None assert not keyman.handle_multiple_roles(mock_session) keyman.selector_menu.assert_not_called() mock_session.assert_has_calls([mock.call.available_roles()])
def test_handle_multiple_roles_single_role_match(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"]) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = [ {"account": "acct1", "role_name": "role1", "roleIdx": 0}, {"account": "acct1", "role_name": "role2", "roleIdx": 1}, {"account": "acct2", "role_name": "role1", "roleIdx": 2}, {"account": "acct2", "role_name": "role2", "roleIdx": 3}, ] mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = "acct1" keyman.config.role = "role2" assert keyman.handle_multiple_roles(mock_session) assert keyman.role == 1 keyman.selector_menu.assert_not_called() mock_session.assert_has_calls( [ mock.call.available_roles(), ], )
def test_handle_duo_factor_selection(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar']) keyman.config.accounts = [{'name': 'myAccount', 'appid': 'myID'}] keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name='selector_menu') keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() ret = keyman.handle_duo_factor_selection() keyman.selector_menu.assert_has_calls([ mock.call([{ 'name': '📲 Duo Push', 'factor': 'push' }, { 'name': '📟 OTP Passcode', 'factor': 'passcode' }, { 'name': '📞 Phone call', 'factor': 'call' }], [{ 'name': 'Duo Factor' }]) ]) self.assertEqual(ret, 'push')
def test_handle_appid_selection(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar"]) keyman.config.accounts = [ {"name": "myAccount", "appid": "myID"}, {"name": "myAccount", "appid": "myID"}, ] keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name="selector_menu") keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() keyman.handle_appid_selection() keyman.selector_menu.assert_has_calls( [ mock.call( [ {"name": "myAccount", "appid": "myID"}, {"name": "myAccount", "appid": "myID"}, ], [{"name": "Account"}], ), ], ) keyman.config.set_appid_from_account_id.assert_has_calls( [ mock.call(0), ], )
def test_handle_multiple_roles(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = ([{ 'account': 'acct1', 'role_name': 'role1', 'roleIdx': 0 }, { 'account': 'acct1', 'role_name': 'role2', 'roleIdx': 1 }]) mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = None keyman.config.role = None keyman.handle_multiple_roles(mock_session) keyman.selector_menu.assert_has_calls([ mock.call(roles, [{ 'account': 'Account' }, { 'role_name': 'Role' }]) ]) mock_session.assert_has_calls([mock.call.available_roles()])
def test_handle_appid_selection(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar']) keyman.config.accounts = [{ 'name': 'myAccount', 'appid': 'myID' }, { 'name': 'myAccount', 'appid': 'myID' }] keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name='selector_menu') keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() keyman.handle_appid_selection() keyman.selector_menu.assert_has_calls([ mock.call([{ 'name': 'myAccount', 'appid': 'myID' }, { 'name': 'myAccount', 'appid': 'myID' }], [{ 'name': 'Account' }]) ]) keyman.config.set_appid_from_account_id.assert_has_calls( [mock.call(0)])
def test_selector_menu(self, _config_mock): keyman = Keyman(['foo']) Keyman.generate_template = mock.MagicMock() Keyman.print_selector_table = mock.MagicMock() keyman.user_input = mock.MagicMock() keyman.user_input.side_effect = ['invalid', '', 0] stuff = [{'artist': 'Metallica'}, {'artist': 'Soundgarden'}] header = [{'artist': 'Artist'}] ret = keyman.selector_menu(stuff, header) self.assertEqual(ret, 0) keyman.user_input.assert_has_calls([ mock.call('Selection: '), mock.call('Selection: '), mock.call('Selection: ') ]) Keyman.generate_template.assert_has_calls([ mock.call([{ 'artist': 'Metallica' }, { 'artist': 'Soundgarden' }], [{ 'artist': 'Artist' }]), ]) Keyman.print_selector_table.assert_has_calls([ mock.call(mock.ANY, [{ 'artist': 'Artist' }], [{ 'artist': 'Metallica' }, { 'artist': 'Soundgarden' }]), ])
def test_handle_multiple_roles(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"]) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = [ {"account": "acct1", "role_name": "role1", "roleIdx": 0}, {"account": "acct1", "role_name": "role2", "roleIdx": 1}, ] mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = None keyman.config.role = None keyman.handle_multiple_roles(mock_session) keyman.selector_menu.assert_has_calls( [ mock.call( roles, [{"account": "Account"}, {"role_name": "Role"}], ), ], ) mock_session.assert_has_calls( [ mock.call.available_roles(), ], )
def test_handle_appid_selection_no_appid(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar"]) keyman.config.accounts = None keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name="selector_menu") keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() ret = keyman.handle_appid_selection() self.assertEqual(ret, None)
def test_handle_appid_selection_no_appid(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar']) keyman.config.accounts = None keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name='selector_menu') keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() ret = keyman.handle_appid_selection() self.assertEqual(ret, None)
def test_handle_appid_selection_from_okta_no_aws(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar"]) keyman.config.accounts = None keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name="selector_menu") keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() keyman.okta_client = mock.MagicMock() keyman.okta_client.get_aws_apps.return_value = [] with self.assertRaises(NoAWSAccounts): keyman.handle_appid_selection(okta_ready=True)
def test_selector_menu_keep_asking_if_out_of_range(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) stdout_mock = mock.Mock() sys.stdout = stdout_mock keyman.user_input = mock.MagicMock() keyman.user_input.side_effect = [99, 98, 0] stuff = [{'artist': 'Metallica'}, {'artist': 'Soundgarden'}] ret = keyman.selector_menu(stuff, 'artist', 'Artist') self.assertEqual(ret, 0) keyman.user_input.assert_has_calls([ mock.call('Artist selection: '), mock.call('Artist selection: '), mock.call('Artist selection: ') ])
def test_handle_appid_selection_from_okta(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar"]) keyman.config.accounts = None keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name="selector_menu") keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() keyman.okta_client = mock.MagicMock() keyman.okta_client.get_aws_apps.return_value = [ {"name": "myAccount", "appid": "myID"}, ] keyman.handle_appid_selection(okta_ready=True) assert keyman.okta_client.get_aws_apps.called
def test_handle_appid_selection_from_okta(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar']) keyman.config.accounts = None keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name='selector_menu') keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() keyman.okta_client = mock.MagicMock() keyman.okta_client.get_aws_apps.return_value = [ {'name': 'myAccount', 'appid': 'myID'} ] keyman.handle_appid_selection(okta_ready=True) assert keyman.okta_client.get_aws_apps.called
def test_selector_menu(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) stdout_mock = mock.Mock() sys.stdout = stdout_mock keyman.user_input = mock.MagicMock() keyman.user_input.return_value = 0 stuff = [{'artist': 'Metallica'}, {'artist': 'Soundgarden'}] ret = keyman.selector_menu(stuff, 'artist', 'Artist') self.assertEqual(ret, 0) stdout_mock.assert_has_calls([ mock.call.write('[0] Artist: Metallica'), mock.call.write('\n'), mock.call.write('[1] Artist: Soundgarden'), mock.call.write('\n') ])
def test_handle_multiple_roles_rollname_match(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = ([{ 'account': 'acct1', 'role_name': 'role1', 'roleIdx': 0 }, { 'account': 'acct1', 'role_name': 'role2', 'roleIdx': 1 }, { 'account': 'acct2', 'role_name': 'role1', 'roleIdx': 2 }, { 'account': 'acct2', 'role_name': 'role2', 'roleIdx': 3 }]) mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = None keyman.config.role = 'role2' assert keyman.handle_multiple_roles(mock_session) # item 0 "selected" from menu translates to role #1 assert keyman.role == 1 keyman.selector_menu.assert_has_calls([ mock.call(([{ 'account': 'acct1', 'role_name': 'role2', 'roleIdx': 1 }, { 'account': 'acct2', 'role_name': 'role2', 'roleIdx': 3 }]), [{ 'account': 'Account' }, { 'role_name': 'Role' }]) ]) mock_session.assert_has_calls([mock.call.available_roles()])
def test_handle_multiple_roles(self, _config_mock): keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz']) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = [{}, {}] mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles ret = keyman.handle_multiple_roles(mock_session) self.assertEqual(ret, 0) keyman.selector_menu.assert_has_calls( [mock.call([{}, {}], 'role', 'Role')]) mock_session.assert_has_calls([ mock.call.available_roles(), mock.call.set_role(mock.ANY), mock.call.assume_role() ])
def test_handle_multiple_roles_rollname_match(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"]) keyman.selector_menu = mock.MagicMock() keyman.selector_menu.return_value = 0 roles = [ {"account": "acct1", "role_name": "role1", "roleIdx": 0}, {"account": "acct1", "role_name": "role2", "roleIdx": 1}, {"account": "acct2", "role_name": "role1", "roleIdx": 2}, {"account": "acct2", "role_name": "role2", "roleIdx": 3}, ] mock_session = mock.MagicMock() mock_session.available_roles.return_value = roles keyman.config.account = None keyman.config.role = "role2" assert keyman.handle_multiple_roles(mock_session) # item 0 "selected" from menu translates to role #1 assert keyman.role == 1 keyman.selector_menu.assert_has_calls( [ mock.call( ( [ {"account": "acct1", "role_name": "role2", "roleIdx": 1}, {"account": "acct2", "role_name": "role2", "roleIdx": 3}, ] ), [{"account": "Account"}, {"role_name": "Role"}], ), ], ) mock_session.assert_has_calls( [ mock.call.available_roles(), ], )
def test_selector_menu_keep_asking_if_invalid(self, _config_mock): keyman = Keyman(["foo"]) Keyman.generate_template = mock.MagicMock() Keyman.print_selector_table = mock.MagicMock() keyman.user_input = mock.MagicMock() keyman.user_input.side_effect = ["invalid", "", 0] stuff = [ {"artist": "Metallica"}, {"artist": "Soundgarden"}, ] header = [{"artist": "Artist"}] ret = keyman.selector_menu(stuff, header) self.assertEqual(ret, 0) keyman.user_input.assert_has_calls( [ mock.call("Selection: "), mock.call("Selection: "), mock.call("Selection: "), ], )
def test_handle_duo_factor_selection(self, _config_mock): keyman = Keyman(["foo", "-o", "foo", "-u", "bar"]) keyman.config.accounts = [{"name": "myAccount", "appid": "myID"}] keyman.config.appid = None keyman.selector_menu = mock.MagicMock(name="selector_menu") keyman.selector_menu.return_value = 0 keyman.config.set_appid_from_account_id = mock.MagicMock() ret = keyman.handle_duo_factor_selection() keyman.selector_menu.assert_has_calls( [ mock.call( [ {"name": "📲 Duo Push", "factor": "push"}, {"name": "📟 OTP Passcode", "factor": "passcode"}, {"name": "📞 Phone call", "factor": "call"}, ], [{"name": "Duo Factor"}], ), ], ) self.assertEqual(ret, "push")