예제 #1
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'
            }]),
        ])
예제 #2
0
    def test_auth_okta_duo_mfa_no_factor(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.handle_duo_factor_selection = mock.MagicMock()
        keyman.okta_client.auth.side_effect = [duo.FactorRequired('a', 'b'),
                                               True]
        keyman.okta_client.duo_auth.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()

        keyman.auth_okta()

        keyman.handle_duo_factor_selection.assert_has_calls([mock.call()])
예제 #3
0
    def test_auth_okta_duo_mfa_passcode(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = duo.PasscodeRequired('a', 'b')
        keyman.okta_client.duo_auth.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = '000000'

        keyman.auth_okta()

        keyman.okta_client.duo_auth.assert_has_calls([
            mock.call('a', 'b', '000000'),
        ])
예제 #4
0
    def test_auth_okta_duo_mfa_no_factor(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.handle_duo_factor_selection = mock.MagicMock()
        keyman.okta_client.auth.side_effect = [
            duo.FactorRequired("a", "b"),
            True,
        ]
        keyman.okta_client.duo_auth.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()

        keyman.auth_okta()

        keyman.handle_duo_factor_selection.assert_has_calls([mock.call()])
예제 #5
0
    def test_auth_okta_answer(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        factor = {'id': 'foo', 'profile': {'questionText': 'a'}}
        keyman.okta_client.auth.side_effect = okta.AnswerRequired(factor, 'b')
        keyman.okta_client.validate_answer.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = 'Someanswer'

        keyman.auth_okta()

        keyman.okta_client.validate_answer.assert_has_calls([
            mock.call('foo', 'b', 'Someanswer'),
        ])
예제 #6
0
    def test_auth_okta_mfa(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.PasscodeRequired('a', 'b',
                                                                    'c')
        keyman.okta_client.validate_mfa.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.validate_mfa.assert_has_calls([
            mock.call('a', 'b', "000000")
        ])
예제 #7
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: ')
     ])
예제 #8
0
    def test_auth_okta_duo_mfa_passcode(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = duo.PasscodeRequired("a", "b")
        keyman.okta_client.duo_auth.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.duo_auth.assert_has_calls(
            [
                mock.call("a", "b", "000000"),
            ],
        )
예제 #9
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')
     ])
예제 #10
0
    def test_auth_okta_answer(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        factor = {"id": "foo", "profile": {"questionText": "a"}}
        keyman.okta_client.auth.side_effect = okta.AnswerRequired(factor, "b")
        keyman.okta_client.validate_answer.return_value = True
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "Someanswer"

        keyman.auth_okta()

        keyman.okta_client.validate_answer.assert_has_calls(
            [
                mock.call("foo", "b", "Someanswer"),
            ],
        )
예제 #11
0
    def test_auth_okta_mfa_retry(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.PasscodeRequired(
            "a",
            "b",
            "c",
        )
        keyman.okta_client.validate_mfa.side_effect = [False, True]
        keyman.user_input = mock.MagicMock()
        keyman.user_input.return_value = "000000"

        keyman.auth_okta()

        keyman.okta_client.validate_mfa.assert_has_calls(
            [
                mock.call("a", "b", "000000"),
                mock.call("a", "b", "000000"),
            ],
        )
예제 #12
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: "),
            ],
        )
예제 #13
0
    def test_user_input(self, input_mock):
        input_mock.return_value = " test "

        self.assertEqual("test", Keyman.user_input("input test"))
예제 #14
0
    def test_user_input(self, input_mock):
        input_mock.return_value = ' test '

        self.assertEqual('test', Keyman.user_input('input test'))