Skip to content

Commit

Permalink
Adds non-verified option to the payment page
Browse files Browse the repository at this point in the history
Resolves brave#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
  • Loading branch information
NejcZdovc committed Apr 23, 2017
1 parent b2e4b71 commit 798f177
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 18 deletions.
1 change: 1 addition & 0 deletions app/extensions/brave/locales/en-US/preferences.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
64 changes: 52 additions & 12 deletions app/ledger.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -187,6 +193,11 @@ const doAction = (action) => {
updatePublisherInfo()
break

case settings.PAYMENTS_NON_VERIFIED:
synopsis.options.showOnlyVerified = action.value
updatePublisherInfo()
break

default:
break
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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) {
Expand Down Expand Up @@ -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) => {
Expand Down Expand Up @@ -1486,6 +1525,7 @@ var ledgerInfo = {
// advanced ledger settings
minPublisherDuration: undefined,
minPublisherVisits: undefined,
showOnlyVerified: undefined,

hasBitcoinHandler: false,

Expand Down
11 changes: 11 additions & 0 deletions app/renderer/components/preferences/payment/advancedSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,21 @@ class AdvancedSettingsContent extends ImmutableComponent {
listClassName={css(styles.list)}
>
<SettingCheckbox
dataTestId='payment-advance-notifications'
dataL10nId='notifications'
prefKey={settings.PAYMENTS_NOTIFICATIONS}
settings={this.props.settings}
onChangeSetting={this.props.onChangeSetting}
className={css(styles.listItem)}
switchClassName={css(styles.checkboxSwitch)}
labelClassName={css(commonStyles.noMarginBottom)}
/>
<SettingCheckbox
dataTestId='payment-advance-nonverified'
dataL10nId='nonVerifiedPublishers'
prefKey={settings.PAYMENTS_NON_VERIFIED}
settings={this.props.settings}
onChangeSetting={this.props.onChangeSetting}
className={css(styles.listItem, commonStyles.noMarginBottom)}
switchClassName={css(styles.checkboxSwitch)}
labelClassName={css(commonStyles.noMarginBottom)}
Expand Down
2 changes: 1 addition & 1 deletion app/renderer/components/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class SettingCheckbox extends ImmutableComponent {

})

return <div {...props}>
return <div {...props} data-test-id={this.props.dataTestId}>
<SwitchControl id={this.props.prefKey}
small={this.props.small}
disabled={this.props.disabled}
Expand Down
1 change: 1 addition & 0 deletions js/constants/appConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ module.exports = {
'bookmarks.toolbar.showOnlyFavicon': false,
'payments.enabled': false,
'payments.notifications': false,
'payments.non-verified-publishers': true,
// "Add funds to your wallet" -- Limit to once every n days to reduce nagging.
'payments.notification-add-funds-timestamp': null,
// "Out of money, pls add" / "In 24h we'll pay publishers [Review]"
Expand Down
1 change: 1 addition & 0 deletions js/constants/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const settings = {
PAYMENTS_NOTIFICATION_RECONCILE_SOON_TIMESTAMP: 'notification-reconcile-soon-timestamp',
PAYMENTS_NOTIFICATION_TRY_PAYMENTS_DISMISSED: 'payments.notificationTryPaymentsDismissed',
PAYMENTS_CONTRIBUTION_AMOUNT: 'payments.contribution-amount',
PAYMENTS_NON_VERIFIED: 'payments.non-verified-publishers',
// Advanced settings
HARDWARE_ACCELERATION_ENABLED: 'advanced.hardware-acceleration-enabled',
PDFJS_ENABLED: 'advanced.pdfjs-enabled',
Expand Down
23 changes: 21 additions & 2 deletions test/about/ledgerTableTest.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
/* global describe, it, beforeEach */

const Brave = require('../lib/brave')
const {urlInput, addFundsButton, paymentsWelcomePage, paymentsTab, walletSwitch} = require('../lib/selectors')
const {
urlInput,
addFundsButton,
paymentsWelcomePage,
paymentsTab,
walletSwitch,
advancedSettingsDialog,
advancedSettingsButton
} = require('../lib/selectors')

const ledgerAPIWaitTimeout = 20000
const prefsUrl = 'about:preferences'
const sites = [
'http://example.com/',
'https://www.eff.org/'
'https://brianbondy.com/'
]
const sites2 = [
'http://example.com/',
Expand Down Expand Up @@ -161,6 +169,17 @@ describe('Ledger table', function () {
.click(`${secondTableSecondRow} .switchBackground`)
.waitForInputText(`${firstTableFirstRow} [data-test-id="pinnedInput"]`, '100')
})

it('toggle non-verified option', function * () {
yield this.app.client
.tabByIndex(0)
.click(advancedSettingsButton)
.waitForVisible(advancedSettingsDialog)
.click('[data-test-id="payment-advance-nonverified"] .switchBackground')
.click('[data-l10n-id="done"]')
.waitForElementCount(advancedSettingsDialog, 0)
.waitForElementCount(`${secondTable} tr`, 1)
})
})

describe('4 publishers', function () {
Expand Down
2 changes: 1 addition & 1 deletion test/lib/selectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ module.exports = {
syncSwitch: '.syncContainer .switchBackground',
walletSwitch: '[data-test-id="enablePaymentsSwitch"] .switchBackground',
addFundsButton: '[data-test2-id="addFunds"]',
advancedSettings: '[data-l10n-id="advancedSettings"]',
fundsSelectBox: '[data-test-id="fundsSelectBox"]',
paymentsStatus: '[data-test-id="walletStatus"]',
siteSettingItem: '.siteSettingItem',
ledgerTable: '[data-test-id="ledgerTable"]',
bitcoinDashboard: '[data-test-id="bitcoinDashboard"]',
advancedSettingsDialog: '[data-test-id="advancedSettings"]',
advancedSettingsButton: '[data-test-id="advancedSettingsButton"]',
backupWallet: '[data-l10n-id="backupLedger"]',
recoverWallet: '[data-l10n-id="recoverLedger"]',
Expand Down
6 changes: 4 additions & 2 deletions test/unit/app/renderer/paymentsTabTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ const Immutable = require('immutable')
const fakeElectron = require('../../lib/fakeElectron')
const fakeSettings = require('../../lib/fakeSettings')
const {btcToCurrencyString} = require('../../../../app/common/lib/ledgerUtil')
const {advancedSettingsDialog} = require('../../../lib/selectors')

let PaymentsTab, EnabledContent
require('../../braveUnit')

Expand Down Expand Up @@ -221,7 +223,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="durationSelector"]').node.value, 8000)
})

Expand All @@ -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)
})
})
Expand Down

0 comments on commit 798f177

Please sign in to comment.