From 830af2b8cdbba1756ccb83d682a0271fa1738a4e Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 9 Oct 2019 18:15:19 +0100 Subject: [PATCH 01/17] test: adds automated tests to browser examples --- .gitignore | 1 + .travis.yml | 72 +++++ examples/README.md | 24 ++ .../browser-add-readable-stream/index.html | 2 +- examples/browser-add-readable-stream/test.js | 11 + examples/browser-browserify/package.json | 13 +- examples/browser-browserify/public/index.html | 6 +- examples/browser-browserify/src/index.js | 13 +- examples/browser-browserify/test.js | 19 ++ .../browser-create-react-app/package.json | 2 +- examples/browser-create-react-app/src/App.js | 4 +- .../src/hooks/use-ipfs-factory.js | 2 +- examples/browser-create-react-app/test.js | 16 ++ examples/browser-mfs/package.json | 2 +- examples/browser-mfs/test.js | 47 +++ examples/browser-parceljs/test.js | 15 + examples/browser-readablestream/test.js | 269 ++++++++++++++++++ examples/browser-script-tag/test.js | 26 ++ examples/browser-video-streaming/test.js | 25 ++ examples/browser-vue/test.js | 16 ++ examples/browser-webpack/package.json | 2 + examples/browser-webpack/server.js | 3 +- examples/browser-webpack/test.js | 18 ++ examples/browser-webpack/webpack.config.js | 11 +- examples/nightwatch.conf.js | 28 ++ examples/package.json | 16 ++ examples/test.js | 158 ++++++++++ 27 files changed, 797 insertions(+), 24 deletions(-) create mode 100644 examples/browser-add-readable-stream/test.js create mode 100644 examples/browser-browserify/test.js create mode 100644 examples/browser-create-react-app/test.js create mode 100644 examples/browser-mfs/test.js create mode 100644 examples/browser-parceljs/test.js create mode 100644 examples/browser-readablestream/test.js create mode 100644 examples/browser-script-tag/test.js create mode 100644 examples/browser-video-streaming/test.js create mode 100644 examples/browser-vue/test.js create mode 100644 examples/browser-webpack/test.js create mode 100644 examples/nightwatch.conf.js create mode 100644 examples/package.json create mode 100644 examples/test.js diff --git a/.gitignore b/.gitignore index d7223c6b87..17751ce051 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ logs *.log # npm pack *.tgz +**/tests_output coverage diff --git a/.travis.yml b/.travis.yml index 0250f38df7..4e111fb1ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -129,6 +129,78 @@ jobs: script: - npm run test:external -- service-worker-gateway https://github.com/ipfs-shipyard/service-worker-gateway.git + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-add-readable-stream + script: + - cd examples + - npm install + - npm run test -- browser-add-readable-stream + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-browserify + script: + - cd examples + - npm install + - npm run test -- browser-browserify + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-create-react-app + script: + - cd examples + - npm install + - npm run test -- browser-create-react-app + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-mfs + script: + - cd examples + - npm install + - npm run test -- browser-mfs + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-parceljs + script: + - cd examples + - npm install + - npm run test -- browser-parceljs + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-readablestream + script: + - cd examples + - npm install + - npm run test -- browser-readablestream + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-script-tag + script: + - cd examples + - npm install + - npm run test -- browser-script-tag + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-vue + script: + - cd examples + - npm install + - npm run test -- browser-vue + + - stage: test + if: branch =~ /^release\/.*$/ + name: examples - browser-webpack + script: + - cd examples + - npm install + - npm run test -- browser-webpack + - stage: tag # only run on changes to master if: branch = master AND type = push AND fork = false diff --git a/examples/README.md b/examples/README.md index 364977886a..ba3af3eae2 100644 --- a/examples/README.md +++ b/examples/README.md @@ -49,3 +49,27 @@ In this section, you will find explanations to different pieces of IPFS Architec - Storing and Retrieving blocks (soon™) - IPLD (InterPlanetary Linked-Data) (soon™) - IPFS Networking - Managing your swarm, libp2p and more (soon™) + +## Adding new examples + +All examples should include a `test.js` file. The implementation will differ depending on if your example is intended to run under node or the browser. + +### Browser `test.js` + +All browser examples should either be a whole webapp or a simple demo. + +#### Webapp + +Webapps must have a `package.json` that contains a `build` script. This script should place all assets in a folder named `dist` including an `index.html` file. During testing this will have a web server run over it using `http-server`. + +#### Simple demo + +Simple demos must have an `index.html` file in the root of the demo folder. This file will be loaded in a browser and tested via a `file://` URL. + +#### Browser `test.js` + +Your `test.js` file should contain a [Nightwatch](https://www.npmjs.com/package/nightwatch) scenario that will be executed. The URL to example will be present in the `IPFS_EXAMPLE_TEST_URL` environmental variable when the test is run. + +### Node + +... diff --git a/examples/browser-add-readable-stream/index.html b/examples/browser-add-readable-stream/index.html index dffc1ceed2..0a8fc03004 100644 --- a/examples/browser-add-readable-stream/index.html +++ b/examples/browser-add-readable-stream/index.html @@ -1,7 +1,7 @@

-    
+    
     
   
 
diff --git a/examples/browser-add-readable-stream/test.js b/examples/browser-add-readable-stream/test.js
new file mode 100644
index 0000000000..3c33a61135
--- /dev/null
+++ b/examples/browser-add-readable-stream/test.js
@@ -0,0 +1,11 @@
+'use strict'
+
+module.exports = {
+  'Add readable stream example': function (browser) {
+    browser
+      .url(process.env.IPFS_EXAMPLE_TEST_URL)
+      .waitForElementVisible('#output')
+      .assert.containsText('#output', 'directory/ QmVgJePRxp1vhRxDcJWdmuFGfUB5S5RYTtG1NR3bQM4BBn')
+      .end()
+  }
+}
\ No newline at end of file
diff --git a/examples/browser-browserify/package.json b/examples/browser-browserify/package.json
index c534b6030b..cd72814280 100644
--- a/examples/browser-browserify/package.json
+++ b/examples/browser-browserify/package.json
@@ -4,17 +4,20 @@
   "description": "Bundle js-ipfs with Browserify",
   "main": "index.js",
   "scripts": {
-    "bundle": "browserify src/index.js > public/bundle.js",
+    "build": "browserify src/index.js > public/bundle.js",
     "serve": "http-server public -a 127.0.0.1 -p 8888",
-    "start": "npm run bundle && npm run serve"
+    "start": "npm run build && npm run serve"
   },
   "keywords": [],
   "license": "MIT",
   "devDependencies": {
-    "ipfs": "file:../../",
     "browserify": "^16.2.3",
     "concat-stream": "^2.0.0",
-    "http-server": "~0.11.1"
+    "http-server": "~0.11.1",
+    "ipfs": "file:../../"
   },
-  "dependencies": {}
+  "dependencies": {},
+  "browser": {
+    "ipfs": "ipfs/dist"
+  }
 }
diff --git a/examples/browser-browserify/public/index.html b/examples/browser-browserify/public/index.html
index a2ea58def4..041385a09d 100644
--- a/examples/browser-browserify/public/index.html
+++ b/examples/browser-browserify/public/index.html
@@ -14,9 +14,9 @@
   
   
     

JS IPFS - Add data to IPFS from the browser

- - -
+ + +