Skip to content

Commit

Permalink
Added unit test for Fate model
Browse files Browse the repository at this point in the history
  • Loading branch information
Digant C Kasundra committed May 8, 2015
1 parent 050256a commit 2b71f1c
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ install:
- pip install -r requirements-dev.txt
- pip install .

script: py.test -vv tests/
script: py.test -vvv tests/

after_success: curl -X POST http://readthedocs.org/build/dbx_hermes
6 changes: 3 additions & 3 deletions bin/hermes
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ def info_event_types(args):
def info_fates(args):
logging.debug("info_fates()")
session = make_session()
fates = models.Fates.query().all()
fates = models.Fate.query().all()
print "\nFATES (created by => completed by)\n "
for fate in fates:
creation_event = fate.creation_event
completion_event = fate.completion_event
creation_event = fate.creation_event_type
completion_event = fate.completion_event_type
print "{} => {}".format(
creation_event.category + "-" + creation_event.state,
completion_event.category + "-" + completion_event.state
Expand Down
48 changes: 45 additions & 3 deletions hermes/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,25 +274,67 @@ def create(cls, session, hostname):
return obj


class Fates(Model):
class Fate(Model):
__tablename__ = "fates"

id = Column(Integer, primary_key=True)
creation_type_id = Column(
Integer, ForeignKey("event_types.id"), nullable=False, index=True
)
creation_event = relationship(
creation_event_type = relationship(
EventType, lazy="joined", backref="auto_creates",
foreign_keys=[creation_type_id]
)
completion_type_id = Column(
Integer, ForeignKey("event_types.id"), nullable=False, index=True
)
completion_event = relationship(
completion_event_type = relationship(
EventType, lazy="joined", backref="auto_completes",
foreign_keys=[completion_type_id]
)
description = Column(String(2048), nullable=True)
__table_args__ = (
UniqueConstraint(
creation_type_id, completion_type_id, name='_creation_completion_uc'
),
)

@classmethod
def create(
cls, session,
creation_event_type, completion_event_type, description=None
):
"""Create a Fate
Args:
creation_event_type: an EventType that will trigger
an achievement creation
completion_event_type: an EventType that will trigger
an achievement completion
description: optional description for display
Returns:
a newly created Fate
"""
if creation_event_type is None or completion_event_type is None:
raise exc.ValidationError(
"Creation EventType and completion EventType are required"
)

try:
obj = cls(
creation_event_type=creation_event_type,
completion_event_type=completion_event_type,
description=description
)
obj.add(session)
session.flush()

except Exception:
session.rollback()
raise

return obj


class Event(Model):
Expand Down
15 changes: 13 additions & 2 deletions tests/model_tests/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
from hermes import models

@pytest.fixture
def session(request, tmpdir):
def db_engine(tmpdir):
db_path = tmpdir.join("hermes.sqlite")
db_engine = models.get_db_engine("sqlite:///%s" % db_path)

return db_engine

@pytest.fixture
def session(db_engine, request, tmpdir):
models.Model.metadata.drop_all(db_engine)
models.Model.metadata.create_all(db_engine)
models.Session.configure(bind=db_engine)
Expand All @@ -16,4 +20,11 @@ def fin():
session.close()
request.addfinalizer(fin)

return session
return session

@pytest.fixture
def sample_data1(db_engine):
sql_file = open('tests/sample_data/sample_data1.sql')
sql = sql_file.read()
for statement in sql.split(";"):
db_engine.execute(statement)
2 changes: 1 addition & 1 deletion tests/model_tests/test_eventtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from hermes import exc
from hermes import models

from .fixtures import session
from .fixtures import db_engine, session


def test_creation(session):
Expand Down
39 changes: 39 additions & 0 deletions tests/model_tests/test_fates.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest
from sqlalchemy.exc import IntegrityError

from hermes import exc
from hermes import models

from .fixtures import db_engine, session, sample_data1


def test_creation(session, sample_data1):
event_types = session.query(models.EventType).all()
assert len(event_types) == 4

event_type1 = event_types[2]
event_type2 = event_types[3]

models.Fate.create(session, event_type1, event_type2, "New fate")
session.commit()

fates = session.query(models.Fate).all()

# the total number of fates should be 2 now. We care about the new one
assert len(fates) == 2
fate = fates[1]
assert fate.id == 2
assert fate.creation_event_type == event_type1
assert fate.completion_event_type == event_type2
assert fate.description == "New fate"


def test_duplicate(session, sample_data1):
event_types = session.query(models.EventType).all()
assert len(event_types) == 4

event_type1 = event_types[0]
event_type2 = event_types[1]

with pytest.raises(IntegrityError):
models.Fate.create(session, event_type1, event_type2, "Dup fate")
2 changes: 1 addition & 1 deletion tests/model_tests/test_host.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from hermes import exc
from hermes import models

from .fixtures import session
from .fixtures import db_engine, session


def test_creation(session):
Expand Down
10 changes: 10 additions & 0 deletions tests/sample_data/sample_data1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
INSERT INTO `event_types` (`id`, `category`, `state`, `description`)
VALUES
(1,'system-reboot','required','This system requires a reboot.'),
(2,'system-reboot','completed','This system rebooted.'),
(3,'system-maintenance','required','This system requires maintenance.'),
(4,'system-maintenance','completed','System maintenance completed.');

INSERT INTO `fates` (`id`, `creation_type_id`, `completion_type_id`, `description`)
VALUES
(1,1,2,'A system that needs a reboot can be cleared by rebooting the machine.');

0 comments on commit 2b71f1c

Please sign in to comment.