mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-12 00:31:21 -05:00
fd45c9d473
Add Campaign factory First basic tests for HeroSelectModal in demo flow Implement HeroSelectModal for demo flow Improve tests Disable empty test Fix text inconsistency around 'me' Just listen once Add HeroSelectModal events test Don't reuse destroyed modal Fix inconsistent modal close behavior Fix tests
210 lines
5.9 KiB
CoffeeScript
210 lines
5.9 KiB
CoffeeScript
Level = require 'models/Level'
|
|
Course = require 'models/Course'
|
|
Courses = require 'collections/Courses'
|
|
Campaign = require 'models/Campaign'
|
|
User = require 'models/User'
|
|
Classroom = require 'models/Classroom'
|
|
LevelSession = require 'models/LevelSession'
|
|
CourseInstance = require 'models/CourseInstance'
|
|
Achievement = require 'models/Achievement'
|
|
EarnedAchievement = require 'models/EarnedAchievement'
|
|
ThangType = require 'models/ThangType'
|
|
Users = require 'collections/Users'
|
|
Prepaid = require 'models/Prepaid'
|
|
|
|
module.exports = {
|
|
|
|
makeCourse: (attrs, sources={}) ->
|
|
_id = _.uniqueId('course_')
|
|
attrs = _.extend({}, {
|
|
_id: _id
|
|
name: _.string.humanize(_id)
|
|
releasePhase: 'released'
|
|
concepts: []
|
|
}, attrs)
|
|
|
|
attrs.campaignID ?= sources.campaign?.id or _.uniqueId('campaign_')
|
|
return new Course(attrs)
|
|
|
|
makeCampaign: (attrs, sources={}) ->
|
|
_id = _.uniqueId('campaign_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
name: _.string.humanize(_id)
|
|
levels: [@makeLevel(), @makeLevel()]
|
|
}, attrs)
|
|
|
|
if sources.levels
|
|
levelsMap = {}
|
|
sources.levels.each (level) ->
|
|
levelsMap[level.id] = level
|
|
attrs.levels = levelsMap
|
|
|
|
return new Campaign(attrs)
|
|
|
|
makeLevel: (attrs) ->
|
|
_id = _.uniqueId('level_')
|
|
attrs = _.extend({}, {
|
|
_id: _id
|
|
name: _.string.humanize(_id)
|
|
slug: _.string.dasherize(_id)
|
|
original: _id+'_original'
|
|
version:
|
|
major: 0
|
|
minor: 0
|
|
isLatestMajor: true
|
|
isLatestMinor: true
|
|
}, attrs)
|
|
return new Level(attrs)
|
|
|
|
makeUser: (attrs, sources={}) ->
|
|
_id = _.uniqueId('user_')
|
|
attrs = _.extend({
|
|
_id: _id
|
|
permissions: []
|
|
email: _id+'@email.com'
|
|
anonymous: false
|
|
name: _.string.humanize(_id)
|
|
}, attrs)
|
|
|
|
if sources.prepaid and not attrs.coursePrepaid
|
|
attrs.coursePrepaid = sources.prepaid.pick('_id', 'startDate', 'endDate')
|
|
|
|
return new User(attrs)
|
|
|
|
makeClassroom: (attrs, sources={}) ->
|
|
levels = sources.levels or [] # array of Levels collections
|
|
courses = sources.courses or new Courses()
|
|
members = sources.members or new Users()
|
|
|
|
_id = _.uniqueId('classroom_')
|
|
attrs = _.extend({}, {
|
|
_id: _id,
|
|
name: _.string.humanize(_id)
|
|
aceConfig: { language: 'python' }
|
|
}, attrs)
|
|
|
|
# populate courses
|
|
if not attrs.courses
|
|
courses = sources.courses or new Courses()
|
|
attrs.courses = (course.pick('_id') for course in courses.models)
|
|
|
|
# populate levels
|
|
for [courseAttrs, levels] in _.zip(attrs.courses, levels)
|
|
break if not courseAttrs
|
|
course ?= @makeCourse()
|
|
levels ?= new Levels()
|
|
courseAttrs.levels = (level.pick('_id', 'slug', 'name', 'original', 'type') for level in levels.models)
|
|
|
|
# populate members
|
|
if not attrs.members
|
|
members = members or new Users()
|
|
attrs.members = (member.id for member in members.models)
|
|
|
|
return new Classroom(attrs)
|
|
|
|
makeLevelSession: (attrs, sources={}) ->
|
|
level = sources.level or @makeLevel()
|
|
creator = sources.creator or @makeUser()
|
|
attrs = _.extend({}, {
|
|
level:
|
|
original: level.get('original'),
|
|
creator: creator.id,
|
|
}, attrs)
|
|
return new LevelSession(attrs)
|
|
|
|
makeCourseInstance: (attrs, sources={}) ->
|
|
_id = _.uniqueId('course_instance_')
|
|
course = sources.course or @makeCourse()
|
|
classroom = sources.classroom or @makeClassroom()
|
|
owner = sources.owner or @makeUser()
|
|
members = sources.members or new Users()
|
|
attrs = _.extend({}, {
|
|
_id
|
|
courseID: course.id
|
|
classroomID: classroom.id
|
|
ownerID: owner.id
|
|
members: members.pluck('_id')
|
|
}, attrs)
|
|
return new CourseInstance(attrs)
|
|
|
|
makeLevelCompleteAchievement: (attrs, sources={}) ->
|
|
_id = _.uniqueId('achievement_')
|
|
level = sources.level or @makeLevel()
|
|
attrs = _.extend({}, {
|
|
_id
|
|
name: _.string.humanize(_id)
|
|
query: {
|
|
'state.complete': true,
|
|
'level.original': level.get('original')
|
|
}
|
|
rewards: { gems: 10 }
|
|
worth: 20
|
|
}, attrs)
|
|
return new Achievement(attrs)
|
|
|
|
makeEarnedAchievement: (attrs, sources={}) ->
|
|
_id = _.uniqueId('earned_achievement_')
|
|
achievement = sources.achievement or @makeLevelCompleteAchievement()
|
|
user = sources.user or @makeUser()
|
|
attrs = _.extend({}, {
|
|
_id,
|
|
"achievement": achievement.id,
|
|
"user": user.id,
|
|
"earnedRewards": _.clone(achievement.get('rewards')),
|
|
"earnedPoints": achievement.get('worth'),
|
|
"achievementName": achievement.get('name'),
|
|
"notified": true
|
|
}, attrs)
|
|
return new EarnedAchievement(attrs)
|
|
|
|
makeThangType: (attrs) ->
|
|
_id = _.uniqueId('thang_type_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
name: _.string.humanize(_id)
|
|
}, attrs)
|
|
return new ThangType(attrs)
|
|
|
|
makePayment: (attrs, sources={}) ->
|
|
_id = _.uniqueId('payment_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
}, attrs)
|
|
return new ThangType(attrs)
|
|
|
|
makePrepaid: (attrs, sources={}) ->
|
|
_id = _.uniqueId('prepaid_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
type: 'course'
|
|
maxRedeemers: 10
|
|
endDate: moment().add(1, 'month').toISOString()
|
|
startDate: moment().subtract(1, 'month').toISOString()
|
|
}, attrs)
|
|
|
|
if not attrs.redeemers
|
|
redeemers = sources.redeemers or new Users()
|
|
attrs.redeemers = ({
|
|
userID: redeemer.id
|
|
date: moment().subtract(1, 'month').toISOString()
|
|
} for redeemer in redeemers.models)
|
|
|
|
return new Prepaid(attrs)
|
|
|
|
makeTrialRequest: (attrs, sources={}) ->
|
|
_id = _.uniqueId('trial_request_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
properties: {
|
|
firstName: 'Mr'
|
|
lastName: 'Professorson'
|
|
name: 'Mr Professorson'
|
|
email: 'an@email.com'
|
|
phoneNumber: '555-555-5555'
|
|
organization: 'Greendale'
|
|
district: 'Green District'
|
|
}
|
|
}, attrs)
|
|
}
|
|
|