diff --git a/app/controllers/discourse_donations/charges_controller.rb b/app/controllers/discourse_donations/charges_controller.rb index 7db07a6..c45122c 100644 --- a/app/controllers/discourse_donations/charges_controller.rb +++ b/app/controllers/discourse_donations/charges_controller.rb @@ -22,21 +22,7 @@ module DiscourseDonations :currency => currency ) - create_user(params) if current_user.nil? - render :json => charge end - -private - - def create_user(options) - User.create( - email: options[:email], - username: options[:username], - name: options[:name], - password: options[:password], - active: true - ).approve(-1, false) - end end end diff --git a/assets/javascripts/discourse/components/stripe-card.js.es6 b/assets/javascripts/discourse/components/stripe-card.js.es6 index 8ce5e87..0418dc0 100644 --- a/assets/javascripts/discourse/components/stripe-card.js.es6 +++ b/assets/javascripts/discourse/components/stripe-card.js.es6 @@ -55,15 +55,30 @@ export default Ember.Component.extend({ stripeToken: data.token.id, amount: self.get('amount') * 100, email: self.get('email'), - username: self.get('username'), - name: self.get('name'), - password: self.get('password') }; ajax('/charges', { data: params, method: 'post' }).then(data => { - if(data.status == 'succeeded') { self.set('success', true) }; - self.set('transactionInProgress', false); self.set('result', data.outcome.seller_message); + + if(!this.get('create_accounts')) { + if(data.status == 'succeeded') { self.set('success', true) }; + self.set('transactionInProgress', false); + } + else { + + let params = { + email: self.get('email'), + username: self.get('username'), + name: self.get('name'), + password: self.get('password') + }; + + ajax('/users', { data: params, method: 'post' }).then(data => { + self.set('success', data.success); + self.set('transactionInProgress', false); + self.set('result', self.get('result') + data.message); + }); + } }); } }); diff --git a/assets/javascripts/discourse/templates/components/stripe-card.hbs b/assets/javascripts/discourse/templates/components/stripe-card.hbs index baf57f6..3fbcaa6 100644 --- a/assets/javascripts/discourse/templates/components/stripe-card.hbs +++ b/assets/javascripts/discourse/templates/components/stripe-card.hbs @@ -50,7 +50,11 @@
{{#d-button action="submitStripeCard" disabled=transactionInProgress class="btn btn-primary btn-payment"}} - {{i18n 'discourse_donations.submit'}} + {{#if create_accounts}} + {{i18n 'discourse_donations.submit_with_create_account'}} + {{else}} + {{i18n 'discourse_donations.submit'}} + {{/if}} {{/d-button}} {{#if transactionInProgress}} diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 7ecbe12..bcd8b03 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -6,5 +6,6 @@ en: amount: Amount card: Credit or debit card submit: Make Payment + submit_with_create_account: Make Payment and Create Account messages: success: Thank you for your donation! diff --git a/spec/controllers/discourse_donations/charges_controller_spec.rb b/spec/controllers/discourse_donations/charges_controller_spec.rb index 9ed3761..2eedfbd 100644 --- a/spec/controllers/discourse_donations/charges_controller_spec.rb +++ b/spec/controllers/discourse_donations/charges_controller_spec.rb @@ -9,19 +9,15 @@ module DiscourseDonations SiteSetting.stubs(:discourse_donations_secret_key).returns('secret-key-yo') end - describe 'creating user accounts' do - it 'creates a new user account' do - controller.expects(:create_user).once - post :create, { email: 'foobar@example.com' } - expect(response).to have_http_status(200) - end + it 'responds ok for anonymous users' do + post :create, { email: 'foobar@example.com' } + expect(response).to have_http_status(200) + end - it 'does not create a new user account' do - controller.expects(:create_user).never - current_user = log_in(:coding_horror) - post :create - expect(response).to have_http_status(200) - end + it 'responds ok for logged in user' do + current_user = log_in(:coding_horror) + post :create + expect(response).to have_http_status(200) end end end