Ghost/ghost/member-attribution/test/service.test.js
Simon Backx e986b78458
Added member attributions to activity feed (#15283)
refs https://github.com/TryGhost/Team/issues/1833
refs https://github.com/TryGhost/Team/issues/1834

We've added the attribution property to subscription and signup events when the
flag is enabled. The attributions resource is fetched by creating multiple relations
on the model, rather than polymorphic as we ran into issues with that as they can't
be nullable/optional.

The parse-member-event structure has been updated to make it easier to work with,
specifically `getObject` is only used when the event is clickable, and there is now a 
join property which makes it easier to join the action and the object.
2022-08-24 10:11:25 -04:00

106 lines
3.4 KiB
JavaScript

// Switch these lines once there are useful utils
// const testUtils = require('./utils');
require('./utils');
const MemberAttributionService = require('../lib/service');
describe('MemberAttributionService', function () {
describe('Constructor', function () {
it('doesn\'t throw', function () {
new MemberAttributionService({});
});
});
describe('getEventAttribution', function () {
it('returns null if attribution_type is null', function () {
const service = new MemberAttributionService({});
const model = {
id: 'event_id',
get() {
return null;
}
};
should(service.getEventAttribution(model)).eql(null);
});
it('returns url attribution types', function () {
const service = new MemberAttributionService({
attributionBuilder: {
build(attribution) {
return {
...attribution,
getResource() {
return {
...attribution,
title: 'added'
};
}
};
}
}
});
const model = {
id: 'event_id',
get(name) {
if (name === 'attribution_type') {
return 'url';
}
if (name === 'attribution_url') {
return '/my/url/';
}
return null;
}
};
should(service.getEventAttribution(model)).eql({
id: null,
type: 'url',
url: '/my/url/',
title: 'added'
});
});
it('returns first loaded relation', function () {
const service = new MemberAttributionService({
attributionBuilder: {
build(attribution) {
return {
...attribution,
getResource() {
return {
...attribution,
title: 'added'
};
}
};
}
}
});
const model = {
id: 'event_id',
get(name) {
if (name === 'attribution_type') {
return 'user';
}
if (name === 'attribution_url') {
return '/my/url/';
}
return 'test_user_id';
},
related(name) {
if (name === 'userAttribution') {
return {
id: 'test_user_id'
};
}
return {};
}
};
should(service.getEventAttribution(model)).eql({
id: 'test_user_id',
type: 'user',
url: '/my/url/',
title: 'added'
});
});
});
});