From 76deb06448b1a8da4701231c885702e2f1412f4b Mon Sep 17 00:00:00 2001
From: Yuriy Maksymets <iurii.maksymets@gmail.com>
Date: Mon, 14 Oct 2019 14:54:36 +0100
Subject: [PATCH] Basic working e2e test

---
 __tests__/e2e/peer1.test.js |  23 ++++++++
 __tests__/e2e/peer2.test.js |  16 ++++++
 package-lock.json           | 112 +++++++++++++-----------------------
 package.json                |   2 +
 peer.test.js                |  11 ----
 serverIntegration.test.js   |  11 ----
 serverTest.js               |  34 -----------
 src/y-webrtc/index.js       |   2 +-
 8 files changed, 83 insertions(+), 128 deletions(-)
 create mode 100644 __tests__/e2e/peer1.test.js
 create mode 100644 __tests__/e2e/peer2.test.js
 delete mode 100644 peer.test.js
 delete mode 100644 serverIntegration.test.js
 delete mode 100644 serverTest.js

diff --git a/__tests__/e2e/peer1.test.js b/__tests__/e2e/peer1.test.js
new file mode 100644
index 0000000..18fc9d1
--- /dev/null
+++ b/__tests__/e2e/peer1.test.js
@@ -0,0 +1,23 @@
+import { Selector } from "testcafe"
+
+fixture`Peer 1`.page`localhost:3000`
+
+const idAppearTimeout = 1000
+const selectorOptions = { timeout: 100 }
+
+test("Connection id appears", async (t) => {
+  const userId = async () =>
+    await Selector("#user-id").with(selectorOptions).value
+  await t
+    .wait(idAppearTimeout)
+    .expect((await userId()).length)
+    .gt(0)
+})
+
+test("Clicking and dragging on whiteboard creates a single child element", async (t) => {
+  const whiteboard = Selector("#whiteboard").with(selectorOptions)
+  await t
+    .drag(whiteboard, 10, 10)
+    .expect(whiteboard.childElementCount)
+    .eql(1)
+})
diff --git a/__tests__/e2e/peer2.test.js b/__tests__/e2e/peer2.test.js
new file mode 100644
index 0000000..01e143e
--- /dev/null
+++ b/__tests__/e2e/peer2.test.js
@@ -0,0 +1,16 @@
+import { Selector } from "testcafe"
+
+fixture`Peer 2`.page`localhost:3000`
+
+const selectorOptions = { timeout: 100 }
+
+test("Connection id appears", async (t) => {
+  const userID = Selector("#user-id").with(selectorOptions)
+  let inputValue = await userID.value
+  await t.expect(inputValue.length).gt(0)
+})
+
+test("Whiteboard eventually gets a child element", async (t) => {
+  const whiteboard = Selector("#whiteboard").with(selectorOptions)
+  await t.expect(whiteboard.childElementCount).eql(1, { timeout: 10000 })
+})
diff --git a/package-lock.json b/package-lock.json
index ab81c19..79fd665 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -981,6 +981,12 @@
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
       "dev": true
     },
+    "ansi-escapes": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
+      "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
+      "dev": true
+    },
     "ansi-regex": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -1165,6 +1171,12 @@
       "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
       "dev": true
     },
+    "async": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmjs.org/async/-/async-0.2.6.tgz",
+      "integrity": "sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg=",
+      "dev": true
+    },
     "async-each": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
@@ -1257,27 +1269,12 @@
         "source-map": "^0.5.7"
       },
       "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
         "json5": {
           "version": "0.5.1",
           "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "slash": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
@@ -2089,14 +2086,6 @@
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-          "dev": true
-        }
       }
     },
     "babel-template": {
@@ -2129,26 +2118,11 @@
         "lodash": "^4.17.4"
       },
       "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
         "globals": {
           "version": "9.18.0",
           "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
           "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
           "dev": true
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
         }
       }
     },
@@ -3062,9 +3036,9 @@
       "dev": true
     },
     "core-js": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
-      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+      "version": "2.6.10",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
+      "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==",
       "dev": true
     },
     "core-util-is": {
@@ -3248,6 +3222,23 @@
       "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
       "dev": true
     },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      },
