From 34355f412fe2a039fdf4479269f5bd6c01ade18d Mon Sep 17 00:00:00 2001 From: Ali Akbar <52413434+Ali-D-Akbar@users.noreply.github.com> Date: Thu, 12 Sep 2024 19:21:36 +0500 Subject: [PATCH] fix: allow both active and marketable runs in update_course_ai_translations (#4441) * fix: allow both active and marketable runs in update_course_ai_translations * build: update actions/upload-artifact to v4 --- .github/workflows/ci.yml | 4 +- .../test_update_course_ai_translations.py | 37 +++++++++++++++++++ .../commands/update_course_ai_translations.py | 7 ++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7483eac258..c3d1c25878 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: continue-on-error: ${{ matrix.status == 'ignored' }} - name: Upload coverage if: matrix.db-version == 'mysql80' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: coverage${{ matrix.pytest-split-group }} path: .coverage @@ -60,7 +60,7 @@ jobs: PYTHON_VERSION: 3.12 - name: Download all artifacts # Downloads coverage1, coverage2, etc. - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 - name: Run coverage run: make ci_coverage - uses: codecov/codecov-action@v1 diff --git a/course_discovery/apps/course_metadata/management/commands/tests/test_update_course_ai_translations.py b/course_discovery/apps/course_metadata/management/commands/tests/test_update_course_ai_translations.py index 5372b9fbe1..263ba7d9d3 100644 --- a/course_discovery/apps/course_metadata/management/commands/tests/test_update_course_ai_translations.py +++ b/course_discovery/apps/course_metadata/management/commands/tests/test_update_course_ai_translations.py @@ -101,6 +101,43 @@ def test_command_with_marketable_flag(self, mock_get_translations): [{'code': 'es', 'label': 'Spanish'}] ) + def test_command_with_marketable_and_active_flag(self, mock_get_translations): + """Test the command with the marketable and active flag filtering both marketable and active course runs.""" + mock_get_translations.return_value = { + **self.TRANSLATION_DATA, + 'available_translation_languages': [{'code': 'fr', 'label': 'French'}] + } + + non_active_non_marketable_course_run = CourseRunFactory( + end=now() - datetime.timedelta(days=10), translation_languages=[]) + active_non_marketable_course_run = CourseRunFactory(end=now() + datetime.timedelta(days=10)) + + verified_and_audit_type = CourseRunType.objects.get(slug='verified-audit') + verified_and_audit_type.is_marketable = True + verified_and_audit_type.save() + + marketable_non_active_course_run = CourseRunFactory( + status='published', + slug='test-course-run', + type=verified_and_audit_type, + end=now() - datetime.timedelta(days=10), translation_languages=[] + ) + seat = SeatFactory(course_run=marketable_non_active_course_run) + marketable_non_active_course_run.seats.add(seat) + + call_command('update_course_ai_translations', partner=self.partner.name, marketable=True, active=True) + + marketable_non_active_course_run.refresh_from_db() + self.assertListEqual( + marketable_non_active_course_run.translation_languages, + [{'code': 'fr', 'label': 'French'}] + ) + self.assertListEqual( + active_non_marketable_course_run.translation_languages, + [{'code': 'fr', 'label': 'French'}] + ) + self.assertListEqual(non_active_non_marketable_course_run.translation_languages, []) + def test_command_no_partner(self, _): """Test the command raises an error if no valid partner is found.""" with self.assertRaises(CommandError): diff --git a/course_discovery/apps/course_metadata/management/commands/update_course_ai_translations.py b/course_discovery/apps/course_metadata/management/commands/update_course_ai_translations.py index d38d56d1fe..d4861dbea4 100644 --- a/course_discovery/apps/course_metadata/management/commands/update_course_ai_translations.py +++ b/course_discovery/apps/course_metadata/management/commands/update_course_ai_translations.py @@ -51,10 +51,11 @@ def handle(self, *args, **options): course_runs = CourseRun.objects.all() - if options['active']: + if options['active'] and options['marketable']: + course_runs = course_runs.marketable().union(course_runs.active()) + elif options['active']: course_runs = course_runs.active() - - if options['marketable']: + elif options['marketable']: course_runs = course_runs.marketable() for course_run in course_runs: