Skip to content

feat: remove enterprise enrollment imports and adds CourseEnrollmentViewStarted filter#306

Merged
kiram15 merged 1 commit into
release-ulmofrom
kiram15/ENT-11570
Jul 20, 2026
Merged

feat: remove enterprise enrollment imports and adds CourseEnrollmentViewStarted filter#306
kiram15 merged 1 commit into
release-ulmofrom
kiram15/ENT-11570

Conversation

@kiram15

@kiram15 kiram15 commented May 26, 2026

Copy link
Copy Markdown

Description

This PR removes those enterprise imports and the conditional block from the enrollment view, then runs the CourseEnrollmentViewStarted filter to handle the enterprise-specific enrollment logic seperately and outside of edx-platform. This is part of an ongoing initiative to leverage openedx-filters to allow enterprise to customize logic and remove it from edx-platform code.

ENT-11570

Supporting information

This is the openedx-filters PR
This is related edx-enterprise PR
And this is the corresponding openedx-platform PR (in draft mode rn)

Testing instructions

Testing instructions in the edx-enterprise PR.

Deadline

"None" if there's no rush, or provide a specific date or event (and reason) if there is one.

Other information

Include anything else that will help reviewers and consumers understand the change.

  • Does this change depend on other changes elsewhere?
  • Any special concerns or limitations? For example: deprecations, migrations, security, or accessibility.
  • If your database migration can't be rolled back easily.

Copilot AI review requested due to automatic review settings May 26, 2026 21:10

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR decouples enterprise-specific enrollment side effects from the LMS enrollment API endpoint by removing direct enterprise_support dependencies in EnrollmentView, and instead relying on an updated edx-enterprise version (presumably containing the new filter/pipeline integration) to handle enterprise post-enrollment processing.

Changes:

  • Bump edx-enterprise from 8.0.14 to 8.0.16 across constraints and edx requirement sets.
  • Remove openedx.features.enterprise_support.api imports and the linked_enterprise_customer conditional enterprise enrollment/consent block from EnrollmentView.post.
  • Remove the enterprise-mocking test mixin usage and the enterprise enrollment test that depended on HTTP mocking.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
requirements/edx/base.txt Bumps edx-enterprise pin to align the platform with the new enterprise-side pipeline behavior.
requirements/edx/development.txt Updates dev requirements to the same edx-enterprise version.
requirements/edx/doc.txt Updates doc requirements to the same edx-enterprise version.
requirements/edx/testing.txt Updates testing requirements to the same edx-enterprise version.
requirements/constraints.txt Updates the global constraint for edx-enterprise to 8.0.16.
openedx/core/djangoapps/enrollments/views.py Removes direct enterprise service calls during enrollment POST handling.
openedx/core/djangoapps/enrollments/tests/test_views.py Removes enterprise-specific test scaffolding and the enterprise enrollment integration test.
Comments suppressed due to low confidence (1)

openedx/core/djangoapps/enrollments/views.py:775

  • The POST enrollment API used to read linked_enterprise_customer and trigger enterprise enrollment/consent side effects when called with API-key permissions. With this block removed, requests that still send linked_enterprise_customer will now be silently ignored, which is a behavior change and can break existing enterprise-worker integrations.

