From ea92968988a19543f78279a29e8caa8d280047e5 Mon Sep 17 00:00:00 2001 From: Nikola Begedin Date: Fri, 2 Dec 2016 09:28:32 +0100 Subject: [PATCH] Add account status verification to donation goals page --- app/controllers/project/settings/donations.js | 4 ++ app/templates/components/donation-goals.hbs | 6 +-- app/templates/project/settings/donations.hbs | 25 +++++++--- .../acceptance/project-donation-goals-test.js | 50 +++++++++++++++---- tests/pages/project/settings/donations.js | 1 + 5 files changed, 65 insertions(+), 21 deletions(-) diff --git a/app/controllers/project/settings/donations.js b/app/controllers/project/settings/donations.js index bd1ef9840..0a9accdc2 100644 --- a/app/controllers/project/settings/donations.js +++ b/app/controllers/project/settings/donations.js @@ -75,6 +75,10 @@ export default Controller.extend({ } }, + reloadAccount() { + get(this, 'stripeConnectAccount').reload(); + }, + /** * Action which commits changes to a donation goal. * diff --git a/app/templates/components/donation-goals.hbs b/app/templates/components/donation-goals.hbs index 55f61c0e2..3f7e50d77 100644 --- a/app/templates/components/donation-goals.hbs +++ b/app/templates/components/donation-goals.hbs @@ -43,8 +43,8 @@ {{/if}} {{/each}} -

{{#if canAdd}} - +

+ +

{{/if}} -

diff --git a/app/templates/project/settings/donations.hbs b/app/templates/project/settings/donations.hbs index a677dcaeb..72f7b4029 100644 --- a/app/templates/project/settings/donations.hbs +++ b/app/templates/project/settings/donations.hbs @@ -1,12 +1,23 @@
{{#if stripeConnectAccount}} - {{donation-goals - add=(action 'addDonationGoal') - cancel=(action 'cancelDonationGoal') - edit=(action 'editDonationGoal') - project=project - save=(action 'saveDonationGoal') - activateDonations=(action 'activateDonations' project)}} + {{#if stripeConnectAccount.chargesEnabled}} + {{donation-goals + add=(action 'addDonationGoal') + cancel=(action 'cancelDonationGoal') + edit=(action 'editDonationGoal') + project=project + save=(action 'saveDonationGoal') + activateDonations=(action 'activateDonations' project)}} + {{else}} +

Awaiting Stripe verification...

+

Your organization is now connected to stripe, but stripe still needs to verify your account

+ + {{/if}} {{else}} {{#if stripeAuth}}
diff --git a/tests/acceptance/project-donation-goals-test.js b/tests/acceptance/project-donation-goals-test.js index 7d7764ea3..5dfc6d706 100644 --- a/tests/acceptance/project-donation-goals-test.js +++ b/tests/acceptance/project-donation-goals-test.js @@ -36,12 +36,40 @@ test('it redirects to project list page if user is not allowed to manage donatio }); }); +test('it allows refreshing account if account does not have charges enabled yet', function(assert) { + assert.expect(3); + + let project = createProjectWithSluggedRoute(); + let { organization } = project; + let account = organization.createStripeConnectAccount({ chargesEnabled: false }); + + authenticateAsMemberOfRole(this.application, server, organization, 'owner'); + + projectSettingsDonationsPage.visit({ organization: organization.slug, project: project.slug }); + + andThen(() => { + server.get('stripe-connect-accounts/:id', function() { + assert.ok(true, 'Refresh was called'); + account.chargesEnabled = true; + + return account; + }); + + assert.equal(projectSettingsDonationsPage.editedDonationGoals().count, 0, 'Form is not visible'); + projectSettingsDonationsPage.clickRefreshAccount(); + }); + + andThen(() => { + assert.equal(projectSettingsDonationsPage.editedDonationGoals().count, 1, 'Form is now visible'); + }); +}); + test('it renders existing donation goals', function(assert) { assert.expect(1); let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 3, { project }); server.createList('donation-goal', 2); @@ -59,7 +87,7 @@ test('it sets up a new unsaved donation goal if there are no donation goals, whi let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -87,7 +115,7 @@ test('it is possible to add a donation goal when donation goals already exists', let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -116,7 +144,7 @@ test('it allows editing of existing donation goals', function(assert) { let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -145,7 +173,7 @@ test('cancelling edit of an unsaved new goal removes that goal from the list', f let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -169,7 +197,7 @@ test('cancelling edit of an unsaved existing goal keeps that goal in the list', let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -193,7 +221,7 @@ test('it allows activating donations for the project', function(assert) { let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -220,7 +248,7 @@ test('it shows donation progress if donations are active', function(assert) { organization }); - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); server.createList('donation-goal', 1, { project }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -240,7 +268,7 @@ test('it does not show donation progress if donations are not active', function( donationsActive: false, organization }); - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -256,7 +284,7 @@ test('it renders validation errors', function(assert) { let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); @@ -300,7 +328,7 @@ test('it renders other errors', function(assert) { let project = createProjectWithSluggedRoute(); let { organization } = project; - organization.createStripeConnectAccount(); + organization.createStripeConnectAccount({ chargesEnabled: true }); authenticateAsMemberOfRole(this.application, server, organization, 'owner'); diff --git a/tests/pages/project/settings/donations.js b/tests/pages/project/settings/donations.js index fe1dee1be..017dda6a5 100644 --- a/tests/pages/project/settings/donations.js +++ b/tests/pages/project/settings/donations.js @@ -47,5 +47,6 @@ export default create({ clickActivateDonationGoals: clickable('.activate-donations'), clickAddNew: clickable('.add'), + clickRefreshAccount: clickable('.refresh'), clickStripeConnectButton: clickable('.stripe-connect') });