Exemplo n.º 1
0
    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()])
Exemplo n.º 2
0
    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(),
            ],
        )
Exemplo n.º 3
0
    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')
Exemplo n.º 4
0
    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),
            ],
        )
Exemplo n.º 5
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()])
Exemplo n.º 6
0
    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)])
Exemplo n.º 7
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'
            }]),
        ])
Exemplo n.º 8
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(),
            ],
        )
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
 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: ')
     ])
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
 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')
     ])
Exemplo n.º 16
0
    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()])
Exemplo n.º 17
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 = [{}, {}]
        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()
        ])
Exemplo n.º 18
0
    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(),
            ],
        )
Exemplo n.º 19
0
    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: "),
            ],
        )
Exemplo n.º 20
0
    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")