From 5a6bed96b2488d4023116bd121c5f652fa8e8587 Mon Sep 17 00:00:00 2001 From: Matt Lott Date: Thu, 11 Aug 2016 22:26:47 -0700 Subject: [PATCH] :bug:Fix course solutions level ordering --- server/middleware/courses.coffee | 9 +++++++-- spec/server/functional/courses.spec.coffee | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/server/middleware/courses.coffee b/server/middleware/courses.coffee index 2070e5b1d..abb9a07f1 100644 --- a/server/middleware/courses.coffee +++ b/server/middleware/courses.coffee @@ -24,10 +24,15 @@ module.exports = campaign = yield Campaign.findById course.get('campaignID') throw new errors.NotFound('Campaign not found.') unless campaign - levelOriginals = (mongoose.Types.ObjectId(levelID) for levelID of campaign.get('levels')) + # TODO: why does campaign.get('levels') return opposite order from direct db query? + sortedLevelIDs = _.keys campaign.get('levels') + sortedLevelIDs.reverse() + + levelOriginals = (mongoose.Types.ObjectId(levelID) for levelID in sortedLevelIDs) query = { original: { $in: levelOriginals }, slug: { $exists: true }} - select = {documentation: 1, intro: 1, name: 1, slug: 1, thangs: 1} + select = {documentation: 1, intro: 1, name: 1, original: 1, slug: 1, thangs: 1} levels = yield Level.find(query).select(select).lean() + levels.sort((a, b) -> sortedLevelIDs.indexOf(a.original + '') - sortedLevelIDs.indexOf(b.original + '')) res.status(200).send(levels) fetchNextLevel: wrap (req, res) -> diff --git a/spec/server/functional/courses.spec.coffee b/spec/server/functional/courses.spec.coffee index beb867f20..77cd499af 100644 --- a/spec/server/functional/courses.spec.coffee +++ b/spec/server/functional/courses.spec.coffee @@ -150,8 +150,8 @@ describe 'GET /db/course/:handle/level-solutions', -> paredLevelB = _.pick(res.body, 'name', 'original', 'type') campaignJSONA = { name: 'Campaign A', levels: {} } - campaignJSONA.levels[paredLevelA.original] = paredLevelA campaignJSONA.levels[paredLevelB.original] = paredLevelB + campaignJSONA.levels[paredLevelA.original] = paredLevelA [res, body] = yield request.postAsync({uri: getURL('/db/campaign'), json: campaignJSONA}) @campaignA = yield Campaign.findById(res.body._id)