To make the change safer, consider either (a) supporting backwards compatibility by mapping linked_enterprise_customer to the enterprise_uuid path (or otherwise passing it through to the new edx-enterprise post-processor), or (b) explicitly rejecting/deprecating the parameter with a clear 4xx response so clients fail fast instead of succeeding without the intended enterprise linkage.

            enrollment_attributes = request.data.get("enrollment_attributes")
            force_enrollment = request.data.get("force_enrollment")
            # Check if the force enrollment status is None or a Boolean
            if force_enrollment is not None and not isinstance(force_enrollment, bool):
                return Response(

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

openedx/core/djangoapps/enrollments/tests/test_views.py:1247

  • Enterprise enrollment behavior previously had a dedicated test. With the enterprise-specific code moved behind CourseEnrollmentViewStarted, there should be replacement coverage to (1) assert the filter is invoked when linked_enterprise_customer is present and (2) verify PreventEnrollment produces the expected HTTP 400 response. Otherwise regressions in this integration point may go unnoticed.
    def test_enrollment_attributes_always_written(self):
        """ Enrollment attributes should always be written, regardless of whether
        the enrollment is being created or updated.
        """
        course_key = self.course.id

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py
Copilot AI review requested due to automatic review settings June 8, 2026 21:03
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from da62878 to 31ca3d4 Compare June 8, 2026 21:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/tests/test_views.py
Comment thread openedx/core/djangoapps/enrollments/views.py
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Copilot AI review requested due to automatic review settings June 23, 2026 22:35

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
@kiram15 kiram15 changed the title feat: remove enterprise enrollment imports and adds CourseEnrollmentStarted filter feat: remove enterprise enrollment imports and adds CourseEnrollmentViewStarted filter Jun 24, 2026
Copilot AI review requested due to automatic review settings June 24, 2026 04:40
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 521a53e to 82533f2 Compare June 24, 2026 04:40

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Copilot AI review requested due to automatic review settings July 9, 2026 22:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.

Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Copilot AI review requested due to automatic review settings July 9, 2026 22:09

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 5 comments.

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Copilot AI review requested due to automatic review settings July 9, 2026 22:17
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 8ad0ccf to 1568606 Compare July 9, 2026 22:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.

Comment thread requirements/pip.txt Outdated
Comment thread requirements/common_constraints.txt Outdated
Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Copilot AI review requested due to automatic review settings July 9, 2026 22:21
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 9084d93 to cdc2980 Compare July 9, 2026 22:24
Copilot AI review requested due to automatic review settings July 20, 2026 15:25
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from d6319c2 to a895f55 Compare July 20, 2026 15:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 9 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 20, 2026 16:47
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from a895f55 to 5de7dd6 Compare July 20, 2026 16:47

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings July 20, 2026 16:53
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 5de7dd6 to 65e7ee9 Compare July 20, 2026 16:53

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

Comment thread openedx/core/djangoapps/enrollments/views.py Outdated
Copilot AI review requested due to automatic review settings July 20, 2026 19:02
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 65e7ee9 to 686183f Compare July 20, 2026 19:02

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

openedx/core/djangoapps/enrollments/views.py:783

  • error is undefined here (will raise NameError), and translating PreventEnrollment into CourseEnrollmentError causes the view to return HTTP 400 via the except CourseEnrollmentError handler. To preserve the intended semantics (and match existing filter handling in common/djangoapps/student/models/course_enrollment.py:731-732), raise EnrollmentNotAllowed using the caught exception message instead.
            except CourseEnrollmentViewStarted.PreventEnrollment as exc:
                raise CourseEnrollmentError(str(error)) from exc

@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 686183f to aa2bafa Compare July 20, 2026 19:31
Copilot AI review requested due to automatic review settings July 20, 2026 19:35
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from aa2bafa to 6b209cd Compare July 20, 2026 19:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

openedx/core/djangoapps/enrollments/views.py:783

  • PreventEnrollment is converted into CourseEnrollmentError, which is handled later as a generic enrollment error and returned as HTTP 400 with a generic message. That contradicts the intended semantics (and the new tests) where a pipeline step should be able to block enrollment with HTTP 403 and preserve the reason. Use EnrollmentNotAllowed here (consistent with common/djangoapps/student/models/course_enrollment.py:732) so the existing except EnrollmentNotAllowed block returns 403 with the filter message.
            # Filter hook that allows plugins (e.g., Enterprise) to run enrollment-related logic
            # and optionally prevent enrollment via CourseEnrollmentViewStarted.PreventEnrollment.
            try:
                # .. filter_implemented_name: CourseEnrollmentViewStarted
                # .. filter_type: org.openedx.learning.course.enrollment.view.started.v1
                CourseEnrollmentViewStarted.run_filter(
                    user=user,
                    course_key=course_id,
                    requester_is_backend_service=has_api_key_permissions,
                )
            except CourseEnrollmentViewStarted.PreventEnrollment as exc:
                raise CourseEnrollmentError(str(exc)) from exc

Copilot AI review requested due to automatic review settings July 20, 2026 20:20
@kiram15
kiram15 force-pushed the kiram15/ENT-11570 branch from 6b209cd to 540e462 Compare July 20, 2026 20:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

openedx/core/djangoapps/enrollments/views.py:783

  • CourseEnrollmentViewStarted.PreventEnrollment is currently converted into CourseEnrollmentError, which the view maps to a generic HTTP 400 response. Elsewhere in the codebase, PreventEnrollment is translated into EnrollmentNotAllowed (e.g., common/djangoapps/student/models/course_enrollment.py:731-732), which this view already renders as HTTP 403 with the specific message. To keep semantics consistent (and to avoid losing the filter-provided reason), raise EnrollmentNotAllowed here instead.
            except CourseEnrollmentViewStarted.PreventEnrollment as exc:
                raise CourseEnrollmentError(str(exc)) from exc

Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
Comment thread openedx/core/djangoapps/enrollments/tests/test_filters.py
@kiram15
kiram15 merged commit 09bc8e4 into release-ulmo Jul 20, 2026
65 checks passed
@kiram15
kiram15 deleted the kiram15/ENT-11570 branch July 20, 2026 22:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants