aboutsummaryrefslogtreecommitdiffstats
path: root/build/integration/features/bootstrap/TalkContext.php
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2020-05-28 20:53:36 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2020-05-29 02:50:30 +0200
commitb192c04dc22e54e4fab7a70331ec605068b4a4e4 (patch)
tree4dc6c473b1c2ffc52d3576e40735e8489a45ef77 /build/integration/features/bootstrap/TalkContext.php
parenta2f80d4f4c7e451f698ee3312500f48067aaa5e3 (diff)
downloadnextcloud-server-b192c04dc22e54e4fab7a70331ec605068b4a4e4.tar.gz
nextcloud-server-b192c04dc22e54e4fab7a70331ec605068b4a4e4.zip
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>
Diffstat (limited to 'build/integration/features/bootstrap/TalkContext.php')
-rw-r--r--build/integration/features/bootstrap/TalkContext.php72
1 files changed, 72 insertions, 0 deletions
diff --git a/build/integration/features/bootstrap/TalkContext.php b/build/integration/features/bootstrap/TalkContext.php
new file mode 100644
index 00000000000..bc61c87ebab
--- /dev/null
+++ b/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;
+ }
+}