From 4024127ee06a8a1c02faf85ffa5fa83b2d2daa3c Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Mon, 17 Oct 2022 13:49:27 +0800 Subject: [PATCH] MDL-75982 tiny_h5p: add tests for h5p plugin --- .../plugins/h5p/amd/build/commands.min.js | 2 +- .../plugins/h5p/amd/build/commands.min.js.map | 2 +- .../tiny/plugins/h5p/amd/build/options.min.js | 4 +- .../plugins/h5p/amd/build/options.min.js.map | 2 +- .../tiny/plugins/h5p/amd/src/commands.js | 4 + .../tiny/plugins/h5p/amd/src/options.js | 11 + .../tiny/plugins/h5p/tests/behat/h5p.feature | 210 ++++++++++++++++++ 7 files changed, 230 insertions(+), 5 deletions(-) create mode 100644 lib/editor/tiny/plugins/h5p/tests/behat/h5p.feature diff --git a/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js b/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js index 89ae0b09c20..2bfa17747ff 100644 --- a/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js +++ b/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js @@ -1,3 +1,3 @@ -define("tiny_h5p/commands",["exports","editor_tiny/utils","./ui","core/str","./common"],(function(_exports,_utils,_ui,_str,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;_exports.getSetup=async()=>{const[buttonText,buttonImage]=await Promise.all([(0,_str.get_string)("buttontitle",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.buttonName,{icon:_common.icon,tooltip:buttonText,onAction:()=>(0,_ui.handleAction)(editor),onSetup:api=>{api.setActive(editor.formatter.match("h5p"));const changed=editor.formatter.formatChanged("h5p",(state=>api.setActive(state)));return()=>changed.unbind()}}),editor.ui.registry.addMenuItem(_common.buttonName,{icon:_common.icon,text:buttonText,onAction:()=>(0,_ui.handleAction)(editor)})}}})); +define("tiny_h5p/commands",["exports","editor_tiny/utils","./ui","core/str","./common","./options"],(function(_exports,_utils,_ui,_str,_common,_options){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.getSetup=void 0;_exports.getSetup=async()=>{const[buttonText,buttonImage]=await Promise.all([(0,_str.get_string)("buttontitle",_common.component),(0,_utils.getButtonImage)("icon",_common.component)]);return editor=>{(0,_options.hasAnyH5PPermission)(editor)&&(editor.ui.registry.addIcon(_common.icon,buttonImage.html),editor.ui.registry.addToggleButton(_common.buttonName,{icon:_common.icon,tooltip:buttonText,onAction:()=>(0,_ui.handleAction)(editor),onSetup:api=>{api.setActive(editor.formatter.match("h5p"));const changed=editor.formatter.formatChanged("h5p",(state=>api.setActive(state)));return()=>changed.unbind()}}),editor.ui.registry.addMenuItem(_common.buttonName,{icon:_common.icon,text:buttonText,onAction:()=>(0,_ui.handleAction)(editor)}))}}})); //# sourceMappingURL=commands.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js.map b/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js.map index fd2305c7fa0..6146bd4953a 100644 --- a/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js.map +++ b/lib/editor/tiny/plugins/h5p/amd/build/commands.min.js.map @@ -1 +1 @@ -{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Tiny H5P Content configuration.\n *\n * @module tiny_h5p/commands\n * @copyright 2022 Andrew Lyons \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {handleAction} from './ui';\nimport {get_string as getString} from 'core/str';\nimport {\n component,\n buttonName,\n icon,\n} from './common';\n\nexport const getSetup = async() => {\n const [\n buttonText,\n buttonImage,\n ] = await Promise.all([\n getString('buttontitle', component),\n getButtonImage('icon', component),\n ]);\n\n return (editor) => {\n // Register the H5P Icon.\n editor.ui.registry.addIcon(icon, buttonImage.html);\n\n // Register the Menu Button as a toggle.\n // This means that when highlighted over an existing H5P element it will show as toggled on.\n editor.ui.registry.addToggleButton(buttonName, {\n icon,\n tooltip: buttonText,\n onAction: () => handleAction(editor),\n onSetup: (api) => {\n // Set the button to be active if the current selection matches the h5p formatter registered above during PreInit.\n api.setActive(editor.formatter.match('h5p'));\n const changed = editor.formatter.formatChanged('h5p', (state) => api.setActive(state));\n return () => changed.unbind();\n },\n });\n\n // Add the H5P Menu Item.\n // This allows it to be added to a standard menu, or a context menu.\n editor.ui.registry.addMenuItem(buttonName, {\n icon,\n text: buttonText,\n onAction: () => handleAction(editor),\n });\n };\n};\n"],"names":["async","buttonText","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","buttonName","tooltip","onAction","onSetup","api","setActive","formatter","match","changed","formatChanged","state","unbind","addMenuItem","text"],"mappings":"uOAgCwBA,gBAEhBC,WACAC,mBACMC,QAAQC,IAAI,EAClB,mBAAU,cAAeC,oBACzB,yBAAe,OAAQA,4BAGnBC,SAEJA,OAAOC,GAAGC,SAASC,QAAQC,aAAMR,YAAYS,MAI7CL,OAAOC,GAAGC,SAASI,gBAAgBC,mBAAY,CAC3CH,KAAAA,aACAI,QAASb,WACTc,SAAU,KAAM,oBAAaT,QAC7BU,QAAUC,MAENA,IAAIC,UAAUZ,OAAOa,UAAUC,MAAM,cAC/BC,QAAUf,OAAOa,UAAUG,cAAc,OAAQC,OAAUN,IAAIC,UAAUK,eACxE,IAAMF,QAAQG,YAM7BlB,OAAOC,GAAGC,SAASiB,YAAYZ,mBAAY,CACvCH,KAAAA,aACAgB,KAAMzB,WACNc,SAAU,KAAM,oBAAaT"} \ No newline at end of file +{"version":3,"file":"commands.min.js","sources":["../src/commands.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Tiny H5P Content configuration.\n *\n * @module tiny_h5p/commands\n * @copyright 2022 Andrew Lyons \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getButtonImage} from 'editor_tiny/utils';\nimport {handleAction} from './ui';\nimport {get_string as getString} from 'core/str';\nimport {\n component,\n buttonName,\n icon,\n} from './common';\nimport {hasAnyH5PPermission} from './options';\n\nexport const getSetup = async() => {\n const [\n buttonText,\n buttonImage,\n ] = await Promise.all([\n getString('buttontitle', component),\n getButtonImage('icon', component),\n ]);\n\n return (editor) => {\n if (!hasAnyH5PPermission(editor)) {\n return;\n }\n // Register the H5P Icon.\n editor.ui.registry.addIcon(icon, buttonImage.html);\n\n // Register the Menu Button as a toggle.\n // This means that when highlighted over an existing H5P element it will show as toggled on.\n editor.ui.registry.addToggleButton(buttonName, {\n icon,\n tooltip: buttonText,\n onAction: () => handleAction(editor),\n onSetup: (api) => {\n // Set the button to be active if the current selection matches the h5p formatter registered above during PreInit.\n api.setActive(editor.formatter.match('h5p'));\n const changed = editor.formatter.formatChanged('h5p', (state) => api.setActive(state));\n return () => changed.unbind();\n },\n });\n\n // Add the H5P Menu Item.\n // This allows it to be added to a standard menu, or a context menu.\n editor.ui.registry.addMenuItem(buttonName, {\n icon,\n text: buttonText,\n onAction: () => handleAction(editor),\n });\n };\n};\n"],"names":["async","buttonText","buttonImage","Promise","all","component","editor","ui","registry","addIcon","icon","html","addToggleButton","buttonName","tooltip","onAction","onSetup","api","setActive","formatter","match","changed","formatChanged","state","unbind","addMenuItem","text"],"mappings":"4PAiCwBA,gBAEhBC,WACAC,mBACMC,QAAQC,IAAI,EAClB,mBAAU,cAAeC,oBACzB,yBAAe,OAAQA,4BAGnBC,UACC,gCAAoBA,UAIzBA,OAAOC,GAAGC,SAASC,QAAQC,aAAMR,YAAYS,MAI7CL,OAAOC,GAAGC,SAASI,gBAAgBC,mBAAY,CAC3CH,KAAAA,aACAI,QAASb,WACTc,SAAU,KAAM,oBAAaT,QAC7BU,QAAUC,MAENA,IAAIC,UAAUZ,OAAOa,UAAUC,MAAM,cAC/BC,QAAUf,OAAOa,UAAUG,cAAc,OAAQC,OAAUN,IAAIC,UAAUK,eACxE,IAAMF,QAAQG,YAM7BlB,OAAOC,GAAGC,SAASiB,YAAYZ,mBAAY,CACvCH,KAAAA,aACAgB,KAAMzB,WACNc,SAAU,KAAM,oBAAaT"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/h5p/amd/build/options.min.js b/lib/editor/tiny/plugins/h5p/amd/build/options.min.js index 52511a008c3..ed9c1135b26 100644 --- a/lib/editor/tiny/plugins/h5p/amd/build/options.min.js +++ b/lib/editor/tiny/plugins/h5p/amd/build/options.min.js @@ -1,4 +1,4 @@ -define("tiny_h5p/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.getPermissions=void 0; +define("tiny_h5p/options",["exports","editor_tiny/options","./common"],(function(_exports,_options,_common){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.register=_exports.hasAnyH5PPermission=_exports.getPermissions=void 0; /** * Options helper for Tiny H5P plugin. * @@ -6,6 +6,6 @@ define("tiny_h5p/options",["exports","editor_tiny/options","./common"],(function * @copyright 2022 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -const permissionsName=(0,_options.getPluginOptionName)(_common.pluginName,"permissions");_exports.register=editor=>{(0,editor.options.register)(permissionsName,{processor:"object",default:{upload:!1,embed:!1}})};_exports.getPermissions=editor=>editor.options.get(permissionsName)})); +const permissionsName=(0,_options.getPluginOptionName)(_common.pluginName,"permissions");_exports.register=editor=>{(0,editor.options.register)(permissionsName,{processor:"object",default:{upload:!1,embed:!1}})};const getPermissions=editor=>editor.options.get(permissionsName);_exports.getPermissions=getPermissions;_exports.hasAnyH5PPermission=editor=>{const permissions=getPermissions(editor);return permissions.upload||permissions.embed}})); //# sourceMappingURL=options.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/h5p/amd/build/options.min.js.map b/lib/editor/tiny/plugins/h5p/amd/build/options.min.js.map index d2346ff9373..3f252b324a9 100644 --- a/lib/editor/tiny/plugins/h5p/amd/build/options.min.js.map +++ b/lib/editor/tiny/plugins/h5p/amd/build/options.min.js.map @@ -1 +1 @@ -{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Options helper for Tiny H5P plugin.\n *\n * @module tiny_h5p/options\n * @copyright 2022 Andrew Lyons \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst permissionsName = getPluginOptionName(pluginName, 'permissions');\n\n/**\n * Register the options for the Tiny H5P plugin.\n *\n * @param {TinyMCE} editor\n */\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(permissionsName, {\n processor: 'object',\n \"default\": {\n upload: false,\n embed: false,\n },\n });\n};\n\n/**\n * Get the permissions configuration for the Tiny H5P plugin.\n *\n * @param {TinyMCE} editor\n * @returns {object}\n */\nexport const getPermissions = (editor) => editor.options.get(permissionsName);\n"],"names":["permissionsName","pluginName","editor","registerOption","options","register","processor","upload","embed","get"],"mappings":";;;;;;;;MA0BMA,iBAAkB,gCAAoBC,mBAAY,iCAO/BC,UAGrBC,EAFuBD,OAAOE,QAAQC,UAEvBL,gBAAiB,CAC5BM,UAAW,iBACA,CACPC,QAAQ,EACRC,OAAO,8BAWYN,QAAWA,OAAOE,QAAQK,IAAIT"} \ No newline at end of file +{"version":3,"file":"options.min.js","sources":["../src/options.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Options helper for Tiny H5P plugin.\n *\n * @module tiny_h5p/options\n * @copyright 2022 Andrew Lyons \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getPluginOptionName} from 'editor_tiny/options';\nimport {pluginName} from './common';\n\nconst permissionsName = getPluginOptionName(pluginName, 'permissions');\n\n/**\n * Register the options for the Tiny H5P plugin.\n *\n * @param {TinyMCE} editor\n */\nexport const register = (editor) => {\n const registerOption = editor.options.register;\n\n registerOption(permissionsName, {\n processor: 'object',\n \"default\": {\n upload: false,\n embed: false,\n },\n });\n};\n\n/**\n * Get the permissions configuration for the Tiny H5P plugin.\n *\n * @param {TinyMCE} editor\n * @returns {object}\n */\nexport const getPermissions = (editor) => editor.options.get(permissionsName);\n\n/**\n * Check whether any H5P Permission is available.\n *\n * @param {TinyMCE} editor\n * @returns {boolean}\n */\nexport const hasAnyH5PPermission = (editor) => {\n const permissions = getPermissions(editor);\n return permissions.upload || permissions.embed;\n};\n"],"names":["permissionsName","pluginName","editor","registerOption","options","register","processor","upload","embed","getPermissions","get","permissions"],"mappings":";;;;;;;;MA0BMA,iBAAkB,gCAAoBC,mBAAY,iCAO/BC,UAGrBC,EAFuBD,OAAOE,QAAQC,UAEvBL,gBAAiB,CAC5BM,UAAW,iBACA,CACPC,QAAQ,EACRC,OAAO,YAWNC,eAAkBP,QAAWA,OAAOE,QAAQM,IAAIV,qFAQzBE,eAC1BS,YAAcF,eAAeP,eAC5BS,YAAYJ,QAAUI,YAAYH"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/h5p/amd/src/commands.js b/lib/editor/tiny/plugins/h5p/amd/src/commands.js index 4c487525491..5e1ec1c3a73 100644 --- a/lib/editor/tiny/plugins/h5p/amd/src/commands.js +++ b/lib/editor/tiny/plugins/h5p/amd/src/commands.js @@ -29,6 +29,7 @@ import { buttonName, icon, } from './common'; +import {hasAnyH5PPermission} from './options'; export const getSetup = async() => { const [ @@ -40,6 +41,9 @@ export const getSetup = async() => { ]); return (editor) => { + if (!hasAnyH5PPermission(editor)) { + return; + } // Register the H5P Icon. editor.ui.registry.addIcon(icon, buttonImage.html); diff --git a/lib/editor/tiny/plugins/h5p/amd/src/options.js b/lib/editor/tiny/plugins/h5p/amd/src/options.js index 8a32b20909f..74835c75110 100644 --- a/lib/editor/tiny/plugins/h5p/amd/src/options.js +++ b/lib/editor/tiny/plugins/h5p/amd/src/options.js @@ -50,3 +50,14 @@ export const register = (editor) => { * @returns {object} */ export const getPermissions = (editor) => editor.options.get(permissionsName); + +/** + * Check whether any H5P Permission is available. + * + * @param {TinyMCE} editor + * @returns {boolean} + */ +export const hasAnyH5PPermission = (editor) => { + const permissions = getPermissions(editor); + return permissions.upload || permissions.embed; +}; diff --git a/lib/editor/tiny/plugins/h5p/tests/behat/h5p.feature b/lib/editor/tiny/plugins/h5p/tests/behat/h5p.feature new file mode 100644 index 00000000000..a6f48937f4a --- /dev/null +++ b/lib/editor/tiny/plugins/h5p/tests/behat/h5p.feature @@ -0,0 +1,210 @@ +@editor @editor_tiny @tiny_media @javascript @_file_upload +Feature: Use the TinyMCE editor to upload an h5p package + In order to work with h5p + As a content creator + I need to be able to embed H5P packages + + Background: + Given the following "courses" exist: + | shortname | fullname | + | C1 | Course 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + And the following "activities" exist: + | activity | name | intro | introformat | course | content | contentformat | idnumber | + | page | PageName1 | PageDesc1 | 1 | C1 | H5Ptest | 1 | 1 | + And the "displayh5p" filter is "on" + And the following config values are set as admin: + | allowedsources | https://moodle.h5p.com/content/[id] | filter_displayh5p | + And the following "blocks" exist: + | blockname | contextlevel | reference | pagetypepattern | defaultregion | + | private_files | System | 1 | my-index | side-post | + + @javascript @external + Scenario: TinyMCE can be used to embed an H5P activity + Given I change window size to "large" + And I am on the PageName1 "page activity editing" page logged in as admin + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I set the field "H5P URL or file upload" to "https://moodle.h5p.com/content/1290772960722742119" + And I click on "Insert H5P content" "button" in the "Insert H5P content" "dialogue" + When I click on "Save and display" "button" + Then ".h5p-placeholder" "css_element" should exist + And I switch to "h5pcontent" iframe + And I should see "Lorum ipsum" + + @javascript + Scenario: TinyMCE can be used to upload and embed an H5P activity + Given I log in as "admin" + And I change window size to "large" + And I follow "Manage private files..." + And I upload "h5p/tests/fixtures/guess-the-answer.h5p" file to "Files" filemanager + And I click on "Save changes" "button" + And I am on the "PageName1" "page activity editing" page + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "Browse repositories..." "button" in the "Insert H5P content" "dialogue" + And I click on "Private files" "link" in the ".fp-repo-area" "css_element" + And I click on "guess-the-answer.h5p" "link" + And I click on "Select this file" "button" + And I click on "Insert H5P content" "button" in the "Insert H5P content" "dialogue" + When I click on "Save and display" "button" + Then ".h5p-placeholder" "css_element" should exist + + @javascript + Scenario: When a user does not have any H5P capabilities, they cannot embed H5P content with TinyMCE + Given the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | tiny/h5p:addembed | Prohibit | editingteacher | Course | C1 | + | moodle/h5p:deploy | Prohibit | editingteacher | Course | C1 | + When I am on the PageName1 "page activity editing" page logged in as teacher1 + Then "Configure H5P content" "button" should not exist + + @javascript + Scenario: When a user does not have the Embed H5P capability, they cannot embed H5P content with TinyMCE + Given the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | tiny/h5p:addembed | Prohibit | editingteacher | Course | C1 | + And I am on the PageName1 "page activity editing" page logged in as teacher1 + And I click on "Configure H5P" "button" + Then I should not see "H5P URL" in the "Insert H5P content" "dialogue" + And I should see "H5P file upload" in the "Insert H5P content" "dialogue" + And I should see "H5P options" in the "Insert H5P content" "dialogue" + + @javascript + Scenario: When a user does not have the Upload H5P capability, they can embed but not upload H5P content with TinyMCE + Given the following "permission overrides" exist: + | capability | permission | role | contextlevel | reference | + | moodle/h5p:deploy | Prohibit | editingteacher | Course | C1 | + When I am on the PageName1 "page activity editing" page logged in as teacher1 + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + Then I should not see "H5P file upload" in the "Insert H5P content" "dialogue" + And I should see "H5P URL" in the "Insert H5P content" "dialogue" + And I should not see "H5P options" in the "Insert H5P content" "dialogue" + + @javascript @external + Scenario: A user can edit H5P content embedding with TinyMCE + Given I log in as "admin" + And I follow "Manage private files..." + And I upload "lib/editor/atto/tests/fixtures/drag.h5p" file to "Files" filemanager + And I click on "Save changes" "button" + And I am on the PageName1 "page activity editing" page + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "Browse repositories..." "button" in the "Insert H5P content" "dialogue" + And I click on "Private files" "link" in the ".fp-repo-area" "css_element" + And I click on "drag" "link" + And I click on "Select this file" "button" + And I click on "Insert H5P content" "button" in the "Insert H5P content" "dialogue" + When I click on "Save and display" "button" + And I switch to "h5pcontent" iframe + And I switch to "h5p-iframe" class iframe + Then I should not see "reveal" + And I should see "Cloudberries" + And I switch to the main frame + And I navigate to "Settings" in current page administration + And I select the ".h5p-placeholder" "css_element" in the "Page content" TinyMCE editor + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I set the field "H5P URL or file upload" to "https://moodle.h5p.com/content/1290772960722742119" + And I click on "Insert H5P" "button" in the "Insert H5P content" "dialogue" + And I wait "1" seconds + And I click on "Save and display" "button" + And I switch to "h5pcontent" iframe + And I should see "Lorum ipsum" + And I should not see "Cloudberries" + + @javascript + Scenario: Enable/disable H5P options + Given I log in as "admin" + And I follow "Manage private files..." + And I upload "h5p/tests/fixtures/guess-the-answer.h5p" file to "Files" filemanager + And I click on "Save changes" "button" + And I am on the PageName1 "page activity editing" page + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "Browse repositories..." "button" in the "Insert H5P content" "dialogue" + And I click on "Private files" "link" in the ".fp-repo-area" "css_element" + And I click on "guess-the-answer.h5p" "link" + And I click on "Select this file" "button" + And I click on "Insert H5P" "button" in the "Insert H5P content" "dialogue" + When I click on "Save and display" "button" + And I switch to "h5pcontent" iframe + And I switch to "h5p-iframe" class iframe + Then I should not see "Reuse" + And I should not see "Embed" + And I should not see "Rights of use" + And I switch to the main frame + And I navigate to "Settings" in current page administration + And I select the ".h5p-placeholder" "css_element" in the "Page content" TinyMCE editor + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "H5P options" "link" + And I click on "Allow download" "checkbox" + And I click on "Insert H5P" "button" in the "Insert H5P content" "dialogue" + And I wait "1" seconds + And I click on "Save and display" "button" + And I switch to "h5pcontent" iframe + And I switch to "h5p-iframe" class iframe + And I should see "Reuse" + And I should not see "Embed" + And I should not see "Rights of use" + And I switch to the main frame + And I navigate to "Settings" in current page administration + And I select the ".h5p-placeholder" "css_element" in the "Page content" TinyMCE editor + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "Allow download" "checkbox" + And I click on "Embed button" "checkbox" + And I click on "Copyright button" "checkbox" + And I click on "Insert H5P" "button" in the "Insert H5P content" "dialogue" + And I wait "1" seconds + And I click on "Save and display" "button" + And I switch to "h5pcontent" iframe + And I switch to "h5p-iframe" class iframe + And I should not see "Reuse" + And I should see "Embed" + And I should see "Rights of use" + + @javascript @external + Scenario: H5P options are ignored for H5P URLs + Given I change window size to "large" + And I am on the PageName1 "page activity editing" page logged in as admin + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I set the field "H5P URL or file upload" to "https://moodle.h5p.com/content/1291366510035871129" + And I click on "H5P options" "link" + And I click on "Embed button" "checkbox" + And I click on "Insert H5P content" "button" in the "Insert H5P content" "dialogue" + When I click on "Save and display" "button" + Then ".h5p-placeholder" "css_element" should exist + And I switch to "h5pcontent" iframe + And I should see "Far far away" + And I should not see "Embed" + And I switch to the main frame + And I navigate to "Settings" in current page administration + And I select the ".h5p-placeholder" "css_element" in the "Page content" TinyMCE editor + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "H5P options" "link" + And "input[aria-label=\"Embed button\"]:not([checked=checked])" "css_element" should exist + + @javascript + Scenario: Private H5P files are shown to students + Given the following "users" exist: + | username | firstname | lastname | email | + | student1 | Student | 1 | student1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | student1 | C1 | student | + And I log in as "admin" + And I follow "Manage private files..." + And I upload "h5p/tests/fixtures/guess-the-answer.h5p" file to "Files" filemanager + And I click on "Save changes" "button" + And I am on the PageName1 "page activity editing" page + And I click on the "Configure H5P content" button for the "Page content" TinyMCE editor + And I click on "Browse repositories..." "button" in the "Insert H5P content" "dialogue" + And I click on "Private files" "link" in the ".fp-repo-area" "css_element" + And I click on "guess-the-answer.h5p" "link" + And I click on "Select this file" "button" + And I click on "Insert H5P content" "button" in the "Insert H5P content" "dialogue" + And I click on "Save and display" "button" + When I am on the PageName1 "page activity" page logged in as student1 + Then I switch to "h5pcontent" iframe + And I switch to "h5p-iframe" class iframe + And I should see "reveal"