Show front widget for paid and sampled free users

This commit is contained in:
James Allen 2018-04-30 17:13:57 +01:00
parent 5a580b6ef9
commit 6399621d1f
3 changed files with 40 additions and 4 deletions

View file

@ -157,7 +157,7 @@ module.exports = ProjectController =
hasSubscription: (cb)-> hasSubscription: (cb)->
LimitationsManager.userHasSubscriptionOrIsGroupMember currentUser, cb LimitationsManager.userHasSubscriptionOrIsGroupMember currentUser, cb
user: (cb) -> user: (cb) ->
User.findById user_id, "featureSwitches overleaf awareOfV2", cb User.findById user_id, "featureSwitches overleaf awareOfV2 features", cb
}, (err, results)-> }, (err, results)->
if err? if err?
logger.err err:err, "error getting data for project list page" logger.err err:err, "error getting data for project list page"
@ -172,6 +172,7 @@ module.exports = ProjectController =
user = results.user user = results.user
warnings = ProjectController._buildWarningsList results.v1Projects warnings = ProjectController._buildWarningsList results.v1Projects
ProjectController._injectProjectOwners projects, (error, projects) -> ProjectController._injectProjectOwners projects, (error, projects) ->
return next(error) if error? return next(error) if error?
viewModel = { viewModel = {
@ -193,6 +194,14 @@ module.exports = ProjectController =
else else
viewModel.showUserDetailsArea = false viewModel.showUserDetailsArea = false
paidUser = user.features?.github # use a heuristic for paid account
freeUserProportion = 0.85
sampleFreeUser = parseInt(user._id.toString().slice(-2), 16) < freeUserProportion * 255
showFrontWidget = paidUser or sampleFreeUser
logger.log {paidUser, sampleFreeUser, showFrontWidget}, 'deciding whether to show front widget'
if showFrontWidget
viewModel.frontChatWidgetRoomId = Settings.overleaf?.front_chat_widget_room_id
res.render 'project/list', viewModel res.render 'project/list', viewModel
timer.done() timer.done()

View file

@ -1,4 +1,4 @@
- if (settings.overleaf && settings.overleaf.front_chat_widget_room_id != null) - if (frontChatWidgetRoomId)
script. script.
window.FCSP = '#{settings.overleaf.front_chat_widget_room_id}'; window.FCSP = '#{frontChatWidgetRoomId}';
script(src="https://chat-assets.frontapp.com/v1/chat.bundle.js") script(src="https://chat-assets.frontapp.com/v1/chat.bundle.js")

View file

@ -15,6 +15,7 @@ describe "ProjectController", ->
@user = @user =
_id:"588f3ddae8ebc1bac07c9fa4" _id:"588f3ddae8ebc1bac07c9fa4"
first_name: "bjkdsjfk" first_name: "bjkdsjfk"
features: {}
@settings = @settings =
apis: apis:
chat: chat:
@ -300,6 +301,32 @@ describe "ProjectController", ->
done() done()
@ProjectController.projectListPage @req, @res @ProjectController.projectListPage @req, @res
describe 'front widget', (done) ->
beforeEach ->
@settings.overleaf =
front_chat_widget_room_id: 'chat-room-id'
it 'should show for paid users', (done) ->
@user.features.github = true
@res.render = (pageName, opts)=>
opts.frontChatWidgetRoomId.should.equal @settings.overleaf.front_chat_widget_room_id
done()
@ProjectController.projectListPage @req, @res
it 'should show for sample users', (done) ->
@user._id = '588f3ddae8ebc1bac07c9faa' # last two digits
@res.render = (pageName, opts)=>
opts.frontChatWidgetRoomId.should.equal @settings.overleaf.front_chat_widget_room_id
done()
@ProjectController.projectListPage @req, @res
it 'should not show for non sample users', (done) ->
@user._id = '588f3ddae8ebc1bac07c9fff' # last two digits
@res.render = (pageName, opts)=>
expect(opts.frontChatWidgetRoomId).to.equal undefined
done()
@ProjectController.projectListPage @req, @res
describe 'with overleaf-integration-web-module hook', -> describe 'with overleaf-integration-web-module hook', ->
beforeEach -> beforeEach ->
@V1Response = @V1Response =