@@ -3,12 +3,12 @@ const mockData = require('../../tests/test-helpers/mock-data')
3
3
4
4
describe ( 'Skill Picker Controller' , function ( ) {
5
5
var vm
6
- var toasterSvc , memberCertService , profileService , state
6
+ var toasterSvc , memberCertService , profileService , mailchimpService , state
7
7
var mockProfile = mockData . getMockProfile ( )
8
8
9
9
beforeEach ( function ( ) {
10
10
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' )
12
12
13
13
memberCertService = MemberCertService
14
14
profileService = ProfileService
@@ -52,6 +52,29 @@ describe('Skill Picker Controller', function() {
52
52
return deferred . promise
53
53
} )
54
54
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
+
55
78
// mocks the toaster service
56
79
toasterSvc = toaster
57
80
bard . mockService ( toaster , {
@@ -115,6 +138,39 @@ describe('Skill Picker Controller', function() {
115
138
CONSTANTS . SWIFT_PROGRAM_ID = origSwiftProgId
116
139
} )
117
140
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
+
118
174
it ( 'should add skill ' , function ( ) {
119
175
vm . toggleSkill ( 409 )
120
176
expect ( vm . mySkills ) . to . exist . have . length ( 1 )
0 commit comments