summaryrefslogtreecommitdiff
path: root/addons/website_slides/static/src/tests
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_slides/static/src/tests
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_slides/static/src/tests')
-rw-r--r--addons/website_slides/static/src/tests/tours/slides_course_member.js141
-rw-r--r--addons/website_slides/static/src/tests/tours/slides_course_member_yt.js67
-rw-r--r--addons/website_slides/static/src/tests/tours/slides_course_publisher.js96
-rw-r--r--addons/website_slides/static/src/tests/tours/slides_full_screen_web_editor.js39
-rw-r--r--addons/website_slides/static/src/tests/tours/slides_tour_tools.js141
5 files changed, 484 insertions, 0 deletions
diff --git a/addons/website_slides/static/src/tests/tours/slides_course_member.js b/addons/website_slides/static/src/tests/tours/slides_course_member.js
new file mode 100644
index 00000000..7f30b945
--- /dev/null
+++ b/addons/website_slides/static/src/tests/tours/slides_course_member.js
@@ -0,0 +1,141 @@
+odoo.define('website_slides.tour.slide.course.member', function (require) {
+'use strict';
+
+var tour = require('web_tour.tour');
+
+/**
+ * Global use case:
+ * an user (either employee, website publisher or portal) joins a public
+ course;
+ * he has access to the full course content when he's a member of the
+ course;
+ * he uses fullscreen player to complete the course;
+ * he rates the course;
+ */
+tour.register('course_member', {
+ url: '/slides',
+ test: true
+}, [
+// eLearning: go on free course and join it
+{
+ trigger: 'a:contains("Basics of Gardening - Test")'
+}, {
+ trigger: 'a:contains("Join Course")'
+}, {
+ trigger: '.o_wslides_js_course_join:contains("You\'re enrolled")',
+ run: function () {} // check membership
+}, {
+ trigger: 'a:contains("Gardening: The Know-How")',
+},
+// eLearning: follow course by cliking on first lesson and going to fullscreen player
+{
+ trigger: '.o_wslides_fs_sidebar_list_item div:contains("Home Gardening")'
+}, {
+ trigger: '.o_wslides_fs_sidebar_header',
+ run: function () {
+ // check navigation with arrow keys
+ var event = jQuery.Event("keydown");
+ event.key = "ArrowLeft";
+ // go back once
+ $(document).trigger(event);
+ // check that it selected the previous tab
+ if ($('.o_wslides_fs_sidebar_list_item.active:contains("Gardening: The Know-How")').length === 0) {
+ return;
+ }
+ // getting here means that navigation worked
+ $('.o_wslides_fs_sidebar_header').addClass('navigation-success-1');
+ }
+}, {
+ trigger: '.o_wslides_fs_sidebar_header.navigation-success-1',
+ extra_trigger: '.o_wslides_progress_percentage:contains("40")',
+ run: function () {
+ // check navigation with arrow keys
+ var event = jQuery.Event("keydown");
+ event.key = "ArrowRight";
+ $(document).trigger(event);
+ // check that it selected the next/next tab
+ if ($('.o_wslides_fs_sidebar_list_item.active:contains("Home Gardening")').length === 0) {
+ return;
+ }
+ // getting here means that navigation worked
+ $('.o_wslides_fs_sidebar_header').addClass('navigation-success-2');
+ }
+}, {
+ trigger: '.o_wslides_progress_percentage:contains("40")',
+ run: function () {} // check progression
+}, {
+ trigger: '.o_wslides_fs_sidebar_header.navigation-success-2',
+ extra_trigger: '.o_wslides_progress_percentage:contains("40")',
+ run: function () {
+ // check navigation with arrow keys
+ var event = jQuery.Event("keydown");
+ event.key = "ArrowRight";
+ setTimeout(function () {
+ $(document).trigger(event);
+ // check that it selected the next/next tab
+ if ($('.o_wslides_fs_sidebar_list_item.active:contains("Mighty Carrots")').length === 0) {
+ return;
+ }
+ // getting here means that navigation worked
+ $('.o_wslides_fs_sidebar_header').addClass('navigation-success-3');
+ }, 300);
+ }
+}, {
+ trigger: '.o_wslides_progress_percentage:contains("60")',
+ run: function () {} // check progression
+}, {
+ trigger: '.o_wslides_fs_sidebar_header.navigation-success-3',
+ extra_trigger: '.o_wslides_progress_percentage:contains("60")',
+ run: function () {} // check that previous step succeeded
+}, {
+ trigger: '.o_wslides_fs_sidebar_list_item div:contains("How to Grow and Harvest The Best Strawberries | Basics")'
+}, {
+ trigger: '.o_wslides_fs_sidebar_section_slides li:contains("How to Grow and Harvest The Best Strawberries | Basics") .o_wslides_slide_completed',
+ run: function () {} // check that video slide is marked as 'done'
+}, {
+ trigger: '.o_wslides_progress_percentage:contains("80")',
+ run: function () {} // check progression
+},
+// eLearning: last slide is a quiz, complete it
+{
+ trigger: '.o_wslides_fs_sidebar_list_item div:contains("Test your knowledge")'
+}, {
+ trigger: '.o_wslides_js_lesson_quiz_question:first .list-group a:first'
+}, {
+ trigger: '.o_wslides_js_lesson_quiz_question:last .list-group a:first'
+}, {
+ trigger: '.o_wslides_js_lesson_quiz_submit'
+}, {
+ trigger: 'a:contains("End course")'
+},
+// eLearning: ending course redirect to /slides, course is completed now
+{
+ trigger: 'div:contains("Basics of Gardening") span:contains("Completed")',
+ run: function () {} // check that the course is marked as completed
+},
+// eLearning: go back on course and rate it (new rate or update it, both should work)
+{
+ trigger: 'a:contains("Basics of Gardening")'
+}, {
+ trigger: 'button[data-target="#ratingpopupcomposer"]'
+}, {
+ trigger: 'form.o_portal_chatter_composer_form i.fa:eq(4)',
+ extra_trigger: 'div.modal_shown',
+ run: 'click',
+ in_modal: false,
+}, {
+ trigger: 'form.o_portal_chatter_composer_form textarea',
+ run: 'text This is a great course. Top !',
+ in_modal: false,
+}, {
+ trigger: 'button.o_portal_chatter_composer_btn',
+ in_modal: false,
+}, {
+ trigger: 'a[id="review-tab"]'
+}, {
+ trigger: '.o_portal_chatter_message:contains("This is a great course. Top !")',
+ run: function () {}, // check review is correctly added
+}
+]);
+
+});
diff --git a/addons/website_slides/static/src/tests/tours/slides_course_member_yt.js b/addons/website_slides/static/src/tests/tours/slides_course_member_yt.js
new file mode 100644
index 00000000..b060384d
--- /dev/null
+++ b/addons/website_slides/static/src/tests/tours/slides_course_member_yt.js
@@ -0,0 +1,67 @@
+odoo.define('website_slides.tour.slide.course.member.youtube', function (require) {
+'use strict';
+
+var tour = require('web_tour.tour');
+var FullScreen = require('website_slides.fullscreen');
+
+/**
+ * Alter this method for test purposes.
+ * This will make the video start at 10 minutes.
+ * As it lasts 10min24s, it will mark it as completed immediately.
+ */
+FullScreen.include({
+ _renderSlide: function () {
+
+ var slide = this.get('slide');
+ slide.embedUrl += '&start=260';
+ this.set('slide', slide);
+
+ return this._super.call(this, arguments);
+ }
+});
+
+/**
+ * Global use case:
+ * an user (either employee, website publisher or portal) joins a public
+ course;
+ * he has access to the full course content when he's a member of the
+ course;
+ * he uses fullscreen player to complete the course;
+ * he rates the course;
+ */
+tour.register('course_member_youtube', {
+ url: '/slides',
+ test: true
+}, [
+// eLearning: go on /all, find free course and join it
+{
+ trigger: 'a.o_wslides_home_all_slides'
+}, {
+ trigger: 'a:contains("Choose your wood")'
+}, {
+ trigger: 'a:contains("Join Course")'
+}, {
+ trigger: '.o_wslides_js_course_join:contains("You\'re enrolled")',
+ run: function () {} // check membership
+}, {
+ trigger: 'a:contains("Comparing Hardness of Wood Species")',
+}, {
+ trigger: '.o_wslides_progress_percentage:contains("50")',
+ run: function () {} // check progression
+}, {
+ trigger: 'a:contains("Wood Bending With Steam Box")',
+}, {
+ trigger: '.player',
+ run: function () {} // check player loading
+}, {
+ trigger: '.o_wslides_fs_sidebar_section_slides li:contains("Wood Bending With Steam Box") .o_wslides_slide_completed',
+ run: function () {} // check that video slide is marked as 'done'
+}, {
+ trigger: '.o_wslides_progress_percentage:contains("100")',
+ run: function () {} // check progression
+}, {
+ trigger: 'a:contains("Back to course")'
+}
+]);
+
+});
diff --git a/addons/website_slides/static/src/tests/tours/slides_course_publisher.js b/addons/website_slides/static/src/tests/tours/slides_course_publisher.js
new file mode 100644
index 00000000..98cca857
--- /dev/null
+++ b/addons/website_slides/static/src/tests/tours/slides_course_publisher.js
@@ -0,0 +1,96 @@
+odoo.define('website_slides.tour.slide.course.publisher', function (require) {
+'use strict';
+
+var tour = require('web_tour.tour');
+var slidesTourTools = require('website_slides.tour.tools');
+
+/**
+ * Global use case:
+ * a user (website publisher) creates a course;
+ * he updates it;
+ * he creates some lessons in it;
+ * he publishes it;
+ */
+tour.register('course_publisher', {
+ url: '/slides',
+ test: true
+}, [{
+ content: 'eLearning: click on New (top-menu)',
+ trigger: 'li.o_new_content_menu a'
+}, {
+ content: 'eLearning: click on New Course',
+ trigger: 'a:contains("Course")'
+}, {
+ content: 'eLearning: set name',
+ trigger: 'input[name="name"]',
+ run: 'text How to Déboulonnate',
+}, {
+ content: 'eLearning: click on tags',
+ trigger: 'ul.select2-choices:first',
+}, {
+ content: 'eLearning: select gardener tag',
+ trigger: 'div.select2-result-label:contains("Gardener")',
+ in_modal: false,
+}, {
+ content: 'eLearning: set description',
+ trigger: 'input[name="description"]',
+ run: 'text Déboulonnate is very common at Fleurus',
+}, {
+ content: 'eLearning: we want reviews',
+ trigger: 'input[name="allow_comment"]',
+}, {
+ content: 'eLearning: seems cool, create it',
+ trigger: 'button:contains("Create")',
+}, {
+ content: 'eLearning: launch course edition',
+ trigger: 'li[id="edit-page-menu"] a',
+}, {
+ content: 'eLearning: double click image to edit it',
+ trigger: 'img.o_wslides_course_pict',
+ run: 'dblclick',
+}, {
+ content: 'eLearning: click pâtissière',
+ trigger: 'img[title="s_company_team_image_4.png"]',
+}, {
+ content: 'eLearning: is the pâtissière set ?',
+ trigger: 'img.o_wslides_course_pict',
+ run: function () {
+ if ($('img.o_wslides_course_pict').attr('src').endsWith('s_team_member_4.png')) {
+ $('img.o_wslides_course_pict').addClass('o_wslides_tour_success');
+ }
+ },
+}, {
+ content: 'eLearning: the pâtissière is set !',
+ trigger: 'img.o_wslides_course_pict.o_wslides_tour_success',
+}, {
+ content: 'eLearning: save course edition',
+ trigger: 'button[data-action="save"]',
+}, {
+ content: 'eLearning: course create with current member',
+ extra_trigger: 'body:not(.editor_enable)', // wait for editor to close
+ trigger: '.o_wslides_js_course_join:contains("You\'re enrolled")',
+ run: function () {} // check membership
+}
+].concat(
+ slidesTourTools.addExistingCourseTag(),
+ slidesTourTools.addNewCourseTag('The Most Awesome Course'),
+ slidesTourTools.addSection('Introduction'),
+ slidesTourTools.addVideoToSection('Introduction'),
+ [{
+ content: 'eLearning: publish newly added course',
+ trigger: 'span:contains("Dschinghis Khan - Moskau 1979")', // wait for slide to appear
+ // trigger: 'span.o_wslides_js_slide_toggle_is_preview:first',
+ run: function () {
+ $('span.o_wslides_js_slide_toggle_is_preview:first').click();
+ }
+}]
+// [
+// {
+// content: 'eLearning: move new course inside introduction',
+// trigger: 'div.o_wslides_slides_list_drag',
+// // run: 'drag_and_drop div.o_wslides_slides_list_drag ul.ui-sortable:first',
+// run: 'drag_and_drop div.o_wslides_slides_list_drag a.o_wslides_js_slide_section_add',
+// }]
+));
+
+});
diff --git a/addons/website_slides/static/src/tests/tours/slides_full_screen_web_editor.js b/addons/website_slides/static/src/tests/tours/slides_full_screen_web_editor.js
new file mode 100644
index 00000000..26aeafe0
--- /dev/null
+++ b/addons/website_slides/static/src/tests/tours/slides_full_screen_web_editor.js
@@ -0,0 +1,39 @@
+odoo.define('website_slides.tour.fullscreen.edition.publisher', function (require) {
+'use strict';
+
+var tour = require('web_tour.tour');
+
+/**
+ * Global use case:
+ * - a user (website publisher) lands on the fullscreen view of a course ;
+ * - he clicks on the website editor "Edit" button ;
+ * - he is redirected to the non-fullscreen view with the editor opened.
+ *
+ * This tour tests a fix made when editing a course in fullscreen view.
+ * See "Fullscreen#_onWebEditorClick" for more information.
+ *
+ */
+tour.register('full_screen_web_editor', {
+ url: '/slides',
+ test: true
+}, [{
+ // open to the course
+ trigger: 'a:contains("Basics of Gardening")'
+}, {
+ // click on a slide to open the fullscreen view
+ trigger: 'a.o_wslides_js_slides_list_slide_link:contains("Home Gardening")'
+}, {
+ trigger: '.o_wslides_fs_main',
+ run: function () {} // check we land on the fullscreen view
+}, {
+ // click on the main "Edit" button to open the web editor
+ trigger: '#edit-page-menu a[data-action="edit"]',
+}, {
+ trigger: '.o_wslides_lesson_main',
+ run: function () {} // check we are redirected on the detailed view
+}, {
+ trigger: 'body.editor_enable',
+ run: function () {} // check the editor is automatically opened on the detailed view
+}]);
+
+});
diff --git a/addons/website_slides/static/src/tests/tours/slides_tour_tools.js b/addons/website_slides/static/src/tests/tours/slides_tour_tools.js
new file mode 100644
index 00000000..5b5f525c
--- /dev/null
+++ b/addons/website_slides/static/src/tests/tours/slides_tour_tools.js
@@ -0,0 +1,141 @@
+odoo.define('website_slides.tour.tools', function (require) {
+'use strict';
+
+/*
+ * PUBLISHER / CONTENT CREATION
+ */
+
+var addSection = function (sectionName) {
+ return [
+{
+ content: 'eLearning: click on Add Section',
+ trigger: 'a.o_wslides_js_slide_section_add',
+}, {
+ content: 'eLearning: set section name',
+ trigger: 'input[name="name"]',
+ run: 'text ' + sectionName,
+}, {
+ content: 'eLearning: create section',
+ trigger: 'footer.modal-footer button:contains("Save")'
+}, {
+ content: 'eLearning: section created empty',
+ trigger: 'div.o_wslides_slide_list_category_header:contains("' + sectionName + '")',
+}];
+};
+
+var addVideoToSection = function (sectionName, saveAsDraft) {
+ var base_steps = [
+{
+ content: 'eLearning: add content to section',
+ trigger: 'div.o_wslides_slide_list_category_header:contains("' + sectionName + '") a:contains("Add Content")',
+}, {
+ content: 'eLearning: click on video',
+ trigger: 'a[data-slide-type=video]',
+}, {
+ content: 'eLearning: fill video link',
+ trigger: 'input[name=url]',
+ run: 'text https://www.youtube.com/watch?v=NvS351QKFV4&list=PLtVFNIekBzqIfO4u4n78i43etfw2n1St8&index=2&t=0s',
+}, {
+ content: 'eLearning: click outside to trigger onchange',
+ trigger: 'div.o_w_slide_upload_modal_container',
+ run: 'click',
+}];
+ if (saveAsDraft) {
+ base_steps = [].concat(base_steps, [{
+ content: 'eLearning: save as draft slide',
+ extra_trigger: 'div.o_slide_preview img:not([src="/website_slides/static/src/img/document.png"])', // wait for onchange to perform its duty
+ trigger: 'footer.modal-footer button:contains("Save as Draft")',
+}]);
+ }
+ else {
+ base_steps = [].concat(base_steps, [{
+ content: 'eLearning: create and publish slide',
+ extra_trigger: 'div.o_slide_preview img:not([src="/website_slides/static/src/img/document.png"])', // wait for onchange to perform its duty
+ trigger: 'footer.modal-footer button:contains("Publish")',
+}]);
+ }
+ return base_steps;
+};
+
+var addWebPageToSection = function (sectionName, pageName) {
+ return [
+{
+ content: 'eLearning: add content to section',
+ trigger: 'div.o_wslides_slide_list_category_header:contains("' + sectionName + '") a:contains("Add Content")',
+}, {
+ content: 'eLearning: click on webpage',
+ trigger: 'a[data-slide-type=webpage]',
+}, {
+ content: 'eLearning: fill webpage title',
+ trigger: 'input[name=name]',
+ run: 'text ' + pageName,
+}, {
+ content: 'eLearning: click on tags',
+ trigger: 'ul.select2-choices:first',
+}, {
+ content: 'eLearning: select Theory tag',
+ trigger: 'div.select2-result-label:contains("Theory")',
+ in_modal: false,
+}, {
+ content: 'eLearning: fill webpage completion time',
+ trigger: 'input[name=duration]',
+ run: 'text 4',
+}];
+};
+
+var addExistingCourseTag = function () {
+ return [
+{
+ content: 'eLearning: click on Add Tag',
+ trigger: 'a.o_wslides_js_channel_tag_add',
+}, {
+ content: 'eLearning: click on tag dropdown',
+ trigger: 'a.select2-choice:first',
+}, {
+ content: 'eLearning: select advanced tag',
+ trigger: 'div.select2-result-label:contains("Advanced")',
+ in_modal: false,
+}, {
+ content: 'eLearning: add existing course tag',
+ trigger: 'footer.modal-footer button:contains("Add")'
+}];
+};
+
+var addNewCourseTag = function (courseTagName) {
+ return [
+{
+ content: 'eLearning: click on Add Tag',
+ trigger: 'a.o_wslides_js_channel_tag_add',
+}, {
+ content: 'eLearning: click on tag dropdown',
+ trigger: 'a.select2-choice:first',
+}, {
+ content: 'eLearning: add a new course tag',
+ trigger: 'a.select2-choice:first',
+ run: function () {
+ // directly add new tag since we can assume select2 works correctly
+ $('#tag_id').select2('data', {id:'123', text: courseTagName, create: true});
+ $('#tag_id').trigger('change');
+ }
+}, {
+ content: 'eLearning: click on tag group dropdown',
+ trigger: 'a.select2-choice:last',
+}, {
+ content: 'eLearning: select Tags tag group',
+ trigger: 'div.select2-result-label:contains("Tags")',
+ in_modal: false,
+}, {
+ content: 'eLearning: add new course tag',
+ trigger: 'footer.modal-footer button:contains("Add")'
+}];
+};
+
+return {
+ addSection: addSection,
+ addVideoToSection: addVideoToSection,
+ addWebPageToSection: addWebPageToSection,
+ addExistingCourseTag: addExistingCourseTag,
+ addNewCourseTag: addNewCourseTag,
+};
+
+});