def test_check_username_invalid_username(self):
        a = SAMLAuthenticator()
        a._optional_user_add = MagicMock()

        assert not a._check_username_and_add_user('bluedata/')

        a._optional_user_add.assert_not_called()
    def test_create_system_users_option(self):
        a = SAMLAuthenticator()
        a.create_system_users = False
        a._optional_user_add = MagicMock()

        assert a._check_username_and_add_user('bluedata')

        a._optional_user_add.assert_not_called()
    def test_create_existing_user(self, mock_pwd, mock_subprocess):
        mock_pwd.getpwnam.return_value = True

        a = SAMLAuthenticator()

        assert a._optional_user_add('Bluedata')

        mock_pwd.getpwnam.assert_called_once_with('Bluedata')
        mock_subprocess.call.assert_not_called()
    def test_create_user_fails(self, mock_pwd, mock_subprocess):
        mock_pwd.getpwnam.side_effect = KeyError('Bad username')
        mock_subprocess.call.return_value = 1

        a = SAMLAuthenticator()

        assert not a._optional_user_add('Bluedata')

        mock_pwd.getpwnam.assert_called_once_with('Bluedata')
        mock_subprocess.call.assert_called_once_with(['useradd', 'Bluedata'])
    def test_create_user_alternate_binary_existing_user(
            self, mock_pwd, mock_subprocess):
        mock_pwd.getpwnam.return_value = True
        binary_value = 'test_binary'

        a = SAMLAuthenticator()
        a.create_system_user_binary = binary_value

        assert a._optional_user_add('Bluedata')

        mock_pwd.getpwnam.assert_called_once_with('Bluedata')
        mock_subprocess.call.assert_not_called()
    def test_create_user_alternate_binary(self, mock_pwd, mock_subprocess):
        mock_pwd.getpwnam.side_effect = KeyError('Bad username')
        mock_subprocess.call.return_value = 0
        binary_value = 'test_binary'

        a = SAMLAuthenticator()
        a.create_system_user_binary = binary_value

        assert a._optional_user_add('Bluedata')

        mock_pwd.getpwnam.assert_called_once_with('Bluedata')
        mock_subprocess.call.assert_called_once_with(
            [binary_value, 'Bluedata'])
    def test_check_username_valid_username_no_white_lists(self):
        a = SAMLAuthenticator()
        a._optional_user_add = MagicMock()
        a._optional_user_add.return_value = True
        a.blacklist = {'bluedata'}

        assert not a._check_username_and_add_user('bluedata')

        a._optional_user_add.assert_not_called()

        a.blacklist = {'not_bluedata'}

        assert a._check_username_and_add_user('bluedata')

        a._optional_user_add.assert_called_once_with('bluedata')