+      "dependencies": {
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        }
+      }
+    },
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -3493,9 +3484,9 @@
       "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
     },
     "electron-to-chromium": {
-      "version": "1.3.280",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.280.tgz",
-      "integrity": "sha512-qYWNMjKLEfQAWZF2Sarvo+ahigu0EArnpCFSoUuZJS3W5wIeVfeEvsgmT2mgIrieQkeQ0+xFmykK3nx2ezekPQ==",
+      "version": "1.3.282",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.282.tgz",
+      "integrity": "sha512-irSaDeCGgfMu1OA30bhqIBr+dx+pDJjRbwCpob7YWqVZbzXblybNzPGklVnWqv4EXxbkEAzQYqiNCqNTgu00lQ==",
       "dev": true
     },
     "elegant-spinner": {
@@ -7319,12 +7310,6 @@
         "wrap-ansi": "^2.1.0"
       },
       "dependencies": {
-        "ansi-escapes": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz",
-          "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=",
-          "dev": true
-        },
         "is-fullwidth-code-point": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@@ -8649,6 +8634,12 @@
       "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
       "dev": true
     },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+      "dev": true
+    },
     "regenerator-transform": {
       "version": "0.10.1",
       "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
@@ -9948,15 +9939,6 @@
           "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
           "dev": true
         },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
         "is-ci": {
           "version": "1.2.1",
           "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
@@ -9998,12 +9980,6 @@
             }
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
         "parse5": {
           "version": "1.5.1",
           "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
@@ -10221,12 +10197,6 @@
         "strip-bom": "^2.0.0"
       },
       "dependencies": {
-        "async": {
-          "version": "0.2.6",
-          "resolved": "https://registry.npmjs.org/async/-/async-0.2.6.tgz",
-          "integrity": "sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg=",
-          "dev": true
-        },
         "babel-runtime": {
           "version": "5.8.38",
           "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.38.tgz",
diff --git a/package.json b/package.json
index 4381dc0..2039d13 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,8 @@
     "test": "jest --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy",
     "test-changed": "jest --only-changed --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy",
     "test-coverage": "jest --coverage --testPathIgnorePatterns src/liowebrtc src/rtcpeerconnection src/signalbuddy",
+    "test-e2e": "npx testcafe all serverIntegration.test.js & npx testcafe all peer.test.js",
+    "test-e2e:chrome": "npx testcafe chrome serverIntegration.test.js & npx testcafe chrome peer.test.js",
     "lint": "jshint .",
     "validate": "npm ls"
   },
diff --git a/peer.test.js b/peer.test.js
deleted file mode 100644
index 422bcf8..0000000
--- a/peer.test.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Selector } from "testcafe"
-
-fixture`Peer 2`.page`localhost:12345`
-
-const selectorOptions = { timeout: 100 }
-
-test("Connection id appears", async (t) => {
-  const articleHeader = Selector("#user-id").with(selectorOptions)
-  let inputValue = await articleHeader.value
-  await t.expect(inputValue.length).gt(0)
-})
diff --git a/serverIntegration.test.js b/serverIntegration.test.js
deleted file mode 100644
index 30c25e2..0000000
--- a/serverIntegration.test.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Selector } from "testcafe"
-
-fixture`Peer 1`.page`localhost:12345`
-
-const selectorOptions = { timeout: 100 }
-
-test("Connection id appears", async (t) => {
-  const articleHeader = Selector("#user-id").with(selectorOptions)
-  let inputValue = await articleHeader.value
-  await t.expect(inputValue.length).gt(0)
-})
diff --git a/serverTest.js b/serverTest.js
deleted file mode 100644
index e1ac522..0000000
--- a/serverTest.js
+++ /dev/null
@@ -1,34 +0,0 @@
-const createTestCafe = require("testcafe")
-let runner = null
-let runner2 = null
-
-createTestCafe("localhost", 1337, 1338)
-  .then((testcafe) => {
-    runner = testcafe.createRunner()
-    runner2 = testcafe.createRunner()
-    return testcafe.createBrowserConnection()
-  })
-  .then((_) => {
-    runner
-      .src("serverTest.js")
-      .browsers(["chrome"])
-      .reporter("json")
-      .run()
-      .then((failedCount) => {
-        console.log("failed count 1: " + failedCount)
-        runner2
-          .src("peer.test.js")
-          .browsers(["chrome"])
-          .reporter("json")
-          .run()
-          .then((failedCount) => {
-            console.log("failed count 2: " + failedCount)
-          })
-          .catch((error) => {
-            console.log("error" + error)
-          })
-      })
-      .catch((error) => {
-        console.log("error" + error)
-      })
-  })
diff --git a/src/y-webrtc/index.js b/src/y-webrtc/index.js
index 0a489a1..dab556d 100644
--- a/src/y-webrtc/index.js
+++ b/src/y-webrtc/index.js
@@ -18,7 +18,7 @@ function extend(Y) {
     }
 
     initialiseConnection() {
-      const webrtc = new LioWebRTC("12345", {
+      const webrtc = new LioWebRTC({
         url: this.webrtcOptions.url,
         dataOnly: true,
         /*network: {
-- 
GitLab