From 62b314dc91cba924a66ba9f11bb6e6240899fa23 Mon Sep 17 00:00:00 2001 From: amrita Date: Tue, 19 Nov 2024 20:49:42 +0545 Subject: [PATCH] add test for template --- .../bootstrap/CollaborationContext.php | 75 ++++++++++++++++++ tests/acceptance/bootstrap/SpacesContext.php | 1 - .../apiCollaboration/checkFileInfo.feature | 16 ++++ .../features/apiCollaboration/wopi.feature | 48 +++++++++++ tests/acceptance/filesForUpload/template.xltx | Bin 0 -> 30085 bytes 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 tests/acceptance/filesForUpload/template.xltx diff --git a/tests/acceptance/bootstrap/CollaborationContext.php b/tests/acceptance/bootstrap/CollaborationContext.php index 006430d206..026a3df94c 100644 --- a/tests/acceptance/bootstrap/CollaborationContext.php +++ b/tests/acceptance/bootstrap/CollaborationContext.php @@ -355,4 +355,79 @@ class CollaborationContext implements Context { } } } + + /** + * @Then the app list response should contain the following information: + * + * @param TableNode $table + * + * @return void + * @throws Exception + */ + public function theAppListResponseShouldContainTheFollowingInformation(TableNode $table): void { + $responseArray = $this->featureContext->getJsonDecodedResponse($this->featureContext->getResponse()); + + if (!isset($responseArray['mime-types'])) { + throw new Exception(__METHOD__ . "The response does not contain a 'mime-types' key."); + } + + $mimeTypes = $responseArray['mime-types']; + + $mimeTypeMap = []; + foreach ($mimeTypes as $mimeType) { + $mimeTypeMap[$mimeType['mime_type']] = $mimeType; + } + + foreach ($table->getColumnsHash() as $row) { + if (!isset($mimeTypeMap[$row['mimeType']])) { + throw new Exception("Mime type '{$row['mimeType']}' not found in the response."); + } + + $mimeType = $mimeTypeMap[$row['mimeType']]; + foreach ($mimeType['app_providers'] as $provider) { + if ($provider['name'] === 'OnlyOffice' && $row['onlyOffice']) { + Assert::assertSame( + $row['onlyOffice'], + $provider['target_ext'], + "Expected target_ext for OnlyOffice in mimeType '{$row['onlyOffice']} but found '{$provider['target_ext']}" + ); + } + if ($provider['name'] === 'Collabora' && $row['collabora']) { + Assert::assertSame( + $row['collabora'], + $provider['target_ext'], + "Expected target_ext for Collabora in mimeType '{$row['collabora']} but found '{$provider['target_ext']}" + ); + } + } + } + } + + /** + * @When user :user has created a file :file in space :space using wopi endpoint + * + * @param string $user + * @param string $file + * @param string $space + * + * @return string + * @throws GuzzleException + */ + public function userHasCreatedAFileInSpaceUsingWopiEndpoint(string $user, string $file, string $space):string { + $spaceId = $this->spacesContext->getSpaceIdByName($user, $space); + $splitSpaceId = explode('$', $spaceId); + $parentContainerId = $splitSpaceId[0] . '$' . $splitSpaceId[1] . '!' . $splitSpaceId[1]; + $response = CollaborationHelper::createFile( + $this->featureContext->getBaseUrl(), + $this->featureContext->getStepLineRef(), + $user, + $this->featureContext->getPasswordForUser($user), + $parentContainerId, + $file + ); + $this->featureContext->theHTTPStatusCodeShouldBe(200, "", $response); + $decodedResponse = json_decode($response->getBody()->getContents(), true); + return $decodedResponse['file_id']; + } + } diff --git a/tests/acceptance/bootstrap/SpacesContext.php b/tests/acceptance/bootstrap/SpacesContext.php index 0695f0c235..f83cd73be2 100644 --- a/tests/acceptance/bootstrap/SpacesContext.php +++ b/tests/acceptance/bootstrap/SpacesContext.php @@ -1971,7 +1971,6 @@ class SpacesContext implements Context { string $fileName, string $spaceName ):void { - $this->getSpaceIdByName($user, $spaceName); $response = $this->featureContext->downloadFileAsUserUsingPassword($user, $fileName, $this->featureContext->getPasswordForUser($user)); Assert::assertGreaterThanOrEqual( 400, diff --git a/tests/acceptance/features/apiCollaboration/checkFileInfo.feature b/tests/acceptance/features/apiCollaboration/checkFileInfo.feature index 477b63c5af..add49e22c0 100644 --- a/tests/acceptance/features/apiCollaboration/checkFileInfo.feature +++ b/tests/acceptance/features/apiCollaboration/checkFileInfo.feature @@ -1862,3 +1862,19 @@ Feature: check file info with different wopi apps Then the HTTP status code should be "200" And the response should not contain the following MIME types: | application/octet-stream | + + + Scenario: check that '/app/list' contain WebOffice template + When user "Alice" sends HTTP method "GET" to URL "/app/list" + Then the HTTP status code should be "200" + And the app list response should contain the following information: + | mimeType | onlyOffice | collabora | + | application/vnd.ms-powerpoint.template.macroenabled.12 | pptx | | + | application/vnd.oasis.opendocument.presentation-template | pptx | odp | + | application/vnd.openxmlformats-officedocument.spreadsheetml.template | xlsx | | + | application/vnd.oasis.opendocument.spreadsheet-template | xlsx | ods | + | application/vnd.openxmlformats-officedocument.presentationml.template | pptx | | + | application/vnd.openxmlformats-officedocument.wordprocessingml.template | docx | | + | application/vnd.ms-word.template.macroenabled.12 | docx | | + | application/vnd.oasis.opendocument.text-template | docx | odt | + | application/vnd.ms-excel.template.macroenabled.12 | xlsx | | diff --git a/tests/acceptance/features/apiCollaboration/wopi.feature b/tests/acceptance/features/apiCollaboration/wopi.feature index 741e003a5a..8cd4e39aa7 100644 --- a/tests/acceptance/features/apiCollaboration/wopi.feature +++ b/tests/acceptance/features/apiCollaboration/wopi.feature @@ -1080,3 +1080,51 @@ Feature: collaboration (wopi) """ And for user "Alice" folder "testFolder" of the space "new-space" should not contain these files: | simple.odt | + + + Scenario Outline: open file with .potx extension and template + Given user "Alice" has uploaded file "filesForUpload/template.xltx" to "template.xltx" + And we save it into "TEMPLATEID" + And user "Alice" has created a file "template.pptx" in space "Personal" using wopi endpoint + And we save it into "FILEID" + When user "Alice" sends HTTP method "POST" to URL "" + Then the HTTP status code should be "200" + And the JSON data of the response should match + """ + { + "type": "object", + "required": [ + "app_url", + "method", + "form_parameters" + ], + "properties": { + "app_url": { + "type": "string", + "pattern": "^.*\\?WOPISrc=.*wopi%2Ffiles%2F[a-fA-F0-9]{64}$" + }, + "method": { + "const": "POST" + }, + "form_parameters": { + "type": "object", + "required": [ + "access_token", + "access_token_ttl" + ], + "properties": { + "access_token": { + "type": "string" + }, + "access_token_ttl": { + "type": "string" + } + } + } + } + } + """ + Examples: + | app-endpoint | + | /app/open?file_id=<>&app_name=Collabora&view_mode=write&template_id=<> | + | /app/open?file_id=<>&app_name=OnlyOffice&view_mode=write&template_id=<> | diff --git a/tests/acceptance/filesForUpload/template.xltx b/tests/acceptance/filesForUpload/template.xltx new file mode 100644 index 0000000000000000000000000000000000000000..11611d37e733cc6081a84361fcb0b9470907a679 GIT binary patch literal 30085 zcmeFYV|1=fmo6GRS+Q-~ww0Mc$N*pf5C8xG1OVAG&)!Y7ZJ64vHj2t0MyIycwc6 ztZgqzFUL)!^TikLg#bvkZwD(G814#a0115fvWPl=qZod%u)! z-geH83rZRNm-PaN%T^3f*&14GNq?+`we6bal;jgc`pOTTw&1Co$zsZiqisTf|WJIT#xF3@_>Gn{{_y zTHrlJj>kt0ox&l0fDCUQ42_k?sE1VeH#MR{ z+lk>Ue@TGfIEkrOe<&&FO`%UWHl>2QbO7@Vuk#Cf%XP-31VX!ody9t3UN1<-y=8p5 zZvkiRkfb^u8e@cHKY}(ETzxA2?zqbPwMz0EMa_BbdWreEkZ(JCtV6>T>N2)r?wZy8 zm*B*Qr7wW>4SjrXf4IHX8c%+nFV3r_+g1lI4$JlECom*4{Kyr(*xMvsA1I;LW(!zT zeO$v1Z65Yw^B{Ygy9qVPkqe2wYsYk#02WUK+Tv@^NSEx@yTO{Y`GR(vt20Jvr`U+` z3AU;4H!ggA0RzbYFNo2HJ#E17-D3|7008}s7`hI|R*rPEe?9*%Qv45whyP%D<@}^1 zFatcmcE>hX(0a#eHD8$1S|kK0X#6X{ypanV^Joz9;^T!(g$UXy<%(g#=zazUW14lP zehqp)sp_4*f0L6HX)WtcM`%vLEq*+vnb8cPM#gNq}2kqq_fJZDa$Q2WzBvj<*&Dy9MC`HsC zs8Htkqd39Oxy${^Y@tB0$xk(_|AhQHnqJXY`5YE1l&%1s*?Y~A?v@OIs-FJk!fC2zu z0zd$|S<(F?$Xsn5EDdaJE&pQWe+xLkZ)*M?`#-yNCdpX#)5C;Z1%8BXzwHulwEsxI zuVpxPKGRd(BM�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 NG&}@^t?jQ*{|5x}quKxf literal 0 HcmV?d00001