codecombat/test/app/factories.coffee
Matt Lott 84e3ee270a Add primer level support to classroom Ux
Exclude levels if classroom.aceConfig.language == level.primerLanguage

Closes #3856
2016-08-16 16:52:17 -07:00

211 lines
6 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', 'primerLanguage', '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)
attrs.level.primerLanguage = level.get('primerLanguage') if level.get('primerLanguage')
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)
}