From c08401f159f5feed1fb601e06058b3b571d7ca41 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sun, 19 Feb 2023 18:32:03 +0100 Subject: [PATCH] MDL-76859 h5p: Fix behat failures - Only resize if the H5P EmbedCommunicator is defined (otherwise, it was causing a JS error) - An unnecessary image has been removed from the greeting-card.h5p fixture package. That way, the text will always be displayed (even if the iframe is still not resized). Instead of replacing the original greeting-card-887.h5p file, I've renamed it to greeting-card.h5p, to remove these ugly and unnecessary numbers at the end of the file name). --- .../tests/behat/view_preferences.feature | 4 ++-- contentbank/tests/contentbank_test.php | 2 +- .../tests/behat/inline_editing_content.feature | 6 +++--- h5p/templates/h5perror.mustache | 8 +++++--- h5p/tests/api_test.php | 14 +++++++------- h5p/tests/file_storage_test.php | 2 +- h5p/tests/fixtures/greeting-card-887.h5p | Bin 35659 -> 0 bytes h5p/tests/fixtures/greeting-card.h5p | Bin 0 -> 3825 bytes h5p/tests/helper_test.php | 8 ++++---- .../event/contentbank_content_uploaded_test.php | 2 +- .../h5p_clean_orphaned_records_task_test.php | 6 +++--- .../behat/h5p_inline_editing_content.feature | 2 +- mod/forum/tests/h5p/canedit_test.php | 2 +- .../tests/behat/inline_editing_content.feature | 8 ++++---- .../get_h5pactivities_by_courses_test.php | 4 ++-- .../tests/behat/search_content.feature | 2 +- .../tests/behat/select_content.feature | 4 ++-- 17 files changed, 38 insertions(+), 36 deletions(-) delete mode 100644 h5p/tests/fixtures/greeting-card-887.h5p create mode 100644 h5p/tests/fixtures/greeting-card.h5p diff --git a/contentbank/tests/behat/view_preferences.feature b/contentbank/tests/behat/view_preferences.feature index ab92d455578..b8d5b3d193c 100644 --- a/contentbank/tests/behat/view_preferences.feature +++ b/contentbank/tests/behat/view_preferences.feature @@ -11,7 +11,7 @@ Feature: Store the content bank view preference And I log in as "admin" And I follow "Manage private files..." And I upload "h5p/tests/fixtures/filltheblanks.h5p" file to "Files" filemanager - And I upload "h5p/tests/fixtures/greeting-card-887.h5p" file to "Files" filemanager + And I upload "h5p/tests/fixtures/greeting-card.h5p" file to "Files" filemanager And I click on "Save changes" "button" And I am on site homepage And I turn editing mode on @@ -35,7 +35,7 @@ Feature: Store the content bank view preference And I click on "Upload" "link" And I click on "Choose a file..." "button" And I click on "Private files" "link" in the ".fp-repo-area" "css_element" - And I click on "greeting-card-887.h5p" "link" + And I click on "greeting-card.h5p" "link" And I set the field "Save as" to "greetingcard.h5p" And I click on "Select this file" "button" And I click on "Save changes" "button" diff --git a/contentbank/tests/contentbank_test.php b/contentbank/tests/contentbank_test.php index 485717fcaf9..997b8540181 100644 --- a/contentbank/tests/contentbank_test.php +++ b/contentbank/tests/contentbank_test.php @@ -364,7 +364,7 @@ class contentbank_test extends advanced_testcase { $this->resetAfterTest(); $this->setAdminUser(); $systemcontext = \context_system::instance(); - $name = 'greeting-card-887.h5p'; + $name = 'greeting-card.h5p'; // Create a dummy H5P file. $dummyh5p = array( diff --git a/filter/displayh5p/tests/behat/inline_editing_content.feature b/filter/displayh5p/tests/behat/inline_editing_content.feature index abf97c6c266..7f082a2129d 100644 --- a/filter/displayh5p/tests/behat/inline_editing_content.feature +++ b/filter/displayh5p/tests/behat/inline_editing_content.feature @@ -20,7 +20,7 @@ Feature: Inline editing H5P content anywhere | student1 | C1 | student | And the following "contentbank content" exist: | contextlevel | reference | contenttype | user | contentname | filepath | - | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card-887.h5p | + | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card.h5p | And the following "activities" exist: | activity | name | intro | introformat | course | content | contentformat | idnumber | | page | PageName1 | PageDesc1 | 1 | C1 | H5Ptest | 1 | 1 | @@ -42,7 +42,7 @@ Feature: Inline editing H5P content anywhere And I log in as "teacher1" # Upload the H5P to private user files. And I follow "Manage private files..." - And I upload "h5p/tests/fixtures/greeting-card-887.h5p" file to "Files" filemanager + And I upload "h5p/tests/fixtures/greeting-card.h5p" file to "Files" filemanager And I click on "Save changes" "button" # Add H5P content to the page. And I am on "Course 1" course homepage @@ -51,7 +51,7 @@ Feature: Inline editing H5P content anywhere And I click on "Insert H5P" "button" in the "#fitem_id_page" "css_element" And I click on "Browse repositories..." "button" in the "Insert H5P" "dialogue" And I select "Private files" repository in file picker - And I click on "greeting-card-887.h5p" "file" in repository content area + And I click on "greeting-card.h5p" "file" in repository content area And I click on "Link to the file" "radio" And I click on "Select this file" "button" And I click on "Insert H5P" "button" in the "Insert H5P" "dialogue" diff --git a/h5p/templates/h5perror.mustache b/h5p/templates/h5perror.mustache index 78f20d2fb4a..8378b0fff98 100644 --- a/h5p/templates/h5perror.mustache +++ b/h5p/templates/h5perror.mustache @@ -60,8 +60,10 @@ {{#js}} (function() { - H5PEmbedCommunicator.send('resize', { - scrollHeight: document.body.scrollHeight - }); + if (typeof H5PEmbedCommunicator !== 'undefined') { + H5PEmbedCommunicator.send('resize', { + scrollHeight: document.body.scrollHeight + }); + } })(); {{/js}} diff --git a/h5p/tests/api_test.php b/h5p/tests/api_test.php index 007600021b4..b3fe6c3322d 100644 --- a/h5p/tests/api_test.php +++ b/h5p/tests/api_test.php @@ -349,7 +349,7 @@ class api_test extends \advanced_testcase { $syscontext = \context_system::instance(); // Create the original file. - $filename = 'greeting-card-887.h5p'; + $filename = 'greeting-card.h5p'; $path = __DIR__ . '/fixtures/' . $filename; $originalfile = helper::create_fake_stored_file_from_path($path); $originalfilerecord = [ @@ -491,7 +491,7 @@ class api_test extends \advanced_testcase { } // Create the file. - $filename = 'greeting-card-887.h5p'; + $filename = 'greeting-card.h5p'; $path = __DIR__ . '/fixtures/' . $filename; if ($filecomponent === 'contentbank') { $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); @@ -1197,33 +1197,33 @@ class api_test extends \advanced_testcase { public function is_valid_package_provider(): array { return [ 'Valid H5P file (as admin)' => [ - 'filename' => '/fixtures/greeting-card-887.h5p', + 'filename' => '/fixtures/greeting-card.h5p', 'expected' => true, 'isadmin' => true, ], 'Valid H5P file (as user) without library update and checking content' => [ - 'filename' => '/fixtures/greeting-card-887.h5p', + 'filename' => '/fixtures/greeting-card.h5p', 'expected' => false, // Libraries are missing and user hasn't the right permissions to upload them. 'isadmin' => false, 'onlyupdatelibs' => false, 'skipcontent' => false, ], 'Valid H5P file (as user) with library update and checking content' => [ - 'filename' => '/fixtures/greeting-card-887.h5p', + 'filename' => '/fixtures/greeting-card.h5p', 'expected' => false, // Libraries are missing and user hasn't the right permissions to upload them. 'isadmin' => false, 'onlyupdatelibs' => true, 'skipcontent' => false, ], 'Valid H5P file (as user) without library update and skipping content' => [ - 'filename' => '/fixtures/greeting-card-887.h5p', + 'filename' => '/fixtures/greeting-card.h5p', 'expected' => true, // Content check is skipped so the package will be considered valid. 'isadmin' => false, 'onlyupdatelibs' => false, 'skipcontent' => true, ], 'Valid H5P file (as user) with library update and skipping content' => [ - 'filename' => '/fixtures/greeting-card-887.h5p', + 'filename' => '/fixtures/greeting-card.h5p', 'expected' => true, // Content check is skipped so the package will be considered valid. 'isadmin' => false, 'onlyupdatelibs' => true, diff --git a/h5p/tests/file_storage_test.php b/h5p/tests/file_storage_test.php index e81e804facf..fa61ed79b3e 100644 --- a/h5p/tests/file_storage_test.php +++ b/h5p/tests/file_storage_test.php @@ -605,7 +605,7 @@ class file_storage_test extends \advanced_testcase { true, ], 'Icon not included' => [ - 'greeting-card-887.h5p', + 'greeting-card.h5p', false, ], ]; diff --git a/h5p/tests/fixtures/greeting-card-887.h5p b/h5p/tests/fixtures/greeting-card-887.h5p deleted file mode 100644 index 40d3093ed4e350f0bad9c95898bdbc9d03038351..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35659 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 diff --git a/h5p/tests/fixtures/greeting-card.h5p b/h5p/tests/fixtures/greeting-card.h5p new file mode 100644 index 0000000000000000000000000000000000000000..68e7880cc905bb7fbc4929572af99d713b5664c7 GIT binary patch literal 3825 zcma)82{=^y8$M`~Y-4R?CxtMkA_)nD%a9=q;bKg-LB=wcGAU%=qiAH0?5e3Wh#@74 zxVXrbBq5|^|Mx$-3x(=A&+j?sJkQMcKHq!3?|ok*eTHq^008U&MD*xRtQ4bemw<13 z=m0K#gz0Df`K@K9Dn$Y8x@R`7DBo+*37k$W)b z1rGgP?4Rc*x_Qsd^_GP#7gDW3Oj6R@bh(Mstpk7x*{BQ|vw%;*bX-Z@~O7fW^> zSYSW6aOuJaLd?*Zkkv@q*h0Dep0NqYy-ziDvP|^VMdIG35l2*o?QVu;lnN}k1^G(7 z5dR~@>Qh1vElO>LhfCBSQ|}~vq%mO7sW#Aph%~1HM&EFuaL4^@KFGzPU*f{u{^wj6 zK485l4}E{Iu~EVPd~)FdI)mi;F!9Q>J&%d`$D@;etHeZea2jiUjGVg;2O>S&Z17LV zwm(M!Es$GUy&^bE1zkB7nG3N<(+2}~Wn53j{G74@u19Puv!jEGy=eS2Np&=s1|;De zp!yG!wNNNFY>6Jtm@H6rYOFlODx6Sdjwf8X{L8BAf_Ph2Sry0&QU+k9a z*KU6=>yY1`(}DIjpWAJgU1K(xBU#au`eY)Io!F|X611>5&qS)BJ33l{JZXl6UJg)( zy^R*EQyQJkCBh5TV{Gmsyd@!cMuW2a>e#wdMz5I#W{1x_oTMHQcSg5~@cAqX*iC)fnzpTXED3W6)+w&Q-itdC|9x5F}t`{Ix~ zjqx~?ni|&Lkexvk)+tD>DP&e{AmpmANMt`;>hGiJ?1Q0+Y1+A+cKLT;7PiYd{3m!^ zrY7Wj-cCa&dUg|rg9e+OI$RvTjMF4wH24rm}4 zQ#@X!KJI|cPZ`hLyr6LbbNT8ZhRZ*(#3TW38|LL7%x*F0rQKEqh*8yy2LCTQ5yGCaA?om6C8@W7OcdWfB!%YQa3B6Bh@pU)K9?$ zN0y+gSr!ws`}Ha?UF9;B$ym=vXufpZGAcAbF*?GOMe0-qgxv&^{kY8+eb-{fNJA~` zuUuZFp<<#~nS>D5TWY+!J*L2q1r-@dfAuN-D=EWklJq;Cy;+XdK+`V8*fNv5c}N|J zgcMOTByB2PIGeP#2dlz({+u$B28sa@6a&$%_5kl}Pp~8Se=7uq8$~fD4#8Y64-F-f z8WSwE7zO*aj>}437!qUa{!}i7kh<>;{ZQMt=j8YZfkvDfsGbu5c9c=~A{Z-twQR2P z%e3>@!+aqX-Zwutr)6TKN)^;#PyN3a%b zvUg+*yo8x_ux~im&Jz`PJJCVu^nlxmmtGdqnt@cEnyW(E*4I7Ay$KYIQG)0Gs@ppT z`5bqehIN!$NGjgMG^`YnyMK?9_~I&df9il=HQgFJ$)HNu*lREOgX~biBfb?oUN|>9 zcW-B`*BU=}L2fpY3WFF`HhNL+kR{bdT{o5UyV@9f_?VM9e#=lFbo0hi9}J%8w@;f& zZ<$~mY^R4+=tNr3@H-1d10<(hQiS>6U$$N>TlOT+q(6TU>v%NMmzt+rFU#W@Ra<(4 zvoef35JwbUUgnhRl=02JxYwy8nhlGyxJsE8V1uu96$N%hYDqeh2Yzp92G9_<>dNsS zcf^A32sZXr0rNI*3up4wy-yxWUD}@?M)xFElT0Xlof&3yNF6S_2#MDH6VHtnG53Wu zeHoCL)oW+2=zV#WENJZbZhCo|Vaczi_H{s?EU!S6hoS3%SwyO#=MmYyDiN$}ZjnMM zvq&F)zG3_Q64m<@k#Tw72u$<*wKM)M>Ck!E=rJiknGbH(QmdzVZ=eyM@@ic8#hnW; z^6>j-?!lC^JU`=;&0tqfM~ZTUhs3reOT3evx+SPh*JPLXTsOnV)WWK`sPl#c|9HPr zd5d(7>&q6C7|xGcTviC_+uNV2&3lR@Hago-<4qe!Q{@7zlo#^-r}sau@3c7@xlrFF zldgoMymcN%Hx+zYexVySw7BG0WKE<=i{uvGNvA%8xJu|-=Y&p}PJDPZw70?OSlPTj zSEOD*oQMxTe29A-fn(H+7b48W9VWOmoPg2^^mIn)JYlahF%Rw1<4m>xsA8j=HzR-0 zIzuRJDdBLNoa0A!y;kuEk6BV$KGR{cinP~cY7bne;heh6b^6it%9U=gY5~9fRbG4-Xd_QMSqk5z8L|m*WWYXv&9U=8teo! zK`v2mlT;Z zSt@_Bynw+>?k|01Vkg);0N_C;hT`=k_`&DZ!woJ2*2CQ!=k5*v=f1YnuA4U=DE2Q+ zV#;E=I6U4%gy=!QJBW&%Tid!-rM0r$nH~p%w1Z~{2;`)2X07;Y%FNlAE!?6jcGjyy zAtWS)x4nLE$pv09UKepGMPl5&#J&&%v5lS?73-TJ>)d=}mytdly%57zsTu}01_0nd0hHj? zr(ew2kiRqbcd6=osBc5-dMFkU@yAgAMcAK1ZH$KNp*X<6xGB`Spa^2D2F0JW^R4Z! z$KZo(f$^;g|Gbrr{lp|+BS^-#OPA8jraVC7Yz*tGK6;(V(G>nmRbE3YX7SZ!4q WHdKRvUk?D7!0Qs|;U}3_-~JDX@{#WV literal 0 HcmV?d00001 diff --git a/h5p/tests/helper_test.php b/h5p/tests/helper_test.php index fedede87593..4cf3053ded4 100644 --- a/h5p/tests/helper_test.php +++ b/h5p/tests/helper_test.php @@ -137,7 +137,7 @@ class helper_test extends \advanced_testcase { $this->setUser($user); // This is a valid .H5P file. - $path = __DIR__ . '/fixtures/greeting-card-887.h5p'; + $path = __DIR__ . '/fixtures/greeting-card.h5p'; $file = helper::create_fake_stored_file_from_path($path, (int)$user->id); $factory->get_framework()->set_file($file); @@ -173,7 +173,7 @@ class helper_test extends \advanced_testcase { $this->setUser($user); // This is a valid .H5P file. - $path = __DIR__ . '/fixtures/greeting-card-887.h5p'; + $path = __DIR__ . '/fixtures/greeting-card.h5p'; $file = helper::create_fake_stored_file_from_path($path, (int)$user->id); $factory->get_framework()->set_file($file); @@ -247,7 +247,7 @@ class helper_test extends \advanced_testcase { $admin = get_admin(); // Prepare a valid .H5P file. - $path = __DIR__ . '/fixtures/greeting-card-887.h5p'; + $path = __DIR__ . '/fixtures/greeting-card.h5p'; // Files created by users can't be deployed. $file = helper::create_fake_stored_file_from_path($path, (int)$user->id); @@ -275,7 +275,7 @@ class helper_test extends \advanced_testcase { $admin = get_admin(); // Prepare a valid .H5P file. - $path = __DIR__ . '/fixtures/greeting-card-887.h5p'; + $path = __DIR__ . '/fixtures/greeting-card.h5p'; // Libraries can't be updated when the file has been created by users. $file = helper::create_fake_stored_file_from_path($path, (int)$user->id); diff --git a/lib/tests/event/contentbank_content_uploaded_test.php b/lib/tests/event/contentbank_content_uploaded_test.php index 1f7af49ca2e..2aa131f1327 100644 --- a/lib/tests/event/contentbank_content_uploaded_test.php +++ b/lib/tests/event/contentbank_content_uploaded_test.php @@ -69,7 +69,7 @@ class contentbank_content_uploaded_test extends \advanced_testcase { 'filepath' => '/', 'filename' => 'dummy_h5p.h5p' ); - $path = $CFG->dirroot . '/h5p/tests/fixtures/greeting-card-887.h5p'; + $path = $CFG->dirroot . '/h5p/tests/fixtures/greeting-card.h5p'; $dummyh5pfile = \core_h5p\helper::create_fake_stored_file_from_path($path); // Trigger and capture the event when creating content from a file. diff --git a/lib/tests/h5p_clean_orphaned_records_task_test.php b/lib/tests/h5p_clean_orphaned_records_task_test.php index 561c2516c94..ec473e60176 100644 --- a/lib/tests/h5p_clean_orphaned_records_task_test.php +++ b/lib/tests/h5p_clean_orphaned_records_task_test.php @@ -39,13 +39,13 @@ class h5p_clean_orphaned_records_task_test extends advanced_testcase { $course = $this->getDataGenerator()->create_course(); $params = [ 'course' => $course->id, - 'packagefilepath' => $CFG->dirroot.'/h5p/tests/fixtures/greeting-card-887.h5p', + 'packagefilepath' => $CFG->dirroot.'/h5p/tests/fixtures/greeting-card.h5p', 'introformat' => 1 ]; // Create h5pactivity. $activity = $this->getDataGenerator()->create_module('h5pactivity', $params); - $activity->filename = 'greeting-card-887.h5p'; + $activity->filename = 'greeting-card.h5p'; $context = context_module::instance($activity->cmid); // Create a fake deploy H5P file. @@ -70,7 +70,7 @@ class h5p_clean_orphaned_records_task_test extends advanced_testcase { AND filearea = 'content' AND component = 'core_h5p'"; $orphanedfiles = $DB->get_records_sql($orphanedfilessql, ['h5pid' => $h5pid]); - $this->assertEquals(3, count($orphanedfiles)); + $this->assertEquals(2, count($orphanedfiles)); // Execute task. $task = new \core\task\h5p_clean_orphaned_records_task(); diff --git a/mod/forum/tests/behat/h5p_inline_editing_content.feature b/mod/forum/tests/behat/h5p_inline_editing_content.feature index 759861df7ce..28bffa4ea20 100644 --- a/mod/forum/tests/behat/h5p_inline_editing_content.feature +++ b/mod/forum/tests/behat/h5p_inline_editing_content.feature @@ -20,7 +20,7 @@ Feature: Inline editing H5P content in mod_forum | student1 | C1 | student | And the following "contentbank content" exist: | contextlevel | reference | contenttype | user | contentname | filepath | - | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card-887.h5p | + | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card.h5p | And the following "activities" exist: | activity | name | intro | introformat | course | content | contentformat | idnumber | | forum | ForumName1 | PageDesc1 | 1 | C1 | H5Ptest | 1 | 1 | diff --git a/mod/forum/tests/h5p/canedit_test.php b/mod/forum/tests/h5p/canedit_test.php index 17139438844..1973bf8eeb6 100644 --- a/mod/forum/tests/h5p/canedit_test.php +++ b/mod/forum/tests/h5p/canedit_test.php @@ -85,7 +85,7 @@ class canedit_test extends \advanced_testcase { } // Create the file. - $filename = 'greeting-card-887.h5p'; + $filename = 'greeting-card.h5p'; $path = __DIR__ . '/../../../../h5p/tests/fixtures/' . $filename; if ($filecomponent === 'contentbank') { $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); diff --git a/mod/h5pactivity/tests/behat/inline_editing_content.feature b/mod/h5pactivity/tests/behat/inline_editing_content.feature index 4ebd54e617a..c1878204215 100644 --- a/mod/h5pactivity/tests/behat/inline_editing_content.feature +++ b/mod/h5pactivity/tests/behat/inline_editing_content.feature @@ -29,7 +29,7 @@ Feature: Inline editing H5P content Scenario: Add H5P activity using link to content bank file Given the following "contentbank content" exist: | contextlevel | reference | contenttype | user | contentname | filepath | - | Course | C1 | contenttype_h5p | teacher1 | Greeting card | /h5p/tests/fixtures/greeting-card-887.h5p | + | Course | C1 | contenttype_h5p | teacher1 | Greeting card | /h5p/tests/fixtures/greeting-card.h5p | And I log in as "admin" # Add the navigation block. And I am on "Course 1" course homepage with editing mode on @@ -91,7 +91,7 @@ Feature: Inline editing H5P content Scenario: Add H5P activity using copy to content bank file Given the following "contentbank content" exist: | contextlevel | reference | contenttype | user | contentname | filepath | - | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card-887.h5p | + | Course | C1 | contenttype_h5p | admin | Greeting card | /h5p/tests/fixtures/greeting-card.h5p | And I log in as "admin" # Add the navigation block. And I am on "Course 1" course homepage with editing mode on @@ -154,7 +154,7 @@ Feature: Inline editing H5P content Given I log in as "teacher1" # Upload the H5P to private user files. And I follow "Manage private files..." - And I upload "h5p/tests/fixtures/greeting-card-887.h5p" file to "Files" filemanager + And I upload "h5p/tests/fixtures/greeting-card.h5p" file to "Files" filemanager And I click on "Save changes" "button" # Create an H5P activity with a private user file. And I am on "Course 1" course homepage with editing mode on @@ -164,7 +164,7 @@ Feature: Inline editing H5P content | Description | Description | And I click on "Add..." "button" in the "Package file" "form_row" And I select "Private files" repository in file picker - And I click on "greeting-card-887.h5p" "file" in repository content area + And I click on "greeting-card.h5p" "file" in repository content area And I click on "Link to the file" "radio" And I click on "Select this file" "button" And I click on "Save and display" "button" diff --git a/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php b/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php index 3972354e4df..36787079342 100644 --- a/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php +++ b/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php @@ -72,12 +72,12 @@ class get_h5pactivities_by_courses_test extends externallib_advanced_testcase { $params = [ 'course' => $course1->id, - 'packagefilepath' => $CFG->dirroot.'/h5p/tests/fixtures/greeting-card-887.h5p', + 'packagefilepath' => $CFG->dirroot.'/h5p/tests/fixtures/greeting-card.h5p', 'introformat' => 1 ]; $activities[] = $this->getDataGenerator()->create_module('h5pactivity', $params); // Add filename and contextid to make easier the asserts. - $activities[1]->filename = 'greeting-card-887.h5p'; + $activities[1]->filename = 'greeting-card.h5p'; $context = context_module::instance($activities[1]->cmid); $activities[1]->contextid = $context->id; diff --git a/repository/contentbank/tests/behat/search_content.feature b/repository/contentbank/tests/behat/search_content.feature index bd5882e4415..fc253073952 100644 --- a/repository/contentbank/tests/behat/search_content.feature +++ b/repository/contentbank/tests/behat/search_content.feature @@ -23,7 +23,7 @@ Feature: Search content bank files using the content bank files repository | Course | C2 | contenttype_h5p | admin | coursecontent2.h5p | /h5p/tests/fixtures/find-the-words.h5p | | Category | CAT1 | contenttype_h5p | admin | categorycontent1.h5p | /h5p/tests/fixtures/ipsums.h5p | | Category | CAT2 | contenttype_h5p | admin | categorycontent2.h5p | /h5p/tests/fixtures/multiple-choice-2-6.h5p | - | System | | contenttype_h5p | admin | systemcontent.h5p | /h5p/tests/fixtures/greeting-card-887.h5p | + | System | | contenttype_h5p | admin | systemcontent.h5p | /h5p/tests/fixtures/greeting-card.h5p | And the following "activities" exist: | activity | name | intro | introformat | course | idnumber | | folder | Folder | FolderDesc | 1 | C1 | folder | diff --git a/repository/contentbank/tests/behat/select_content.feature b/repository/contentbank/tests/behat/select_content.feature index 355f119e3ce..6f1c2767f3f 100644 --- a/repository/contentbank/tests/behat/select_content.feature +++ b/repository/contentbank/tests/behat/select_content.feature @@ -24,7 +24,7 @@ Feature: Select content bank files using the content bank files repository | contextlevel | reference | contenttype | user | contentname | filepath | | Course | mscC1 | contenttype_h5p | admin | filltheblanks.h5p | /h5p/tests/fixtures/filltheblanks.h5p | | Course | mscC2 | contenttype_h5p | admin | find-the-words.h5p | /h5p/tests/fixtures/find-the-words.h5p | - | Course | subcat1C1 | contenttype_h5p | admin | greeting-card-887.h5p | /h5p/tests/fixtures/greeting-card-887.h5p | + | Course | subcat1C1 | contenttype_h5p | admin | greeting-card.h5p | /h5p/tests/fixtures/greeting-card.h5p | | Category | CAT1 | contenttype_h5p | admin | ipsums.h5p | /h5p/tests/fixtures/ipsums.h5p | | Category | SUBCAT1 | contenttype_h5p | admin | multiple-choice-2-6.h5p | /h5p/tests/fixtures/multiple-choice-2-6.h5p | | System | | contenttype_h5p | admin | filltheblanks.h5p | /h5p/tests/fixtures/filltheblanks.h5p | @@ -76,7 +76,7 @@ Feature: Select content bank files using the content bank files repository And I click on "SubCategory1Course1" "folder" in repository content area And I should see "System > Category1 > SubCategory1 > SubCategory1Course1" breadcrumb navigation in repository And I should see "1" elements in repository content area - And I should see "greeting-card-887.h5p" "file" in repository content area + And I should see "greeting-card.h5p" "file" in repository content area Scenario: Admin can select and re-use content bank files using the content bank repository Given I am on the Folder "Folder activity" page logged in as admin