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) + }) })