From c7a4f97ba1622fa4f8ede3c020380ac3434650cc Mon Sep 17 00:00:00 2001 From: stvn Date: Thu, 17 Dec 2020 20:08:57 -0800 Subject: [PATCH] Add get-accessor helper for discussions plugins --- openedx/core/djangoapps/discussions/models.py | 14 ++++++-- .../discussions/tests/test_models.py | 33 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/openedx/core/djangoapps/discussions/models.py b/openedx/core/djangoapps/discussions/models.py index 655a329a0c..1dbb438a90 100644 --- a/openedx/core/djangoapps/discussions/models.py +++ b/openedx/core/djangoapps/discussions/models.py @@ -1,6 +1,8 @@ """ Provide django models to back the discussions app """ +from __future__ import annotations + from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -75,8 +77,16 @@ class DiscussionsConfiguration(TimeStampedModel): Default to False, if no configuration exists """ + configuration = cls.get(context_key) + return configuration.enabled + + @classmethod + def get(cls, context_key) -> cls: + """ + Lookup a model by context_key + """ try: configuration = cls.objects.get(context_key=context_key) except cls.DoesNotExist: - return False - return configuration.enabled + configuration = cls(context_key=context_key, enabled=False) + return configuration diff --git a/openedx/core/djangoapps/discussions/tests/test_models.py b/openedx/core/djangoapps/discussions/tests/test_models.py index 96fc5d48ac..f3aaefbfb1 100644 --- a/openedx/core/djangoapps/discussions/tests/test_models.py +++ b/openedx/core/djangoapps/discussions/tests/test_models.py @@ -103,3 +103,36 @@ class DiscussionsConfigurationModelTest(TestCase): """ is_enabled = DiscussionsConfiguration.is_enabled(self.course_key_with_values) assert not is_enabled + + def test_get_nonexistent(self): + """ + Assert we get an "empty" model back for nonexistent records + """ + configuration = DiscussionsConfiguration.get(self.course_key_without_config) + assert configuration is not None + assert not configuration.enabled + assert not configuration.lti_configuration + assert not configuration.plugin_configuration + assert not configuration.provider_type + + def test_get_defaults(self): + """ + Assert we can lookup a record with default values + """ + configuration = DiscussionsConfiguration.get(self.course_key_with_defaults) + assert configuration is not None + assert configuration.enabled + assert not configuration.lti_configuration + assert not configuration.plugin_configuration + assert not configuration.provider_type + + def test_get_explicit(self): + """ + Assert we can lookup a record with explicitly-set values + """ + configuration = DiscussionsConfiguration.get(self.course_key_with_values) + assert configuration is not None + assert not configuration.enabled + assert not configuration.lti_configuration + assert configuration.plugin_configuration + assert configuration.provider_type == 'cs_comments_service'