Skip to content

Commit

Permalink
Plugin and Plugin Instance Tests (#1471)
Browse files Browse the repository at this point in the history
* Plugin and Plugin Instance Tests

* Fixes return type
  • Loading branch information
mvilanova authored Jul 22, 2021
1 parent d5a67b5 commit 72d6219
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/dispatch/plugin/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ def create_instance(*, db_session, plugin_instance_in: PluginInstanceCreate) ->

def update_instance(
*, db_session, plugin_instance: PluginInstance, plugin_instance_in: PluginInstanceUpdate
) -> Plugin:
) -> PluginInstance:
"""Updates a plugin instance."""
plugin_data = jsonable_encoder(plugin_instance)
plugin_instance_data = jsonable_encoder(plugin_instance)
update_data = plugin_instance_in.dict(skip_defaults=True)

if plugin_instance_in.enabled: # user wants to enable the plugin
Expand All @@ -124,7 +124,7 @@ def update_instance(
f"Cannot disable plugin instance: {plugin_instance.plugin.title}. One or more oncall services depend on it. "
)

for field in plugin_data:
for field in plugin_instance_data:
if field in update_data:
setattr(plugin_instance, field, update_data[field])

Expand Down
17 changes: 17 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
OrganizationFactory,
ParticipantFactory,
ParticipantRoleFactory,
PluginFactory,
PluginInstanceFactory,
ProjectFactory,
RecommendationFactory,
RecommendationMatchFactory,
Expand Down Expand Up @@ -461,3 +463,18 @@ def search_filter(session):
@pytest.fixture
def search_filters(session):
return [SearchFilterFactory(), SearchFilterFactory()]


@pytest.fixture
def plugin(session):
return PluginFactory()


@pytest.fixture
def plugins(session):
return [PluginFactory(), PluginFactory()]


@pytest.fixture
def plugin_instance(session):
return PluginInstanceFactory()
39 changes: 39 additions & 0 deletions tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from dispatch.organization.models import Organization
from dispatch.participant.models import Participant
from dispatch.participant_role.models import ParticipantRole
from dispatch.plugin.models import Plugin, PluginInstance
from dispatch.project.models import Project
from dispatch.report.models import Report
from dispatch.route.models import Recommendation, RecommendationMatch
Expand Down Expand Up @@ -786,3 +787,41 @@ def creator(self, create, extracted, **kwargs):

if extracted:
self.creator_id = extracted.id


class PluginFactory(BaseFactory):
"""Plugin Factory."""

title = FuzzyText()
slug = FuzzyText()
description = FuzzyText()
version = FuzzyText()
author = FuzzyText()
author_url = FuzzyText()
type = FuzzyText()
multiple = Faker().pybool()

class Meta:
"""Factory Configuration."""

model = Plugin


class PluginInstanceFactory(BaseFactory):
"""PluginInstance Factory."""

enabled = Faker().pybool()
configuration = {}

class Meta:
"""Factory Configuration."""

model = PluginInstance

@post_generation
def plugin(self, create, extracted, **kwargs):
if not create:
return

if extracted:
self.plugin_id = extracted.id
64 changes: 64 additions & 0 deletions tests/plugin/test_plugin_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import pytest


def test_get_plugin(session, plugin):
from dispatch.plugin.service import get

t_plugin = get(db_session=session, plugin_id=plugin.id)
assert t_plugin.id == plugin.id


def test_get_plugin_instance(session, plugin_instance):
from dispatch.plugin.service import get_instance

t_plugin_instance = get_instance(db_session=session, plugin_instance_id=plugin_instance.id)
assert t_plugin_instance.id == plugin_instance.id


def test_get_all(session, plugins):
from dispatch.plugin.service import get_all

t_plugins = get_all(db_session=session).all()
assert len(t_plugins) > 1


def test_create_instance(session, plugin, project):
from dispatch.plugin.service import create_instance
from dispatch.plugin.models import PluginInstanceCreate

enabled = True
configuration = {}

plugin_instance_in = PluginInstanceCreate(
enabled=enabled,
configuration=configuration,
plugin=plugin,
project=project,
)
plugin_instance = create_instance(db_session=session, plugin_instance_in=plugin_instance_in)
assert plugin_instance


@pytest.mark.skip
def test_update_instance(session, plugin_instance):
from dispatch.plugin.service import update_instance
from dispatch.plugin.models import PluginInstanceUpdate

enabled = False

plugin_instance_in = PluginInstanceUpdate(
enabled=enabled,
)
plugin_instance = update_instance(
db_session=session,
plugin_instance=plugin_instance,
plugin_instance_in=plugin_instance_in,
)
assert plugin_instance.enabled == enabled


def test_delete_instance(session, plugin_instance):
from dispatch.plugin.service import delete_instance, get_instance

delete_instance(db_session=session, plugin_instance_id=plugin_instance.id)
assert not get_instance(db_session=session, plugin_instance_id=plugin_instance.id)

0 comments on commit 72d6219

Please sign in to comment.