A/B test experimental languages hero select

Test group not shown experimental languages on first hero select.
This commit is contained in:
Matt Lott 2014-11-10 11:08:17 -08:00
parent 97c4ff2e7e
commit c5b26a4376
4 changed files with 45 additions and 20 deletions

View file

@ -16,7 +16,7 @@ module.exports = class LevelSetupManager extends CocoClass
@loadSession(@supermodel)
# build modals and prevent them from disappearing.
@heroesModal = new PlayHeroesModal({supermodel: @supermodel, session: @session, confirmButtonI18N: 'play.next', levelID: options.levelID})
@heroesModal = new PlayHeroesModal({supermodel: @supermodel, session: @session, confirmButtonI18N: 'play.next', levelID: options.levelID, hadEverChosenHero: @options.hadEverChosenHero})
@inventoryModal = new InventoryModal({supermodel: @supermodel, session: @session, levelID: options.levelID})
@heroesModalDestroy = @heroesModal.destroy
@inventoryModalDestroy = @inventoryModal.destroy

View file

@ -102,16 +102,31 @@ module.exports = class User extends CocoModel
@castButtonTextGroup
getDirectFirstGroup: ->
# Group -1 is not participating
# Group 0 is original behavior
# Group 1 goes directly to first level if new user
# Targetting users with testGroupNumber < 128
unless @directFirstGroup?
if me.isAdmin()
@directFirstGroup = 0
if me.isAdmin() or me.get('testGroupNumber') >= 128
@directFirstGroup = -1
else
@directFirstGroup = me.get('testGroupNumber') % 2
application.tracker.identify directFirstGroup: @directFirstGroup
@directFirstGroup
getExperimentalLangGroup: ->
# Group -1 is not participating
# Group 0 is original behavior
# Group 1 isn't shown experimental languages in hero modal when launching beginner campaign level
# Targetting users with testGroupNumber >= 128
unless @experimentalLangGroup?
if me.isAdmin() or me.get('testGroupNumber') < 128
@experimentalLangGroup = -1
else
@experimentalLangGroup = me.get('testGroupNumber') % 2
application.tracker.identify experimentalLangGroup: @experimentalLangGroup
@experimentalLangGroup
getHighlightArrowSoundGroup: ->
return @highlightArrowGroup if @highlightArrowGroup
group = me.get('testGroupNumber') % 8

View file

@ -131,27 +131,24 @@ module.exports = class WorldMapView extends RootView
if @nextLevel and @levelStatusMap[@nextLevel] is 'complete'
@nextLevel = null
@render()
if @supermodel.finished()
@initABTestAutoFirstLevel()
@initABTestAutoFirstLevel()
initABTestAutoFirstLevel: ->
# A/B testing directly navigating to first level
# Excluding admins and users who have already started
# TODO: Cleanup @afterRender when this test is finished
firstLevelID = 'dungeons-of-kithgard'
unless @nextLevel? or (firstLevelID of @levelStatusMap) or me.isAdmin()
testGroup = me.getDirectFirstGroup()
testGroup = me.getDirectFirstGroup()
console.log 'WorldMapView initABTestAutoFirstLevel', testGroup
unless @nextLevel? or (firstLevelID of @levelStatusMap) or testGroup is -1
@ABTestSkipHighlight = testGroup is 1
if testGroup is 1
@ABTestSkipHighlight = true
target = $("a[data-level-id='" + firstLevelID + "']")
return if $(target).attr('disabled') or $(target).parent().hasClass 'locked'
levelElement = $(target).parents('.level')
levelID = levelElement.data('level-id')
@startLevel levelElement
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
else
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
@ABTestSkipHighlight = false
window.tracker?.trackEvent 'World Map', levelID: firstLevelID, directFirstGroup: testGroup
else
@ABTestSkipHighlight = false

View file

@ -33,6 +33,7 @@ module.exports = class PlayHeroesModal extends ModalView
@supermodel.loadCollection(@heroes, 'heroes')
@stages = {}
@session = options.session
@initCodeLanguageList options.hadEverChosenHero
onHeroesLoaded: ->
for hero in @heroes.models
@ -48,14 +49,7 @@ module.exports = class PlayHeroesModal extends ModalView
context = super(context)
context.heroes = @heroes.models
context.level = @options.level
context.codeLanguages = [
{id: 'python', name: 'Python (Default)'}
{id: 'javascript', name: 'JavaScript'}
{id: 'coffeescript', name: 'CoffeeScript'}
{id: 'clojure', name: 'Clojure (Experimental)'}
{id: 'lua', name: 'Lua (Experimental)'}
{id: 'io', name: 'Io (Experimental)'}
]
context.codeLanguages = @codeLanguageList
context.codeLanguage = @codeLanguage = @options?.session?.get('codeLanguage') ? me.get('aceConfig')?.language ? 'python'
context.confirmButtonI18N = @confirmButtonI18N
context
@ -78,6 +72,25 @@ module.exports = class PlayHeroesModal extends ModalView
@buildCodeLanguages()
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'game-menu-open', volume: 1
initCodeLanguageList: (hadEverChosenHero) ->
@codeLanguageList = [
{id: 'python', name: 'Python (Default)'}
{id: 'javascript', name: 'JavaScript'}
{id: 'coffeescript', name: 'CoffeeScript'}
]
# A/B test showing experimental languages on first hero select
# Group -1 is not participating
# Group 0 is original behavior
# Group 1 isn't shown experimental languages in hero modal when launching beginner campaign level
testGroup = me.getExperimentalLangGroup()
if hadEverChosenHero? or testGroup isnt 1
@codeLanguageList.push id: 'clojure', name: 'Clojure (Experimental)'
@codeLanguageList.push id: 'lua', name: 'Lua (Experimental)'
@codeLanguageList.push id: 'io', name: 'Io (Experimental)'
unless hadEverChosenHero? or testGroup is -1
window.tracker?.trackEvent 'Heroes Modal', experimentalLangGroup: testGroup
onHeroChanged: (e) ->
direction = e.direction # 'left' or 'right'
heroItem = $(e.relatedTarget)