Skip to content
This repository was archived by the owner on Dec 11, 2019. It is now read-only.

Adds non-verified option to the payment page #8394

Merged
merged 1 commit into from
Apr 24, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.allow-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.allow-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