File: test_credentials.py

package info (click to toggle)
orange3 3.40.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,908 kB
  • sloc: python: 162,745; ansic: 622; makefile: 322; sh: 93; cpp: 77
file content (76 lines) | stat: -rw-r--r-- 2,283 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import unittest
from unittest.mock import patch

import keyring
import keyring.errors
import keyring.backend

from Orange.widgets.credentials import CredentialManager


# minimal in-memory keyring implementation so the test is not dependent on
# the system config/services.
class Keyring(keyring.backend.KeyringBackend):
    priority = 0

    def __init__(self):
        self.__store = {}

    def set_password(self, service, username, password=None):
        self.__store[(service, username)] = password

    def get_password(self, service, username):
        return self.__store.get((service, username), None)

    def delete_password(self, service, username):
        try:
            del self.__store[service, username]
        except KeyError:
            raise keyring.errors.PasswordDeleteError()


class TestCredentialManager(unittest.TestCase):
    def setUp(self):
        self._ring = keyring.get_keyring()
        keyring.set_keyring(Keyring())
        self.cm = CredentialManager('Orange')

    def tearDown(self):
        keyring.set_keyring(self._ring)

    def test_credential_manager(self):
        cm = CredentialManager('Orange')
        cm.key = 'Foo'
        self.assertEqual(cm.key, 'Foo')
        del cm.key
        self.assertEqual(cm.key, None)

    def test_set_password(self):
        """
        Handle error when setting password fails.
        GH-2354
        """
        with patch("keyring.set_password", side_effect=Exception), \
                patch("Orange.widgets.credentials.log.exception") as log:
            self.cm.key = ""
            log.assert_called()

    def test_delete_password(self):
        """
        Handling error when deleting password fails
        GH-2354
        """
        with patch("keyring.delete_password", side_effect=Exception), \
                patch("Orange.widgets.credentials.log.exception") as log:
            del self.cm.key
            log.assert_called()

    def test_get_password(self):
        """
        Handling errors when getting password fails.
        GH-2354
        """
        with patch("keyring.get_password", side_effect=Exception), \
                patch("Orange.widgets.credentials.log.exception") as log:
            self.assertEqual(self.cm.key, None)
            log.assert_called()