@tashop/oil.js
Version:
oil.js Opt-In Layer for consent management based on the IAB TCF Standard
192 lines (117 loc) • 7.5 kB
Markdown
# Contributing to oil.js
Feel free to fork this project and [open pull requests](#submitting-a-pull-request) to the master branch. We do not accept pull requests to the source files without accompanying tests.
Bug reports are welcome through the issues tab of the project.
## Installation / Build
### Setting up development environment
To begin with, fork the library and install dependencies. You need
[git](http://git-scm.com/) and
[node](http://nodejs.org/); you might use
[nvm](https://github.com/creationix/nvm) or
[nenv](https://github.com/ryuone/nenv) to install node.
Run these commands in order to create a local copy of the project:
git clone https://github.com/as-ideas/oil.git
cd oil
npm install
After `install` there is a post install step which automatically runs build.
## Basic Usage
Start the app with this command:
npm start
You will now be able to view a local test server at `http://localhost:8080/`. The html files from `src/demos` are now accessible through `http://localhost:8080/demos/direct-integration.html`.
For development you want to run a local webpack-dev-server at `http://localhost:3000/` with webpack auto-watching for changes to the source files:
npm run watch
This test server serves the html files from `src/demos` under the path `webpack-dev-server`. So if for instance you are going for a change in the small-design.html you want to open the URL `http://localhost:3000/webpack-dev-server/demos/small-design.html`
See the [full list of available npm scripts here](#npm-scripts)
### window.AS_OIL
A successfully integrated oil.js puts an object into your window named `AS_OIL` which provides a range of methods you can call to mimic user behaviour. It also stores the configuration and the locale object.
```javascript
// current configuration
window.AS_OIL.CONFIG;
// current locale configuration
window.AS_OIL.CONFIG.locale;
// functions
window.AS_OIL.status()
window.AS_OIL.triggerOptIn()
window.AS_OIL.triggerSoiOptIn()
window.AS_OIL.triggerPoiOptIn()
window.AS_OIL.triggerOptOut()
window.AS_OIL.getVendorConsents()
window.AS_OIL.getPublisherConsents()
window.AS_OIL.getConsentData()
window.AS_OIL.getVendorList()
window.AS_OIL.applyGDPR()
```
### Dev-Kit
On some demo pages there's a little oil rig icon in the top right corner. Clicking it opens a menu where you can check the return values from the Oil instance as well as more options where you can opt-in, opt-out etc.
You can also run commands on the window.AS_OIL_DEV_KIT object, like:
```javascript
window.AS_OIL_DEV_KIT.status()
window.AS_OIL_DEV_KIT.triggerOptIn()
window.AS_OIL_DEV_KIT.triggerSoiOptIn()
window.AS_OIL_DEV_KIT.triggerPoiOptIn()
window.AS_OIL_DEV_KIT.triggerOptOut()
window.AS_OIL_DEV_KIT.getVendorConsents()
window.AS_OIL_DEV_KIT.getPublisherConsents()
window.AS_OIL_DEV_KIT.getConsentData()
window.AS_OIL_DEV_KIT.getVendorList()
```
## Tests
Running unit tests:
npm test
There are two kinds of unit tests: For the oil.js itself (`npm run test:unit`) and for the node server delivering all files (`npm run test:node`).
npm run test:unit
npm run test:node
#### E2E Tests
For local tests utilising Selenium Webdriver add the following DNS entries into your `/etc/hosts` file:
127.0.0.1 oilsite1
127.0.0.1 oilsite2
127.0.0.1 oilcdn
If you made changes to your files, run `npm run build`. Then start the app in one terminal window with:
npm start
and then in another terminal:
npm run e2e
If you want to run only one test, in this example only tests from the file `test/e2e/direct_integration_test.js`, do this:
./node_modules/.bin/nightwatch -c etc/nightwatch.local.conf.js -e chrome --test test/e2e/direct_integration_test.js
You can also run your local e2e tests with different browsers using [Browserstack](#browserstack-integration).
### NPM scripts
| Script | Description |
| ------ | ----------- |
| build | generate a complete build in `dist` folder |
| build:docs | compile documentation files into `dist/docs` folder |
| build:watch | start webpack-dev-server on `http://localhost:8080/` where files from the `dist` server are served and hotload on file change |
| watch | start webpack-dev-server on `http://localhost:3000/` and hotload on file change |
| eslint | Do the linting thing |
| browserstack | Run e2e tests with selected browser's against test installation at `https://oil-integration-host1.herokuapp.com`. For profiles used see file `etc/runBrowserstackSeq.sh` |
| browserstack:full | Run e2e tests with selected browser's against test installation at `https://oil-integration-host1.herokuapp.com`. For profiles used see file `etc/runFullBrowserstackSeq.sh` |
| browserstack:remote-localhost | Run e2e tests with selected browser's against your localhost. [See details on this here](#browserstack-dev-tests) |
| e2e | Run E2E tests with Chrome Headless browser. Remember to run a webserver with `npm start` in another terminal window before starting this. |
| e2esafari | Run E2E tests with Safari. Remember to run a webserver with `npm start` in another terminal window before starting this. |
| test:unit | Run the unit tests |
| test:node | Run the server tests |
| test:selenium | Run the E2E tests against the integration CDN |
| test:watch | Run the tests and re-run on file update |
For an exhausting list just do `npm run`.
### Browserstack integration
#### Browserstack build tests
You can run all E2E tests with different setups using Browserstack. Tests use our remote server at `https://oil-integration-host1.herokuapp.com` where the latest release is deployed to.
To run tests in batch there are two commands, the first one covering a limited but most relevant selection of browsers.
npm run browserstack
npm run browserstack:full
*Both commands require you to have your Browserstack credentials ready.* You can find them [here](https://www.browserstack.com/accounts/settings).
To test with only a specific browser, do this:
ENV_USER=your-browserstack-user ENV_KEY=your-browserstack-key ./node_modules/.bin/nightwatch -c etc/nightwatch.remote.conf.js -e ff52
The `-e` parameter should contain the id of the test setting to launch with. In this case `ff52`. For all available test settings check the objects inside the file `etc/nightwatch.remote.config.js`
#### Browserstack dev tests
You can run the tests on your local http://localhost:8080/ in different browsers using BrowserStack.
To do this, download [BrowserStackLocal](https://www.browserstack.com/local-testing), install and run the application. Create a build with `npm run build` and start the server with `npm start`. Finally, get your browserstack credentials and run (for chrome57):
ENV_USER=your-browserstack-user ENV_KEY=your-browserstack-key ./node_modules/.bin/nightwatch -c etc/nightwatch.localhost-remote.conf.js -e chrome57
For possible test settings see above section.
To run tests in batch trigger this command:
npm run browserstack:remote-localhost
#### debug logging
NODE_DEBUG=oil-debug npm run ...
### Creating and editing documentation
We are using [AsciiDoc](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) to create and edit the documentation. You can find the sources und ``docs/`` and can create the HTML (``dist/docs``) with ``npm run build:docs``.
## Submitting a pull request
Before submission, run the tests:
npm run test
If they're all green, great! Go ahead and submit the PR.