Browse Source

Add integration tests for video verification

Enabling the "send password by Talk" property of shares require that
Talk is installed and enabled, so the Drone step that runs them has to
first clone the Talk repository.

When the integration tests are run on a local development instance,
however, it is not guaranteed that Talk is installed. Due to this the
"@Talk" tag was added, which ensures that any feature or scenario marked
with it will first check if Talk is installed and, if not, skip the
scenario (instead of failing).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez 3 years ago
parent
commit
b192c04dc2

+ 31 - 0
.drone.yml

@@ -1359,6 +1359,37 @@ trigger:
     - pull_request
     - push
 
+---
+kind: pipeline
+name: integration-sharing-v1-video-verification
+
+steps:
+- name: submodules
+  image: docker:git
+  commands:
+    - git submodule update --init
+- name: install-talk
+  image: docker:git
+  commands:
+    # JavaScript files are not used in integration tests so it is not needed to
+    # build them.
+    - git clone https://github.com/nextcloud/spreed apps/spreed
+- name: integration-sharing-v1-video-verification
+  image: nextcloudci/integration-php7.3:integration-php7.3-2
+  commands:
+    - bash tests/drone-run-integration-tests.sh || exit 0
+    - ./occ maintenance:install --admin-pass=admin --data-dir=/dev/shm/nc_int
+    - cd build/integration
+    - ./run.sh sharing_features/sharing-v1-video-verification.feature
+
+trigger:
+  branch:
+    - master
+    - stable*
+  event:
+    - pull_request
+    - push
+
 ---
 kind: pipeline
 name: integration-setup-features

+ 1 - 0
build/integration/config/behat.yml

@@ -65,6 +65,7 @@ default:
               - admin
               - admin
             regular_user_password: 123456
+        - TalkContext
     setup:
       paths:
         - "%paths.base%/../setup_features"

+ 72 - 0
build/integration/features/bootstrap/TalkContext.php

@@ -0,0 +1,72 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020, Daniel Calviño Sánchez (danxuliu@gmail.com)
+ *
+ * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+use Behat\Behat\Context\Context;
+
+class TalkContext implements Context {
+
+	/**
+	 * @BeforeFeature @Talk
+	 * @BeforeScenario @Talk
+	 */
+	public static function skipTestsIfTalkIsNotInstalled() {
+		if (!TalkContext::isTalkInstalled()) {
+			throw new Exception('Talk needs to be installed to run features or scenarios tagged with @Talk');
+		}
+	}
+
+	/**
+	 * @AfterScenario @Talk
+	 */
+	public static function disableTalk() {
+		TalkContext::runOcc(['app:disable', 'spreed']);
+	}
+
+	private static function isTalkInstalled(): bool {
+		$appList = TalkContext::runOcc(['app:list']);
+
+		return strpos($appList, 'spreed') !== false;
+	}
+
+	private static function runOcc(array $args): string {
+		// Based on "runOcc" from CommandLine trait (which can not be used due
+		// to not being static and being already used in other sibling
+		// contexts).
+		$args = array_map(function ($arg) {
+			return escapeshellarg($arg);
+		}, $args);
+		$args[] = '--no-ansi --no-warnings';
+		$args = implode(' ', $args);
+
+		$descriptor = [
+			0 => ['pipe', 'r'],
+			1 => ['pipe', 'w'],
+			2 => ['pipe', 'w'],
+		];
+		$process = proc_open('php console.php ' . $args, $descriptor, $pipes, $ocPath = '../..');
+		$lastStdOut = stream_get_contents($pipes[1]);
+		proc_close($process);
+
+		return $lastStdOut;
+	}
+}

+ 504 - 0
build/integration/sharing_features/sharing-v1-video-verification.feature

@@ -0,0 +1,504 @@
+@Talk
+Feature: sharing
+  Background:
+    Given using api version "1"
+    Given using old dav path
+    Given invoking occ with "app:enable spreed"
+
+  Scenario: Creating a link share with send password by Talk
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with different password in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with different password set after creation in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with same password in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with same password set after creation in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk without updating password in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk without updating password set after creation in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with no password in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share can be downloaded
+
+  Scenario: Enabling send password by Talk with no password removed after creation in a link share
+    Given user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+    And Updating last share with
+      | password | |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share can be downloaded
+
+  Scenario: Disabling send password by Talk without setting new password in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk without setting new password set after creation in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting same password in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting same password set after creation in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting new password in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting new password set after creation in a link share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 3 |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+
+
+
+
+  Scenario: Creating a mail share with send password by Talk
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with different password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with different password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with same password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with same password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk without updating password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk without updating password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Enabling send password by Talk with no password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share can be downloaded
+
+  Scenario: Enabling send password by Talk with no password removed after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+    And Updating last share with
+      | password | |
+    And Updating last share with
+      | sendPasswordByTalk | true |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share can be downloaded
+
+  Scenario: Disabling send password by Talk without setting new password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk without setting new password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting same password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting same password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "400"
+    And the HTTP status code should be "200"
+    And last share with password "secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting new password in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded
+
+  Scenario: Disabling send password by Talk setting new password set after creation in a mail share
+    Given dummy mail server is listening
+    And user "user0" exists
+    And As an "user0"
+    When creating a share with
+      | path | welcome.txt |
+      | shareType | 4 |
+      | shareWith | dummy@test.com |
+    And Updating last share with
+      | password | secret |
+      | sendPasswordByTalk | true |
+    And Updating last share with
+      | password | another secret |
+      | sendPasswordByTalk | false |
+    Then the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    And last share with password "another secret" can be downloaded