Skip to content

Commit

Permalink
Test for class inheritance instead of class name (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobtomlinson committed Aug 19, 2016
1 parent 203f0a1 commit 1f650f2
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
14 changes: 10 additions & 4 deletions opsdroid/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from multiprocessing import Process
from opsdroid.helper import match
from opsdroid.memory import Memory
from opsdroid.connector import Connector
from opsdroid.database import Database


class OpsDroid():
Expand Down Expand Up @@ -54,15 +56,18 @@ def start_connectors(self, connectors):
self.critical("All connectors failed to load", 1)
elif len(connectors) == 1:
for name, cls in connectors[0]["module"].__dict__.items():
if isinstance(cls, type) and "Connector" in name:
if isinstance(cls, type) and \
isinstance(cls({}), Connector):
logging.debug("Adding connector: " + name)
connectors[0]["config"]["bot-name"] = self.bot_name
connector = cls(connectors[0]["config"])
self.connectors.append(connector)
connector.connect(self)
else:
for connector_module in connectors:
for name, cls in connector_module["module"].__dict__.items():
if isinstance(cls, type) and "Connector" in name:
if isinstance(cls, type) and \
isinstance(cls({}), Connector):
connector_module["config"]["bot-name"] = self.bot_name
connector = cls(connector_module["config"])
self.connectors.append(connector)
Expand All @@ -78,11 +83,12 @@ def start_databases(self, databases):
logging.warning("All databases failed to load")
for database_module in databases:
for name, cls in database_module["module"].__dict__.items():
if isinstance(cls, type) and "Database" in name:
if isinstance(cls, type) and \
isinstance(cls({}), Database):
logging.debug("Adding database: " + name)
database = cls(database_module["config"])
self.memory.databases.append(database)
database.connect()
database.connect(self)

def load_regex_skill(self, regex, skill):
"""Load skills."""
Expand Down
4 changes: 3 additions & 1 deletion tests/mockmodules/connectors/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import unittest.mock as mock

from opsdroid.connector import Connector

class ConnectorTest:

class ConnectorTest(Connector):
"""The mocked connector class."""

def __init__(self, config):
Expand Down
4 changes: 3 additions & 1 deletion tests/mockmodules/databases/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import unittest.mock as mock

from opsdroid.database import Database

class DatabaseTest:

class DatabaseTest(Database):
"""The mocked database class."""

def __init__(self, config):
Expand Down
13 changes: 5 additions & 8 deletions tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,8 @@ def test_start_databases(self):
module["config"] = {}
module["module"] = importlib.import_module(
"tests.mockmodules.databases.database")
opsdroid.start_databases([module])
self.assertEqual(len(opsdroid.memory.databases), 1)
self.assertEqual(
len(opsdroid.memory.databases[0].connect.mock_calls), 1)
with self.assertRaises(NotImplementedError):
opsdroid.start_databases([module])

def test_start_connectors(self):
with OpsDroid() as opsdroid:
Expand All @@ -67,12 +65,11 @@ def test_start_connectors(self):
module["config"] = {}
module["module"] = importlib.import_module(
"tests.mockmodules.connectors.connector")
opsdroid.start_connectors([module])
self.assertEqual(len(opsdroid.connectors), 1)

with self.assertRaises(NotImplementedError):
opsdroid.start_connectors([module])

opsdroid.start_connectors([module, module])
self.assertEqual(len(opsdroid.connectors), 3)
self.assertEqual(len(opsdroid.connector_jobs), 2)

def test_multiple_opsdroids(self):
with OpsDroid() as opsdroid:
Expand Down

0 comments on commit 1f650f2

Please sign in to comment.