3
from charm import RBOAuthCharm
6
class TestCharm(RBOAuthCharm):
8
MSG = 'updating settings for the ReviewBoard reviewboard-oauth extension'
11
self.name = self.EXT_TYPE.NAME
12
self.creds = "" # the default
21
def assertResult(self, test, settings=None, logs=None, calls=None):
26
elif isinstance(logs, str):
27
logs = [self.MSG, logs]
29
logs.insert(0, self.MSG)
32
elif isinstance(calls, str):
35
test.assertEqual(self.settings, settings)
36
test.assertEqual(self.calls, calls)
37
test.assertEqual(self.logs, logs)
42
return {'provider-credentials': self.creds}
47
def cmd(self, cmd, *args):
50
call += ' ' + ' '.join(args)
51
self.calls.append(call)
55
def set(self, **kwargs):
56
self.settings.append(kwargs)
59
class CharmTests(unittest.TestCase):
62
super(CharmTests, self).setUp()
63
self.charm = TestCharm()
65
def assertResult(self, **kwargs):
66
self.charm.assertResult(self, **kwargs)
68
def test_handle_config_no_credentials(self):
69
self.charm.handle_config()
73
def test_handle_config_single_credentials(self):
74
self.charm.creds = 'github:spam:eggs'
75
self.charm.handle_config()
77
self.assertResult(settings=[{'GITHUB_APP_ID': 'spam',
78
'GITHUB_APP_SECRET': 'eggs',
81
logs="found OAuth credentials for 'github'",
84
def test_handle_config_multiple_credentials(self):
85
self.charm.creds = 'github:spam:eggs foo:bar:baz'
86
providers = self.charm.PROVIDERS.copy()
87
providers['foo'] = ('FOO_USER', 'FOO_KEY')
89
orig = self.charm.PROVIDERS
90
self.charm.PROVIDERS = providers
92
self.charm.handle_config()
94
self.charm.PROVIDERS = orig
96
self.assertResult(settings=[{'GITHUB_APP_ID': 'spam',
97
'GITHUB_APP_SECRET': 'eggs',
102
logs=["found OAuth credentials for 'github'",
103
"found OAuth credentials for 'foo'",
107
def test_handle_config_bad_provider(self):
108
self.charm.creds = 'bogus:spam:eggs'
109
with self.assertRaises(RuntimeError):
110
self.charm.handle_config()
112
def test_handle_config_bad_credentials(self):
113
self.charm.creds = 'github:spam:eggs:ham'
114
with self.assertRaises(RuntimeError):
115
self.charm.handle_config()