From ca2fee12599893b8d17659fa0628be99ecf6125d Mon Sep 17 00:00:00 2001 From: David Baumgold Date: Tue, 21 Apr 2015 13:33:04 -0400 Subject: [PATCH] Move LicenseMixin into VideoFields class --- .../xmodule/video_module/video_module.py | 2 +- .../xmodule/video_module/video_xfields.py | 3 +- .../test/acceptance/pages/studio/container.py | 10 +++ .../tests/video/test_video_license.py | 85 +++++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 common/test/acceptance/tests/video/test_video_license.py diff --git a/common/lib/xmodule/xmodule/video_module/video_module.py b/common/lib/xmodule/xmodule/video_module/video_module.py index 00f2a86f5f..fe54bcbdb9 100644 --- a/common/lib/xmodule/xmodule/video_module/video_module.py +++ b/common/lib/xmodule/xmodule/video_module/video_module.py @@ -288,7 +288,7 @@ class VideoModule(VideoFields, VideoTranscriptsMixin, VideoStudentViewHandlers, class VideoDescriptor(VideoFields, VideoTranscriptsMixin, VideoStudioViewHandlers, - TabsEditingDescriptor, LicenseMixin, EmptyDataRawDescriptor): + TabsEditingDescriptor, EmptyDataRawDescriptor): """ Descriptor for `VideoModule`. """ diff --git a/common/lib/xmodule/xmodule/video_module/video_xfields.py b/common/lib/xmodule/xmodule/video_module/video_xfields.py index fa551a63f2..5bf2195b88 100644 --- a/common/lib/xmodule/xmodule/video_module/video_xfields.py +++ b/common/lib/xmodule/xmodule/video_module/video_xfields.py @@ -6,12 +6,13 @@ import datetime from xblock.fields import Scope, String, Float, Boolean, List, Dict from xmodule.fields import RelativeTime +from xmodule.mixin import LicenseMixin # Make '_' a no-op so we can scrape strings _ = lambda text: text -class VideoFields(object): +class VideoFields(LicenseMixin): """Fields for `VideoModule` and `VideoDescriptor`.""" display_name = String( help=_("The name students see. This name appears in the course ribbon and as a header for the video."), diff --git a/common/test/acceptance/pages/studio/container.py b/common/test/acceptance/pages/studio/container.py index aa46ce72ca..e1b7b586b5 100644 --- a/common/test/acceptance/pages/studio/container.py +++ b/common/test/acceptance/pages/studio/container.py @@ -487,6 +487,16 @@ class XBlockWrapper(PageObject): """ type_in_codemirror(self, index, text, find_prefix='$("{}").find'.format(self.editor_selector)) + def set_license(self, license_type): + css_selector = ( + "ul.license-types li[data-license={license_type}] button" + ).format(license_type=license_type) + self.wait_for_element_presence( + css_selector, + "{license_type} button is present".format(license_type=license_type) + ) + self.q(css=css_selector).click() + def save_settings(self): """ Click on settings Save button. diff --git a/common/test/acceptance/tests/video/test_video_license.py b/common/test/acceptance/tests/video/test_video_license.py new file mode 100644 index 0000000000..2a1127120e --- /dev/null +++ b/common/test/acceptance/tests/video/test_video_license.py @@ -0,0 +1,85 @@ +# coding: utf-8 +from __future__ import unicode_literals +from nose.plugins.attrib import attr +from ..studio.base_studio_test import StudioCourseTest + +#from ..helpers import UniqueCourseTest +from ...pages.studio.overview import CourseOutlinePage +from ...pages.lms.courseware import CoursewarePage +from ...fixtures.course import XBlockFixtureDesc + + +@attr('shard_1') +class VideoLicenseTest(StudioCourseTest): + + def setUp(self): + super(VideoLicenseTest, self).setUp() + + self.lms_courseware = CoursewarePage( + self.browser, + self.course_id, + ) + self.studio_course_outline = CourseOutlinePage( + self.browser, + self.course_info['org'], + self.course_info['number'], + self.course_info['run'] + ) + + # used by StudioCourseTest.setUp() + def populate_course_fixture(self, course_fixture): + video_block = XBlockFixtureDesc('video', "Test Video") + vertical = XBlockFixtureDesc('vertical', "Test Vertical") + vertical.add_children(video_block) + sequential = XBlockFixtureDesc('sequential', "Test Section") + sequential.add_children(vertical) + chapter = XBlockFixtureDesc('chapter', "Test Chapter") + chapter.add_children(sequential) + self.course_fixture.add_children(chapter) + + def test_empty_license(self): + self.lms_courseware.visit() + video = self.lms_courseware.q(css=".vert .xblock .video") + self.assertTrue(video.is_present()) + video_license = self.lms_courseware.q(css=".vert .xblock.xmodule_VideoModule .xblock-license") + self.assertFalse(video_license.is_present()) + + def test_arr_license(self): + self.studio_course_outline.visit() + subsection = self.studio_course_outline.section_at(0).subsection_at(0) + subsection.expand_subsection() + unit = subsection.unit_at(0) + container_page = unit.go_to() + container_page.edit() + video = [xb for xb in container_page.xblocks if xb.name == "Test Video"][0] + video.edit().open_advanced_tab() + video.set_license('all-rights-reserved') + video.save_settings() + container_page.publish_action.click() + + self.lms_courseware.visit() + video = self.lms_courseware.q(css=".vert .xblock .video") + self.assertTrue(video.is_present()) + video_license = self.lms_courseware.q(css=".vert .xblock.xmodule_VideoModule .xblock-license") + self.assertTrue(video_license.is_present()) + self.assertEqual(video_license.text[0], "© All Rights Reserved") + + def test_cc_license(self): + self.studio_course_outline.visit() + subsection = self.studio_course_outline.section_at(0).subsection_at(0) + subsection.expand_subsection() + unit = subsection.unit_at(0) + container_page = unit.go_to() + container_page.edit() + video = [xb for xb in container_page.xblocks if xb.name == "Test Video"][0] + video.edit().open_advanced_tab() + video.set_license('creative-commons') + video.save_settings() + container_page.publish_action.click() + + self.lms_courseware.visit() + video = self.lms_courseware.q(css=".vert .xblock .video") + self.assertTrue(video.is_present()) + video_license = self.lms_courseware.q(css=".vert .xblock.xmodule_VideoModule .xblock-license") + self.assertTrue(video_license.is_present()) + self.assertEqual(video_license.text[0], "Some Rights Reserved")