From 10e14400e287081e701f53161a4a43699c65f0c6 Mon Sep 17 00:00:00 2001 From: Ziyi Date: Fri, 19 Mar 2021 11:13:39 -0700 Subject: [PATCH] Called create_lead in model, FactoryBot errors --- app/models/user.rb | 9 +++++++++ spec/factories/users.rb | 19 +++++++++++++++++++ spec/models/user_spec.rb | 39 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/app/models/user.rb b/app/models/user.rb index 01ddf925..9ff90c16 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -80,6 +80,8 @@ class User < ApplicationRecord after_save :touch_events + after_commit :mailbluster_create_lead, on: :create + # add scope scope :comment_notifiable, ->(conference) {joins(:roles).where('roles.name IN (?)', [:organizer, :cfp]).where('roles.resource_type = ? AND roles.resource_id = ?', 'Conference', conference.id)} @@ -362,6 +364,9 @@ class User < ApplicationRecord end # TODO email_hash function for mailbluster + # def email_hash + # Digest::MD5.hexdigest user.email + # end private @@ -369,6 +374,10 @@ class User < ApplicationRecord self.is_admin = true if User.empty? end + def mailbluster_create_lead + ApplicationController.helpers.create_lead(self) + end + def touch_events event_users.each(&:touch) end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index fcec2048..8d04f5f7 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -80,8 +80,27 @@ FactoryBot.define do last_sign_in_at { Date.today } is_disabled { false } + url_mailbluster = 'https://api.mailbluster.com/api/leads/' + response_body = "{ + \"message\": \"Lead created\", + \"lead\": { + \"id\": 329395, + \"firstName\": \"#{name}\", + \"lastName\": \"\", + \"fullName\": \"#{name}\", + \"email\": \"#{email}\", + \"subscribed\": true, + \"tags\": [ + #{ENV['OSEM_NAME'] || 'snapcon'} + ], + } + }" + WebMock.stub_request(:post, url_mailbluster) + # Called by every user creation + after(:create) do |user| user.is_admin = false + # save with bang cause we want change in DB and not just in object instance user.save! end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2e890949..7d700853 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -49,7 +49,7 @@ require 'spec_helper' describe User do - + let(:user_admin) { create(:admin) } let(:conference) { create(:conference, short_title: 'oSC16', title: 'openSUSE Conference 2016') } let(:conference2) { create(:conference, short_title: 'oSC15', title: 'openSUSE Conference 2015') } @@ -530,4 +530,41 @@ describe User do expect(User.omniauth_providers).to eq [:suse, :google, :facebook, :github, :discourse] end end + + describe 'mailbluster' do + it 'creates a Mailbluster lead on creating a user' do + user_mailbluster = User.new(name: 'John Doe', email: 'snap@qwertyuiop.org') + + response_body = "{ + \"message\": \"Lead created\", + \"lead\": { + \"id\": 329395, + \"firstName\": \"#{user_mailbluster.name}\", + \"lastName\": \"\", + \"fullName\": \"#{user_mailbluster.name}\", + \"email\": \"#{user_mailbluster.email}\", + \"subscribed\": true, + \"tags\": [ + #{ENV['OSEM_NAME'] || 'snapcon'} + ], + } + }" + stub_request(:post, url_mailbluster) + .to_return(body: response_body, status: 200) + + # Do not request before save + expect(WebMock).not_to have_requested(:post, url) + + # Request after save + user_mailbluster.save! + + expect(WebMock).to have_requested(:post, url).with(body: { + 'email': user_mailbluster.email, + 'firstName': user_mailbluster.name, + 'overrideExisting': true, + 'subscribed': true, + 'tags': [ENV['OSEM_NAME'] || 'snapcon'] + }.to_json) + end + end end