예제 #1
0
    def configure_module_item(self):
        """
        Respond to a configure module item request.

        This happens after an unconfigured assignment launch. We show the user
        our document selection form instead of launching the assignment, and
        when the user chooses a document and submits the form this is the view
        that receives that form submission.

        We save the chosen document in the DB so that subsequent launches of
        this same assignment will be DB-configured rather than unconfigured.
        And we also send back the assignment launch page, passing the chosen
        URL to Via, as the direct response to the content item form submission.
        """
        document_url = self.request.parsed_params["document_url"]

        ModuleItemConfiguration.set_document_url(
            self.request.db,
            self.request.parsed_params["tool_consumer_instance_guid"],
            self.request.parsed_params["resource_link_id"],
            document_url,
        )

        self.context.js_config.add_document_url(document_url)

        self.sync_lti_data_to_h()
        self.store_lti_data()

        self.context.js_config.maybe_enable_grading()

        return {}
예제 #2
0
    def test_set_document_url_saves_the_document_url(self, db_session):
        ModuleItemConfiguration.set_document_url(
            db_session,
            "test_tool_consumer_instance_guid",
            "test_resource_link_id",
            "NEW_DOCUMENT_URL",
        )

        assert (db_session.query(ModuleItemConfiguration).filter_by(
            tool_consumer_instance_guid="test_tool_consumer_instance_guid",
            resource_link_id="test_resource_link_id",
        ).one().document_url == "NEW_DOCUMENT_URL")
예제 #3
0
    def test_get_document_url_returns_the_document_url(self, db_session):
        db_session.add(
            ModuleItemConfiguration(
                tool_consumer_instance_guid="test_tool_consumer_instance_guid",
                resource_link_id="test_resource_link_id",
                document_url="test_document_url",
            ))

        document_url = ModuleItemConfiguration.get_document_url(
            db_session, "test_tool_consumer_instance_guid",
            "test_resource_link_id")

        assert document_url == "test_document_url"
예제 #4
0
    def db_configured_basic_lti_launch(self):
        """
        Respond to a DB-configured assignment launch.

        DB-configured assignment launch requests don't have any kind of file ID
        or document URL in the request. Instead the document URL is stored in
        our own DB. This happens with LMS's that don't support LTI content item
        selection/deep linking, so they don't support storing the document URL
        in the LMS and passing it back to us in each launch request. Instead we
        retrieve the document URL from the DB and pass it to Via.
        """
        self.sync_lti_data_to_h()
        self.store_lti_data()

        self.context.js_config.maybe_enable_grading()

        resource_link_id = self.request.params["resource_link_id"]
        tool_consumer_instance_guid = self.request.params["tool_consumer_instance_guid"]

        # The ``db_configured=True`` view predicate ensures that this view
        # won't be called if there isn't a matching ModuleItemConfiguration in
        # the DB. So here we can safely assume that the ModuleItemConfiguration
        # exists.
        document_url = ModuleItemConfiguration.get_document_url(
            self.request.db, tool_consumer_instance_guid, resource_link_id
        )

        self.context.js_config.add_document_url(document_url)

        return {}
예제 #5
0
    def test_get_document_url_returns_None_if_theres_no_matching_document_url(
            self, db_session):
        document_url = ModuleItemConfiguration.get_document_url(
            db_session, "test_tool_consumer_instance_guid",
            "test_resource_link_id")

        assert document_url is None
예제 #6
0
파일: conftest.py 프로젝트: jlieb10/lms
def module_item_configuration():
    from lms.models import ModuleItemConfiguration  # pylint:disable=relative-import

    instance = ModuleItemConfiguration(
        document_url="https://www.example.com",
        resource_link_id="TEST_RESOURCE_LINK_ID",
        tool_consumer_instance_guid="TEST_GUID",
    )
    yield instance
예제 #7
0
    def __call__(self, context, request):
        resource_link_id = request.params.get("resource_link_id")
        tool_consumer_instance_guid = request.params.get(
            "tool_consumer_instance_guid")

        has_module_item_configuration = (
            ModuleItemConfiguration.get_document_url(
                request.db, tool_consumer_instance_guid,
                resource_link_id) is not None)

        return has_module_item_configuration == self.value
예제 #8
0
    def test_set_document_url_overwrites_an_existing_document_url(
            self, db_session):
        db_session.add(
            ModuleItemConfiguration(
                tool_consumer_instance_guid="test_tool_consumer_instance_guid",
                resource_link_id="test_resource_link_id",
                document_url="OLD_DOCUMENT_URL",
            ))

        ModuleItemConfiguration.set_document_url(
            db_session,
            "test_tool_consumer_instance_guid",
            "test_resource_link_id",
            "NEW_DOCUMENT_URL",
        )

        assert (db_session.query(ModuleItemConfiguration).filter_by(
            tool_consumer_instance_guid="test_tool_consumer_instance_guid",
            resource_link_id="test_resource_link_id",
        ).one().document_url == "NEW_DOCUMENT_URL")
예제 #9
0
 def noise(self, db_session):
     db_session.add_all([
         ModuleItemConfiguration(
             tool_consumer_instance_guid=
             "noise_tool_consumer_instance_guid_1",
             resource_link_id="noise_resource_link_id_1",
             document_url="noise_document_url_1",
         ),
         ModuleItemConfiguration(
             tool_consumer_instance_guid=
             "noise_tool_consumer_instance_guid_2",
             resource_link_id="noise_resource_link_id_2",
             document_url="noise_document_url_2",
         ),
         ModuleItemConfiguration(
             tool_consumer_instance_guid=
             "noise_tool_consumer_instance_guid_3",
             resource_link_id="noise_resource_link_id_3",
             document_url="noise_document_url_3",
         ),
     ])
예제 #10
0
    def module_item_configuration(self, request, db_session):
        if request.param == "unconfigured":
            return

        module_item_configuration = ModuleItemConfiguration(
            resource_link_id="rli-1234",
            tool_consumer_instance_guid="IMS Testing",
            document_url="http://example.com",
        )

        db_session.add(module_item_configuration)
        db_session.commit()