@@ -43,19 +43,20 @@ describe('PostsStatsService', function () {
43
43
await db ( 'posts' ) . insert ( { id, title} ) ;
44
44
}
45
45
46
- async function _createFreeSignupEvent ( postId , memberId , createdAt = new Date ( ) ) {
46
+ async function _createFreeSignupEvent ( postId , memberId , referrerSource , createdAt = new Date ( ) ) {
47
47
eventIdCounter += 1 ;
48
48
const eventId = `free_event_${ eventIdCounter } ` ;
49
49
await db ( 'members_created_events' ) . insert ( {
50
50
id : eventId ,
51
51
member_id : memberId ,
52
52
attribution_id : postId ,
53
53
attribution_type : 'post' ,
54
+ referrer_source : referrerSource ,
54
55
created_at : createdAt
55
56
} ) ;
56
57
}
57
58
58
- async function _createPaidConversionEvent ( postId , memberId , subscriptionId , mrr , createdAt = new Date ( ) ) {
59
+ async function _createPaidConversionEvent ( postId , memberId , subscriptionId , mrr , referrerSource , createdAt = new Date ( ) ) {
59
60
eventIdCounter += 1 ;
60
61
const subCreatedEventId = `sub_created_${ eventIdCounter } ` ;
61
62
const paidEventId = `paid_event_${ eventIdCounter } ` ;
@@ -66,6 +67,7 @@ describe('PostsStatsService', function () {
66
67
subscription_id : subscriptionId ,
67
68
attribution_id : postId ,
68
69
attribution_type : 'post' ,
70
+ referrer_source : referrerSource ,
69
71
created_at : createdAt
70
72
} ) ;
71
73
@@ -78,27 +80,27 @@ describe('PostsStatsService', function () {
78
80
} ) ;
79
81
}
80
82
81
- async function _createFreeSignup ( postId , memberId = null ) {
83
+ async function _createFreeSignup ( postId , referrerSource , memberId = null ) {
82
84
memberIdCounter += 1 ;
83
85
const finalMemberId = memberId || `member_${ memberIdCounter } ` ;
84
86
await _createFreeSignupEvent ( postId , finalMemberId ) ;
85
87
}
86
88
87
- async function _createPaidSignup ( postId , mrr , memberId = null , subscriptionId = null ) {
89
+ async function _createPaidSignup ( postId , mrr , referrerSource , memberId = null , subscriptionId = null ) {
88
90
memberIdCounter += 1 ;
89
91
const finalMemberId = memberId || `member_${ memberIdCounter } ` ;
90
92
subscriptionIdCounter += 1 ;
91
93
const finalSubscriptionId = subscriptionId || `sub_${ subscriptionIdCounter } ` ;
92
- await _createFreeSignupEvent ( postId , finalMemberId ) ;
94
+ await _createFreeSignupEvent ( postId , finalMemberId , referrerSource ) ;
93
95
await _createPaidConversionEvent ( postId , finalMemberId , finalSubscriptionId , mrr ) ;
94
96
}
95
97
96
- async function _createPaidConversion ( signupPostId , conversionPostId , mrr , memberId = null , subscriptionId = null ) {
98
+ async function _createPaidConversion ( signupPostId , conversionPostId , mrr , referrerSource , memberId = null , subscriptionId = null ) {
97
99
memberIdCounter += 1 ;
98
100
const finalMemberId = memberId || `member_${ memberIdCounter } ` ;
99
101
subscriptionIdCounter += 1 ;
100
102
const finalSubscriptionId = subscriptionId || `sub_${ subscriptionIdCounter } ` ;
101
- await _createFreeSignupEvent ( signupPostId , finalMemberId ) ;
103
+ await _createFreeSignupEvent ( signupPostId , finalMemberId , referrerSource ) ;
102
104
await _createPaidConversionEvent ( conversionPostId , finalMemberId , finalSubscriptionId , mrr ) ;
103
105
}
104
106
@@ -191,11 +193,11 @@ describe('PostsStatsService', function () {
191
193
} ) ;
192
194
193
195
it ( 'correctly ranks posts by free_members' , async function ( ) {
194
- await _createFreeSignup ( 'post1' ) ;
195
- await _createFreeSignup ( 'post2' ) ;
196
- await _createPaidSignup ( 'post1' , 500 ) ;
197
- await _createPaidSignup ( 'post3' , 1000 ) ;
198
- await _createPaidConversion ( 'post1' , 'post2' , 500 ) ;
196
+ await _createFreeSignup ( 'post1' , 'referrer_1' ) ;
197
+ await _createFreeSignup ( 'post2' , 'referrer_2' ) ;
198
+ await _createPaidSignup ( 'post1' , 500 , 'referrer_1' ) ;
199
+ await _createPaidSignup ( 'post3' , 1000 , 'referrer_3' ) ;
200
+ await _createPaidConversion ( 'post1' , 'post2' , 500 , 'referrer_1' ) ;
199
201
200
202
const result = await service . getTopPosts ( { order : 'free_members desc' } ) ;
201
203
@@ -220,10 +222,10 @@ describe('PostsStatsService', function () {
220
222
} ) ;
221
223
222
224
it ( 'correctly ranks posts by paid_members' , async function ( ) {
223
- await _createFreeSignup ( 'post3' ) ;
224
- await _createPaidSignup ( 'post1' , 600 ) ;
225
- await _createPaidConversion ( 'post1' , 'post2' , 500 ) ;
226
- await _createPaidConversion ( 'post4' , 'post2' , 700 ) ;
225
+ await _createFreeSignup ( 'post3' , 'referrer_3' ) ;
226
+ await _createPaidSignup ( 'post1' , 600 , 'referrer_1' ) ;
227
+ await _createPaidConversion ( 'post1' , 'post2' , 500 , 'referrer_1' ) ;
228
+ await _createPaidConversion ( 'post4' , 'post2' , 700 , 'referrer_4' ) ;
227
229
228
230
const result = await service . getTopPosts ( { order : 'paid_members desc' } ) ;
229
231
@@ -248,10 +250,10 @@ describe('PostsStatsService', function () {
248
250
} ) ;
249
251
250
252
it ( 'correctly ranks posts by mrr' , async function ( ) {
251
- await _createFreeSignup ( 'post3' ) ;
252
- await _createPaidSignup ( 'post1' , 600 ) ;
253
- await _createPaidConversion ( 'post1' , 'post2' , 500 ) ;
254
- await _createPaidConversion ( 'post4' , 'post2' , 700 ) ;
253
+ await _createFreeSignup ( 'post3' , 'referrer_3' ) ;
254
+ await _createPaidSignup ( 'post1' , 600 , 'referrer_1' ) ;
255
+ await _createPaidConversion ( 'post1' , 'post2' , 500 , 'referrer_1' ) ;
256
+ await _createPaidConversion ( 'post4' , 'post2' , 700 , 'referrer_4' ) ;
255
257
256
258
const result = await service . getTopPosts ( { order : 'mrr desc' } ) ;
257
259
@@ -282,8 +284,8 @@ describe('PostsStatsService', function () {
282
284
const sixtyDaysAgo = new Date ( Date . now ( ) - 60 * 24 * 60 * 60 * 1000 ) ;
283
285
284
286
// Create events at different dates
285
- await _createFreeSignupEvent ( 'post1' , 'member_past' , tenDaysAgo ) ;
286
- await _createFreeSignupEvent ( 'post2' , 'member_future' , thirtyDaysAgo ) ;
287
+ await _createFreeSignupEvent ( 'post1' , 'member_past' , 'referrer_past' , tenDaysAgo ) ;
288
+ await _createFreeSignupEvent ( 'post2' , 'member_future' , 'referrer_future' , thirtyDaysAgo ) ;
287
289
288
290
const lastFifteenDaysResult = await service . getTopPosts ( {
289
291
date_from : fifteenDaysAgo ,
@@ -304,10 +306,10 @@ describe('PostsStatsService', function () {
304
306
} ) ;
305
307
306
308
it ( 'respects the limit parameter' , async function ( ) {
307
- await _createFreeSignup ( 'post1' ) ;
308
- await _createFreeSignup ( 'post1' ) ;
309
- await _createFreeSignup ( 'post2' ) ;
310
- await _createFreeSignup ( 'post3' ) ;
309
+ await _createFreeSignup ( 'post1' , 'referrer_1' ) ;
310
+ await _createFreeSignup ( 'post1' , 'referrer_2' ) ;
311
+ await _createFreeSignup ( 'post2' , 'referrer_3' ) ;
312
+ await _createFreeSignup ( 'post3' , 'referrer_4' ) ;
311
313
312
314
const result = await service . getTopPosts ( {
313
315
order : 'free_members desc' ,
@@ -329,5 +331,23 @@ describe('PostsStatsService', function () {
329
331
assert . ok ( result . data , 'Result should have a data property' ) ;
330
332
assert . equal ( result . data . length , 0 , 'Should return empty array when no events exist' ) ;
331
333
} ) ;
334
+
335
+ it ( 'returns referrers for a post' , async function ( ) {
336
+ await _createFreeSignupEvent ( 'post1' , 'member_1' , 'referrer_1' , new Date ( ) ) ;
337
+ await _createFreeSignupEvent ( 'post1' , 'member_2' , 'referrer_2' , new Date ( ) ) ;
338
+ await _createFreeSignupEvent ( 'post1' , 'member_3' , 'referrer_3' , new Date ( ) ) ;
339
+
340
+ const result = await service . getForPostAlpha ( 'post1' ) ;
341
+ assert . ok ( result . data , 'Result should have a data property' ) ;
342
+ assert . equal ( result . data . length , 3 , 'Should return 3 referrers' ) ;
343
+ } ) ;
344
+
345
+ it . skip ( 'correctly ranks posts by paid_members' , async function ( ) { } ) ;
346
+
347
+ it . skip ( 'correctly ranks posts by mrr' , async function ( ) { } ) ;
348
+
349
+ it . skip ( 'properly filters by date range' , async function ( ) { } ) ;
350
+
351
+ it . skip ( 'respects the limit parameter' , async function ( ) { } ) ;
332
352
} ) ;
333
353
} ) ;
0 commit comments