diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 8615af2..49a4d2b 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,25 +1,18 @@
-# Background
+## Description
+
-X
+## Solves ticket/s
+
-# Goal
+## Expected behavior
+
-X
+## Review steps
+
-# Implementation
-
-X
-
-# Further considerations
-
-X
-
-# Checklist
-
-- [ ] The PR relates to *only* one subject with a clear title.
-- [ ] I have performed a self-review of my own code
-- [ ] Wrote [good commit messages](http://chris.beams.io/posts/git-commit/)
-- [ ] My code is readable by someone else, and I commented the hard-to-understand areas
-- [ ] I have made corresponding changes to the documentation
-- [ ] I have added tests that prove my fix is effective or that my feature works
+## Further considerations
+
+## Memetized description
+
+![mandatory]()
\ No newline at end of file
diff --git a/README.md b/README.md
index 92c7cee..1195090 100644
--- a/README.md
+++ b/README.md
@@ -224,6 +224,12 @@ For example:
http://your.web.app/page?price=5000&openads_debug
```
+Also, to enable debugger in persistent mode, you can add the option in your browser's local storage from the browser's console:
+```
+window.localStorage.setItem('openads_debug', 'true') // removing it or setting it to false, disables the debugger
+```
+
+
Currently, OpenAds uses [LogLevel](https://github.com/pimterry/loglevel) as its logging framework.
diff --git a/package.json b/package.json
index 8e07b2e..1e8cf2b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@schibstedspain/openads",
- "version": "4.1.1",
+ "version": "4.2.0",
"description": "OpenAds: Advertising library",
"main": "dist/",
"scripts": {
diff --git a/src/itest/openads/infrastructure/configuration/ContainerTest.js b/src/itest/openads/infrastructure/configuration/ContainerTest.js
index d451aa1..6c41beb 100644
--- a/src/itest/openads/infrastructure/configuration/ContainerTest.js
+++ b/src/itest/openads/infrastructure/configuration/ContainerTest.js
@@ -1,5 +1,4 @@
import Container from '../../../../openads/infrastructure/configuration/Container'
-import HTMLDOMDriver from '../../../../openads/infrastructure/service/HTMLDOMDriver'
import {JSDOM} from 'jsdom'
export default class ContainerTest extends Container {
@@ -7,15 +6,13 @@ export default class ContainerTest extends Container {
super({
config,
eager: false,
- currentWindow: new HTMLDOMDriver({
- dom: new JSDOM('
Hello world
')
- .window
- })
+ currentWindow: new JSDOM(
+ 'Hello world
',
+ {
+ url: 'http://localhost'
+ }
+ ).window
})
if (eager) super._buildEagerSingletonInstances()
}
-
- _buildDOMDriver() {
- return this._currentWindow
- }
}
diff --git a/src/openads/domain/service/DOMDriver.js b/src/openads/domain/service/DOMDriver.js
index 32356b7..b63fe81 100644
--- a/src/openads/domain/service/DOMDriver.js
+++ b/src/openads/domain/service/DOMDriver.js
@@ -25,4 +25,8 @@ export default class DOMDriver {
getQueryString() {
throw new Error('DOMDriver#getQueryString must be implemented')
}
+
+ getLocalStorageValue({key}) {
+ throw new Error('DOMDriver#getLocalStorageValue must be implemented')
+ }
}
diff --git a/src/openads/infrastructure/logger/LogLevelLoggerInitializer.js b/src/openads/infrastructure/logger/LogLevelLoggerInitializer.js
index bbea111..bf7e03c 100644
--- a/src/openads/infrastructure/logger/LogLevelLoggerInitializer.js
+++ b/src/openads/infrastructure/logger/LogLevelLoggerInitializer.js
@@ -20,9 +20,17 @@ export default class LogLevelLoggerInitializer {
return logger
}
_isDebugMode() {
+ return (
+ this._enableDebugFromLocalStorage() || this._enableDebugFromQueryString()
+ )
+ }
+ _enableDebugFromLocalStorage() {
+ return this._domDriver.getLocalStorageValue({key: DEBUG_KEY}) === 'true'
+ }
+ _enableDebugFromQueryString() {
const queryString = this._domDriver.getQueryString()
const parameters = QS.parse(queryString)
- return parameters[this._loggerName.toLowerCase() + '_debug'] !== undefined
+ return parameters[DEBUG_KEY] !== undefined
}
_enableConnectorsDebug() {
Object.values(this._connectors).forEach(connector => {
@@ -37,3 +45,4 @@ export default class LogLevelLoggerInitializer {
})
}
}
+const DEBUG_KEY = 'openads_debug'
diff --git a/src/openads/infrastructure/service/HTMLDOMDriver.js b/src/openads/infrastructure/service/HTMLDOMDriver.js
index 2ee38df..046ab5c 100644
--- a/src/openads/infrastructure/service/HTMLDOMDriver.js
+++ b/src/openads/infrastructure/service/HTMLDOMDriver.js
@@ -32,4 +32,8 @@ export default class HTMLDOMDriver extends DOMDriver {
getQueryString() {
return this._dom.location.search.slice(1)
}
+
+ getLocalStorageValue({key}) {
+ return this._dom.defaultView.localStorage.getItem(key)
+ }
}
diff --git a/src/test/openads/infrastructure/logger/LogLevelInitializerTest.js b/src/test/openads/infrastructure/logger/LogLevelInitializerTest.js
index e4be45b..941e595 100644
--- a/src/test/openads/infrastructure/logger/LogLevelInitializerTest.js
+++ b/src/test/openads/infrastructure/logger/LogLevelInitializerTest.js
@@ -4,8 +4,9 @@ import LogLevelLoggerInitializer from '../../../../openads/infrastructure/logger
describe('LogLevel Logger Initializer', () => {
const givenLoggerName = 'OpenAds'
- it('Should use error as default level if no DEBUG option is in URL', () => {
+ it('Should use error as default level if no DEBUG option is set', () => {
const givenSearch = ''
+ const givenLocalStorageValue = null
const loggerMock = {
setLevel: level => null
}
@@ -13,7 +14,8 @@ describe('LogLevel Logger Initializer', () => {
getLogger: loggerName => loggerMock
}
const domDriverMock = {
- getQueryString: () => givenSearch
+ getQueryString: () => givenSearch,
+ getLocalStorageValue: () => givenLocalStorageValue
}
const setLevelSpy = sinon.spy(loggerMock, 'setLevel')
@@ -29,6 +31,7 @@ describe('LogLevel Logger Initializer', () => {
})
it('Should use debug as level if DEBUG option is in URL, enabling debug to any connector implementing Logger interface', () => {
const givenSearch = '?a=a&openads_debug&b=b'
+ const givenLocalStorageValue = 'false'
const loggerMock = {
setLevel: level => null
}
@@ -36,7 +39,8 @@ describe('LogLevel Logger Initializer', () => {
getLogger: loggerName => loggerMock
}
const domDriverMock = {
- getQueryString: () => givenSearch
+ getQueryString: () => givenSearch,
+ getLocalStorageValue: () => givenLocalStorageValue
}
const fooLoggerConnector = {
enableDebug: ({debug}) => null
@@ -66,4 +70,29 @@ describe('LogLevel Logger Initializer', () => {
expect(setConnectorEnableDebugSpy.calledOnce).to.be.true
expect(setConnectorEnableDebugSpy.args[0][0].debug).to.be.true
})
+ it('Should enable DEBUG if the openads_debug option is set in local storage', () => {
+ const givenSearch = ''
+ const givenLocalStorageValue = 'true'
+ const loggerMock = {
+ setLevel: level => null
+ }
+ const logLevelMock = {
+ getLogger: loggerName => loggerMock
+ }
+ const domDriverMock = {
+ getQueryString: () => givenSearch,
+ getLocalStorageValue: () => givenLocalStorageValue
+ }
+
+ const setLevelSpy = sinon.spy(loggerMock, 'setLevel')
+
+ const logLevelInitializer = new LogLevelLoggerInitializer({
+ logLevel: logLevelMock,
+ domDriver: domDriverMock,
+ loggerName: givenLoggerName
+ })
+ logLevelInitializer.logger()
+ expect(setLevelSpy.calledOnce).to.be.true
+ expect(setLevelSpy.args[0][0]).to.equal('debug')
+ })
})
diff --git a/src/test/openads/infrastructure/service/HTMLDOMDriverTest.js b/src/test/openads/infrastructure/service/HTMLDOMDriverTest.js
index aed0320..b183ff6 100644
--- a/src/test/openads/infrastructure/service/HTMLDOMDriverTest.js
+++ b/src/test/openads/infrastructure/service/HTMLDOMDriverTest.js
@@ -174,4 +174,19 @@ describe('DOM Driver HTML simple implementation', function() {
const queryString = htmlDOMDriver.getQueryString()
expect(queryString).to.equal('')
})
+ it('Should get a value from the local storage', () => {
+ const givenDocument = new JSDOM(
+ 'Hello world
',
+ {
+ url: 'http://localhost'
+ }
+ ).window.document
+ const givenKey = 'aKey'
+ const givenValue = 'aValue'
+ givenDocument.defaultView.localStorage.setItem(givenKey, givenValue)
+
+ const htmlDOMDriver = new HTMLDOMDriver({dom: givenDocument})
+ const result = htmlDOMDriver.getLocalStorageValue({key: givenKey})
+ expect(result).to.equal(givenValue)
+ })
})