From 8c33a0a83f5ef7f158e10adf03e067dc48b9fc61 Mon Sep 17 00:00:00 2001 From: Salipa-Gurung Date: Thu, 13 Jun 2024 10:58:40 +0545 Subject: [PATCH] add test coverage for audio, location, image and photo props add audio test file add test file with location, image and photo metadata --- tests/acceptance/config/behat.yml | 1 + .../propfindExtractedProps.feature | 42 ++++++++++++++++++ .../features/bootstrap/SpacesContext.php | 26 +++++++++++ tests/acceptance/filesForUpload/testaudio.mp3 | Bin 0 -> 6144 bytes .../acceptance/filesForUpload/testavatar.jpg | Bin 53092 -> 63842 bytes 5 files changed, 69 insertions(+) create mode 100644 tests/acceptance/features/apiSearchContent/propfindExtractedProps.feature create mode 100644 tests/acceptance/filesForUpload/testaudio.mp3 diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index 5add91e69ac..a7be3067add 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -294,6 +294,7 @@ default: - TUSContext: - OcisConfigContext: - SharingNgContext: + - WebDavPropertiesContext: apiReshare: paths: diff --git a/tests/acceptance/features/apiSearchContent/propfindExtractedProps.feature b/tests/acceptance/features/apiSearchContent/propfindExtractedProps.feature new file mode 100644 index 00000000000..119103dbf68 --- /dev/null +++ b/tests/acceptance/features/apiSearchContent/propfindExtractedProps.feature @@ -0,0 +1,42 @@ +@tikaServiceNeeded +Feature: propfind extracted props + As a user + I want to get extracted properties of resource + So that I can make sure that the response contains audio, location, image and photo properties + + + Scenario: check extracted properties of a file from project space + Given user "Alice" has been created with default attributes and without skeleton files + And using spaces DAV path + And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API + And user "Alice" has created a space "new-space" with the default quota using the Graph API + And user "Alice" has uploaded a file "filesForUpload/testaudio.mp3" to "testaudio.mp3" in space "new-space" + And user "Alice" has uploaded a file "filesForUpload/testavatar.jpg" to "testavatar.jpg" in space "new-space" + When user "Alice" gets the following extracted properties of resource "testaudio.mp3" inside space "new-space" using the WebDAV API + | propertyName | + | oc:audio | + Then the HTTP status code should be "207" + And the "PROPFIND" response should contain a space "new-space" with these key and value pairs: + | key | value | + | oc:audio/oc:album | ALBUM1234567890123456789012345 | + | oc:audio/oc:artist | ARTIST123456789012345678901234 | + | oc:audio/oc:genre | Pop | + | oc:audio/oc:title | TITLE1234567890123456789012345 | + | oc:audio/oc:track | 1 | + | oc:audio/oc:year | 2001 | + When user "Alice" gets the following extracted properties of resource "testavatar.jpg" inside space "new-space" using the WebDAV API + | propertyName | + | oc:image | + | oc:location | + | oc:photo | + Then the HTTP status code should be "207" + And the "PROPFIND" response should contain a space "new-space" with these key and value pairs: + | key | value | + | oc:image/oc:width | 640 | + | oc:image/oc:height | 480 | + | oc:location/oc:latitude | 43.467157 | + | oc:location/oc:longitude | 11.885395 | + | oc:photo/oc:camera-make | NIKON | + | oc:photo/oc:camera-model | COOLPIX P6000 | + | oc:photo/oc:f-number | 4.5 | + | oc:photo/oc:focal-length | 6 | diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php index 2f690673dae..e139c05a934 100644 --- a/tests/acceptance/features/bootstrap/SpacesContext.php +++ b/tests/acceptance/features/bootstrap/SpacesContext.php @@ -3510,6 +3510,32 @@ public function userGetsTheFollowingPropertiesOfFileInsideSpaceUsingTheWebdavApi $this->featureContext->setResponse($response); } + /** + * @When /^user "([^"]*)" gets the following extracted properties of (?:file|folder|entry|resource) "([^"]*)" inside space "([^"]*)" using the WebDAV API$/ + * + * @param string $user + * @param string $resourceName + * @param string $spaceName + * @param TableNode|null $propertiesTable + * + * @return void + * + * @throws Exception|GuzzleException + */ + public function userGetsTheFollowingExtractedPropertiesOfFileInsideSpaceUsingTheWebdavApi( + string $user, + string $resourceName, + string $spaceName, + TableNode $propertiesTable + ):void { + // NOTE: extracting properties occurs asynchronously + // short wait is necessary before getting those properties + sleep(2); + $this->setSpaceIDByName($user, $spaceName); + $response = $this->webDavPropertiesContext->getPropertiesOfFolder($user, $resourceName, $propertiesTable); + $this->featureContext->setResponse($response); + } + /** * @Then /^as user "([^"]*)" (?:file|folder|entry|resource) "([^"]*)" inside space "([^"]*)" should contain a property "([^"]*)" with value "([^"]*)"$/ * diff --git a/tests/acceptance/filesForUpload/testaudio.mp3 b/tests/acceptance/filesForUpload/testaudio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d2eea3cc4e529afd33be3dbe05e665d418840d5c GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/tests/acceptance/filesForUpload/testavatar.jpg b/tests/acceptance/filesForUpload/testavatar.jpg index fb9e54042cb1605da599a957e6527271a54cc0c7..eae213b8272032d8cf4427bc651340822ccd6790 100644 GIT binary patch delta 10269 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 w$=!=3q@4S6MrR_5-@aqe7K>Mc6rSc;u