Skip to content

Commit 6150315

Browse files
committed
Renamed the method and added referrer_source to tests
1 parent 672fee0 commit 6150315

File tree

4 files changed

+58
-31
lines changed

4 files changed

+58
-31
lines changed

ghost/core/core/server/api/endpoints/stats.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,13 @@ const controller = {
172172
headers: {
173173
cacheInvalidate: false
174174
},
175+
options: [
176+
'order',
177+
'limit',
178+
'date_from',
179+
'date_to',
180+
'timezone'
181+
],
175182
data: [
176183
'id'
177184
],
@@ -182,14 +189,14 @@ const controller = {
182189
cache: statsService.cache,
183190
generateCacheKeyData(frame) {
184191
return {
185-
method: 'postReferrersAlpha',
192+
method: 'getReferrersForPost',
186193
data: {
187194
id: frame.data.id
188195
}
189196
};
190197
},
191198
async query(frame) {
192-
return await statsService.api.getPostReferrersAlpha(frame.data.id, frame.options);
199+
return await statsService.api.getReferrersForPost(frame.data.id, frame.options);
193200
}
194201
},
195202
};

ghost/core/core/server/services/stats/PostsStatsService.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class PostsStatsService {
9292
* @param {TopPostsOptions} options
9393
* @returns {Promise<{data: TopPostResult[]}>} The referrers for the post
9494
*/
95-
async getForPostAlpha(postId, options) {
95+
async getReferrersForPost(postId, options) {
9696
const knex = this.knex;
9797
const freeMembers = await knex('members_created_events as mce')
9898
.select('mce.referrer_source as source')

ghost/core/core/server/services/stats/StatsService.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ class StatsService {
6666
/**
6767
* @param {string} postId
6868
*/
69-
async getPostReferrersAlpha(postId, options) {
70-
const result = await this.posts.getForPostAlpha(postId, options);
69+
async getReferrersForPost(postId, options) {
70+
const result = await this.posts.getReferrersForPost(postId, options);
7171
return result;
7272
}
7373

ghost/core/test/unit/server/services/stats/posts.test.js

+46-26
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,20 @@ describe('PostsStatsService', function () {
4343
await db('posts').insert({id, title});
4444
}
4545

46-
async function _createFreeSignupEvent(postId, memberId, createdAt = new Date()) {
46+
async function _createFreeSignupEvent(postId, memberId, referrerSource, createdAt = new Date()) {
4747
eventIdCounter += 1;
4848
const eventId = `free_event_${eventIdCounter}`;
4949
await db('members_created_events').insert({
5050
id: eventId,
5151
member_id: memberId,
5252
attribution_id: postId,
5353
attribution_type: 'post',
54+
referrer_source: referrerSource,
5455
created_at: createdAt
5556
});
5657
}
5758

58-
async function _createPaidConversionEvent(postId, memberId, subscriptionId, mrr, createdAt = new Date()) {
59+
async function _createPaidConversionEvent(postId, memberId, subscriptionId, mrr, referrerSource, createdAt = new Date()) {
5960
eventIdCounter += 1;
6061
const subCreatedEventId = `sub_created_${eventIdCounter}`;
6162
const paidEventId = `paid_event_${eventIdCounter}`;
@@ -66,6 +67,7 @@ describe('PostsStatsService', function () {
6667
subscription_id: subscriptionId,
6768
attribution_id: postId,
6869
attribution_type: 'post',
70+
referrer_source: referrerSource,
6971
created_at: createdAt
7072
});
7173

@@ -78,27 +80,27 @@ describe('PostsStatsService', function () {
7880
});
7981
}
8082

81-
async function _createFreeSignup(postId, memberId = null) {
83+
async function _createFreeSignup(postId, referrerSource,memberId = null) {
8284
memberIdCounter += 1;
8385
const finalMemberId = memberId || `member_${memberIdCounter}`;
8486
await _createFreeSignupEvent(postId, finalMemberId);
8587
}
8688

87-
async function _createPaidSignup(postId, mrr, memberId = null, subscriptionId = null) {
89+
async function _createPaidSignup(postId, mrr, referrerSource, memberId = null, subscriptionId = null) {
8890
memberIdCounter += 1;
8991
const finalMemberId = memberId || `member_${memberIdCounter}`;
9092
subscriptionIdCounter += 1;
9193
const finalSubscriptionId = subscriptionId || `sub_${subscriptionIdCounter}`;
92-
await _createFreeSignupEvent(postId, finalMemberId);
94+
await _createFreeSignupEvent(postId, finalMemberId, referrerSource);
9395
await _createPaidConversionEvent(postId, finalMemberId, finalSubscriptionId, mrr);
9496
}
9597

96-
async function _createPaidConversion(signupPostId, conversionPostId, mrr, memberId = null, subscriptionId = null) {
98+
async function _createPaidConversion(signupPostId, conversionPostId, mrr, referrerSource, memberId = null, subscriptionId = null) {
9799
memberIdCounter += 1;
98100
const finalMemberId = memberId || `member_${memberIdCounter}`;
99101
subscriptionIdCounter += 1;
100102
const finalSubscriptionId = subscriptionId || `sub_${subscriptionIdCounter}`;
101-
await _createFreeSignupEvent(signupPostId, finalMemberId);
103+
await _createFreeSignupEvent(signupPostId, finalMemberId, referrerSource);
102104
await _createPaidConversionEvent(conversionPostId, finalMemberId, finalSubscriptionId, mrr);
103105
}
104106

@@ -191,11 +193,11 @@ describe('PostsStatsService', function () {
191193
});
192194

193195
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');
199201

200202
const result = await service.getTopPosts({order: 'free_members desc'});
201203

@@ -220,10 +222,10 @@ describe('PostsStatsService', function () {
220222
});
221223

222224
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');
227229

228230
const result = await service.getTopPosts({order: 'paid_members desc'});
229231

@@ -248,10 +250,10 @@ describe('PostsStatsService', function () {
248250
});
249251

250252
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');
255257

256258
const result = await service.getTopPosts({order: 'mrr desc'});
257259

@@ -282,8 +284,8 @@ describe('PostsStatsService', function () {
282284
const sixtyDaysAgo = new Date(Date.now() - 60 * 24 * 60 * 60 * 1000);
283285

284286
// 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);
287289

288290
const lastFifteenDaysResult = await service.getTopPosts({
289291
date_from: fifteenDaysAgo,
@@ -304,10 +306,10 @@ describe('PostsStatsService', function () {
304306
});
305307

306308
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');
311313

312314
const result = await service.getTopPosts({
313315
order: 'free_members desc',
@@ -329,5 +331,23 @@ describe('PostsStatsService', function () {
329331
assert.ok(result.data, 'Result should have a data property');
330332
assert.equal(result.data.length, 0, 'Should return empty array when no events exist');
331333
});
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 () {});
332352
});
333353
});

0 commit comments

Comments
 (0)