From 462d4aa634049e950fc7b1db8fdeeb14a941c01f Mon Sep 17 00:00:00 2001 From: NejcZdovc Date: Wed, 19 Apr 2017 10:48:22 +0200 Subject: [PATCH] Adds non-verified option to the payment page Resolves #8231 Auditors: @mrose17 @bsclifton Test Plan: - go to payments page - click on advance settings - disabled option "Allow contributions to non-verified sites" - all non-verified sites should be hidden from a table --- .../locales/en-US/preferences.properties | 1 + app/ledger.js | 64 +++++++++++++++---- .../preferences/payment/advancedSettings.js | 11 ++++ app/renderer/components/settings.js | 2 +- js/constants/appConfig.js | 1 + js/constants/settings.js | 1 + test/about/ledgerTableTest.js | 23 ++++++- test/lib/selectors.js | 2 +- test/unit/app/renderer/paymentsTabTest.js | 6 +- 9 files changed, 93 insertions(+), 18 deletions(-) diff --git a/app/extensions/brave/locales/en-US/preferences.properties b/app/extensions/brave/locales/en-US/preferences.properties index fd8e256dc24..ac92c668ffc 100644 --- a/app/extensions/brave/locales/en-US/preferences.properties +++ b/app/extensions/brave/locales/en-US/preferences.properties @@ -127,6 +127,7 @@ on=on ok=Ok autoSuggestSites=auto-include notifications=Show notifications +nonVerifiedPublishers=Allow contributions to non-verified sites moneyAdd=Use your debit/credit card moneyAddSubTitle=No Bitcoin needed! outsideUSAPayment=Buy Bitcoin at our recommended source diff --git a/app/ledger.js b/app/ledger.js index c05a0838ddc..6b62df4e8a2 100644 --- a/app/ledger.js +++ b/app/ledger.js @@ -75,6 +75,12 @@ let ledgerClient = null let ledgerGeoIP = null let ledgerPublisher = null +// testing data +const testVerifiedPublishers = [ + 'brianbondy.com', + 'clifton.io' +] + // TBD: remove these post beta [MTR] const logPath = 'ledger-log.json' const publisherPath = 'ledger-publisher.json' @@ -187,6 +193,11 @@ const doAction = (action) => { updatePublisherInfo() break + case settings.PAYMENTS_NON_VERIFIED: + synopsis.options.showOnlyVerified = action.value + updatePublisherInfo() + break + default: break } @@ -1040,11 +1051,21 @@ var eligibleP = (publisher) => { } var visibleP = (publisher) => { + if (synopsis.options.showOnlyVerified === undefined) { + synopsis.options.showOnlyVerified = getSetting(settings.PAYMENTS_NON_VERIFIED) + } + + const onlyVerified = !synopsis.options.showOnlyVerified + return ( eligibleP(publisher) && ( synopsis.publishers[publisher].options.exclude !== true || stickyP(publisher) + ) && + ( + (onlyVerified && synopsis.publishers[publisher].options && synopsis.publishers[publisher].options.verified) || + !onlyVerified ) ) && !blockedP(publisher) @@ -1161,18 +1182,25 @@ var synopsisNormalizer = (changedPublisher) => { // round if over 100% of pinned publishers if (pinnedTotal > 100) { - const changedObject = dataPinned.filter(publisher => publisher.site === changedPublisher)[0] - const setOne = changedObject.pinPercentage > (100 - dataPinned.length - 1) + if (changedPublisher) { + const changedObject = dataPinned.filter(publisher => publisher.site === changedPublisher)[0] + const setOne = changedObject.pinPercentage > (100 - dataPinned.length - 1) - if (setOne) { - changedObject.pinPercentage = 100 - dataPinned.length + 1 - changedObject.weight = changedObject.pinPercentage - } + if (setOne) { + changedObject.pinPercentage = 100 - dataPinned.length + 1 + changedObject.weight = changedObject.pinPercentage + } - const pinnedRestTotal = pinnedTotal - changedObject.pinPercentage - dataPinned = dataPinned.filter(publisher => publisher.site !== changedPublisher) - dataPinned = normalizePinned(dataPinned, pinnedRestTotal, (100 - changedObject.pinPercentage), setOne) - dataPinned = roundToTarget(dataPinned, (100 - changedObject.pinPercentage), 'pinPercentage') + const pinnedRestTotal = pinnedTotal - changedObject.pinPercentage + dataPinned = dataPinned.filter(publisher => publisher.site !== changedPublisher) + dataPinned = normalizePinned(dataPinned, pinnedRestTotal, (100 - changedObject.pinPercentage), setOne) + dataPinned = roundToTarget(dataPinned, (100 - changedObject.pinPercentage), 'pinPercentage') + + dataPinned.push(changedObject) + } else { + dataPinned = normalizePinned(dataPinned, pinnedTotal, 100) + dataPinned = roundToTarget(dataPinned, 100, 'pinPercentage') + } dataUnPinned = dataUnPinned.map((result) => { let publisher = getPublisherData(result) @@ -1181,8 +1209,6 @@ var synopsisNormalizer = (changedPublisher) => { return publisher }) - dataPinned.push(changedObject) - // sync app store appActions.changeLedgerPinnedPercentages(dataPinned) } else if (dataUnPinned.length === 0 && pinnedTotal < 100) { @@ -1388,6 +1414,19 @@ var excludeP = (publisher, callback) => { var verifiedP = (publisher, callback) => { inspectP(v2PublishersDB, v2PublishersPath, publisher, 'verified', null, callback) + + if (process.env.NODE_ENV === 'test') { + testVerifiedPublishers.forEach((publisher) => { + if (synopsis.publishers[publisher]) { + if (!synopsis.publishers[publisher].options) { + synopsis.publishers[publisher].options = {} + } + + synopsis.publishers[publisher].options.verified = true + } + }) + updatePublisherInfo() + } } var inspectP = (db, path, publisher, property, key, callback) => { @@ -1486,6 +1525,7 @@ var ledgerInfo = { // advanced ledger settings minPublisherDuration: undefined, minPublisherVisits: undefined, + showOnlyVerified: undefined, hasBitcoinHandler: false, diff --git a/app/renderer/components/preferences/payment/advancedSettings.js b/app/renderer/components/preferences/payment/advancedSettings.js index f83045aa368..a4a1cabb4e6 100644 --- a/app/renderer/components/preferences/payment/advancedSettings.js +++ b/app/renderer/components/preferences/payment/advancedSettings.js @@ -63,10 +63,21 @@ class AdvancedSettingsContent extends ImmutableComponent { listClassName={css(styles.list)} > + + return
) - assert.equal(wrapper.find('[data-test-id="advancedSettings"]').length, 1) + assert.equal(wrapper.find(advancedSettingsDialog).length, 1) assert.equal(wrapper.find('[data-test-id="durationSelector"]').node.value, 8000) }) @@ -234,7 +236,7 @@ describe('PaymentsTab component', function () { hideOverlay={function () {}} ledgerData={Immutable.Map()} /> ) - assert.equal(wrapper.find('[data-test-id="advancedSettings"]').length, 1) + assert.equal(wrapper.find(advancedSettingsDialog).length, 1) assert.equal(wrapper.find('[data-test-id="visitSelector"]').node.value, 1) }) })