@@ -3,12 +3,12 @@ const mockData = require('../../tests/test-helpers/mock-data')
33
44describe ( 'Skill Picker Controller' , function ( ) {
55 var vm
6- var toasterSvc , memberCertService , profileService , state
6+ var toasterSvc , memberCertService , profileService , mailchimpService , state
77 var mockProfile = mockData . getMockProfile ( )
88
99 beforeEach ( function ( ) {
1010 bard . appModule ( 'tc.skill-picker' )
11- bard . inject ( this , '$controller' , '$rootScope' , '$q' , 'MemberCertService' , 'ProfileService' , 'toaster' , 'CONSTANTS' )
11+ bard . inject ( this , '$controller' , '$rootScope' , '$q' , 'MemberCertService' , 'ProfileService' , 'MailchimpService' , ' toaster', 'CONSTANTS' )
1212
1313 memberCertService = MemberCertService
1414 profileService = ProfileService
@@ -52,6 +52,29 @@ describe('Skill Picker Controller', function() {
5252 return deferred . promise
5353 } )
5454
55+ mailchimpService = MailchimpService
56+ sinon . stub ( mailchimpService , 'getMemberSubscription' , function ( user ) {
57+ var deferred = $q . defer ( )
58+ if ( user . userId === 10336829 ) {
59+ deferred . resolve ( )
60+ } else if ( user . userId === 12345 ) {
61+ var resp = { id : 'sdku34i5kdk' , email_address : user . email }
62+ deferred . resolve ( resp )
63+ } else {
64+ deferred . reject ( )
65+ }
66+ return deferred . promise
67+ } )
68+ sinon . stub ( mailchimpService , 'addSubscription' , function ( user ) {
69+ var deferred = $q . defer ( )
70+ if ( user . userId === 10336829 ) {
71+ deferred . resolve ( )
72+ } else {
73+ deferred . reject ( )
74+ }
75+ return deferred . promise
76+ } )
77+
5578 // mocks the toaster service
5679 toasterSvc = toaster
5780 bard . mockService ( toaster , {
@@ -115,6 +138,39 @@ describe('Skill Picker Controller', function() {
115138 CONSTANTS . SWIFT_PROGRAM_ID = origSwiftProgId
116139 } )
117140
141+ it ( 'should call mailchimp service to add subscription' , function ( ) {
142+ expect ( vm ) . to . exist
143+ // getMemberSubscription should always be called
144+ expect ( mailchimpService . getMemberSubscription ) . to . be . calledOnce
145+ // addSubscription should be called once if not subscribed
146+ // getMemberSubscription service mock returns null for mockProfile.userId
147+ expect ( mailchimpService . addSubscription ) . to . be . calledOnce
148+ } )
149+
150+ it ( 'should not call mailchimp service to add subscription' , function ( ) {
151+ // reset getMemberSubscription, addSubscription spy's called count
152+ mailchimpService . getMemberSubscription . reset ( )
153+ mailchimpService . addSubscription . reset ( )
154+ var scope = $rootScope . $new ( )
155+
156+ var profile = angular . copy ( mockProfile )
157+ // update userId to return valid object in service mock
158+ profile . userId = 12345
159+ vm = $controller ( 'SkillPickerController' , {
160+ $scope : scope ,
161+ userProfile : profile ,
162+ featuredSkills : [ ] ,
163+ $state : state
164+ } )
165+ $rootScope . $digest ( )
166+ expect ( vm ) . to . exist
167+ // getMemberSubscription should always be called
168+ expect ( mailchimpService . getMemberSubscription ) . to . be . calledOnce
169+ // addSubscription should not be called if already subscribed
170+ // getMemberSubscription service mock returns valid object for userId 12345
171+ expect ( mailchimpService . addSubscription ) . not . to . be . called
172+ } )
173+
118174 it ( 'should add skill ' , function ( ) {
119175 vm . toggleSkill ( 409 )
120176 expect ( vm . mySkills ) . to . exist . have . length ( 1 )
0 commit comments