diff --git a/app/peer-review/completed-review/completed-review.controller.js b/app/peer-review/completed-review/completed-review.controller.js index 95962f92c..9ba2f1a12 100644 --- a/app/peer-review/completed-review/completed-review.controller.js +++ b/app/peer-review/completed-review/completed-review.controller.js @@ -27,41 +27,34 @@ import angular from 'angular' function activate() { var promises = [ - handle, ChallengeService.getChallengeDetails($stateParams.challengeId), ReviewService.getReview($stateParams.reviewId), ScorecardService.getScorecard(vm.challengeId) ] $q.all(promises) - .then(function(response) { + .then(function(responses) { vm.stats.username = handle - var challenge = response[1].data - vm.challenge = challenge + vm.challenge = responses[0] - var reviewData = response[2].data.result.content - vm.review = reviewData - vm.stats.submissionId = reviewData.submissionId - vm.stats.uploadId = reviewData.uploadId - vm.stats.createdAt = reviewData.createdAt - vm.stats.updatedAt = reviewData.updatedAt + vm.review = responses[1] + vm.stats.submissionId = vm.review.submissionId + vm.stats.uploadId = vm.review.uploadId + vm.stats.createdAt = vm.review.createdAt + vm.stats.updatedAt = vm.review.updatedAt - var scorecardData = response[3].data.result.content[0] + var scorecardData = responses[2][0] var scorecardId = scorecardData.id ScorecardService.getScorecardQuestions(scorecardId) - .then(function(data) { - var questions = data.data.result.content - + .then(function(questions) { Helpers.storeById(vm.scorecard.questions, questions) Helpers.parseQuestions(vm.scorecard.questions) return ReviewService.getReviewItems($stateParams.reviewId) - }).then(function(data) { - var answers = data.data.result.content - + }).then(function(answers) { Helpers.parseAnswers(vm.scorecard.questions, answers) vm.loaded = true diff --git a/app/peer-review/edit-review/edit-review.controller.js b/app/peer-review/edit-review/edit-review.controller.js index ca495458d..ed80b462d 100644 --- a/app/peer-review/edit-review/edit-review.controller.js +++ b/app/peer-review/edit-review/edit-review.controller.js @@ -65,32 +65,28 @@ import angular from 'angular' function activate() { var promises = [ - handle, ChallengeService.getChallengeDetails(vm.challengeId), ReviewService.getReview($stateParams.reviewId), ScorecardService.getScorecard(vm.challengeId) ] $q.all(promises) - .then(function(response) { + .then(function(responses) { vm.stats.username = handle - var challenge = response[1].data - vm.challenge = challenge + vm.challenge = responses[0] - var reviewData = response[2].data.result.content - vm.review = reviewData - vm.stats.submissionId = reviewData.submissionId - vm.stats.uploadId = reviewData.uploadId - vm.stats.createdAt = reviewData.createdAt - vm.stats.updatedAt = reviewData.updatedAt + vm.review = responses[1] + vm.stats.submissionId = vm.review.submissionId + vm.stats.uploadId = vm.review.uploadId + vm.stats.createdAt = vm.review.createdAt + vm.stats.updatedAt = vm.review.updatedAt - var scorecardData = response[3].data.result.content[0] + var scorecardData = responses[2][0] var scorecardId = scorecardData.id ScorecardService.getScorecardQuestions(scorecardId) - .then(function(data) { - var questions = data.data.result.content + .then(function(questions) { Helpers.storeById(vm.scorecard.questions, questions) Helpers.parseQuestions(vm.scorecard.questions) @@ -98,9 +94,7 @@ import angular from 'angular' return ReviewService.getReviewItems($stateParams.reviewId) }) - .then(function(data) { - var answers = data.data.result.content - + .then(function(answers) { vm.saved = Helpers.parseAnswers(vm.scorecard.questions, answers) vm.loaded = true diff --git a/app/peer-review/peer-review.routes.js b/app/peer-review/peer-review.routes.js index 5c73f0ae7..0deede08d 100644 --- a/app/peer-review/peer-review.routes.js +++ b/app/peer-review/peer-review.routes.js @@ -19,7 +19,7 @@ import angular from 'angular' }, 'review.status': { parent: 'review', - url: '/challenge/:challengeId/', + url: '/challenges/:challengeId/reviews/', data: { title: 'Peer Review' }, @@ -33,7 +33,7 @@ import angular from 'angular' }, 'review.readOnlyScorecard': { parent: 'review', - url: '/scorecard/:scorecardId/', + url: '/challenges/:challengeId/scorecards/:scorecardId/', data: { title: 'Scorecard' }, @@ -47,7 +47,7 @@ import angular from 'angular' }, 'review.completed': { parent: 'review', - url: '/:challengeId/reviews/:reviewId/completed/', + url: '/challenges/:challengeId/reviews/:reviewId/completed/', data: { title: 'Completed' }, @@ -61,7 +61,7 @@ import angular from 'angular' }, 'review.edit': { parent: 'review', - url: '/:challengeId/reviews/:reviewId/edit/', + url: '/challenges/:challengeId/reviews/:reviewId/edit/', data: { title: 'Edit Review' }, diff --git a/app/peer-review/review-status/review-status.controller.js b/app/peer-review/review-status/review-status.controller.js index 6a8e37351..5db5dacbf 100644 --- a/app/peer-review/review-status/review-status.controller.js +++ b/app/peer-review/review-status/review-status.controller.js @@ -21,7 +21,7 @@ import angular from 'angular' } ReviewService.getNextReview(vm.challengeId) .then(function(data) { - var newReviewId = data.data.result.content + var newReviewId = data $state.go('review.edit', { challengeId: vm.challengeId, @@ -39,19 +39,19 @@ import angular from 'angular' function activate() { ChallengeService.getChallengeDetails(vm.challengeId) .then(function(data) { - vm.challenge = data.data + vm.challenge = data }) ReviewService.getUsersPeerReviews(vm.challengeId) .then(function(data) { - vm.reviews = data.data.result.content + vm.reviews = data.plain() vm.completed = Helpers.countCompleted(vm.reviews) // Move calls to $q.all(), and move this to the success callback there vm.loaded = true }) - ChallengeService.getReviewEndDate(vm.challengeId).then(function(data) { - vm.reviewsDue = data.data.result.content[0].scheduledEndTime + ChallengeService.getPhase(vm.challengeId, 'REVIEW').then(function(data) { + vm.reviewsDue = data.scheduledEndTime }) } } diff --git a/app/peer-review/review-status/review-status.jade b/app/peer-review/review-status/review-status.jade index ec12f677c..7d4c77879 100644 --- a/app/peer-review/review-status/review-status.jade +++ b/app/peer-review/review-status/review-status.jade @@ -1,6 +1,7 @@ .review-status-container(ng-show="vm.loaded") .back-link .arrow + p #[a.back(href="https://www.{{vm.domain}}/challenge-details/{{vm.challengeId}}/?type=develop") Back to Challenge] h1(ng-bind="vm.challenge.challengeName") @@ -30,6 +31,6 @@ td a(ng-href="https://software.{{vm.domain}}/review/actions/DownloadContestSubmission?uid={{review.uploadId}}") - span.glyphicon.glyphicon-download-alt + i.fa.fa-download button.start-review(type="button", ng-click="vm.getNextReview()") Start another review diff --git a/app/peer-review/review-status/review-status.spec.js b/app/peer-review/review-status/review-status.spec.js index 14f36d70c..ebd6bfc72 100644 --- a/app/peer-review/review-status/review-status.spec.js +++ b/app/peer-review/review-status/review-status.spec.js @@ -15,13 +15,14 @@ describe('Review Status Controller', function() { getChallengeDetails: function() { return $q.when(challenge) }, - getReviewEndDate: function() { + getPhase: function() { return $q.when(challengeDates) } } var reviewService = { getUsersPeerReviews: function() { + userReviews.plain = function() { return this } return $q.when(userReviews) } } @@ -64,7 +65,7 @@ describe('Review Status Controller', function() { it('should get a challenge', function() { expect(controller.challenge).to.exist - expect(controller.challenge.challengeName).to.equal(challenge.data.challengeName) + expect(controller.challenge.challengeName).to.equal(challenge.challengeName) }) it('should have a user\'s reviews', function() { diff --git a/app/services/challenge.service.js b/app/services/challenge.service.js index a0e4691fd..b10086a62 100644 --- a/app/services/challenge.service.js +++ b/app/services/challenge.service.js @@ -7,16 +7,16 @@ import moment from 'moment' angular.module('tc.services').factory('ChallengeService', ChallengeService) - ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q'] + ChallengeService.$inject = ['CONSTANTS', 'ApiService', '$q', '$log'] - function ChallengeService(CONSTANTS, ApiService, $q) { + function ChallengeService(CONSTANTS, ApiService, $q, $log) { var api = ApiService.restangularV3 - + var apiV2 = ApiService.restangularV2 var service = { getChallenges: getChallenges, getUserChallenges: getUserChallenges, getUserMarathonMatches: getUserMarathonMatches, - getReviewEndDate: getReviewEndDate, + getPhase: getPhase, getChallengeDetails: getChallengeDetails, processActiveDevDesignChallenges: processActiveDevDesignChallenges, processActiveMarathonMatches: processActiveMarathonMatches, @@ -40,14 +40,23 @@ import moment from 'moment' return api.one('members', handle.toLowerCase()).all('mms').getList(params) } - function getReviewEndDate(challengeId) { - var url = CONSTANTS.API_URL + '/phases/?filter=' + encodeURIComponent('challengeId=' + challengeId + '&phaseType=4') - return ApiService.requestHandler('GET', url) + function getPhase(challengeId, phaseType) { + return api.one('challenges', challengeId).getList('phases').then( + function(phases) { + return _.find(phases, function(p) { return p.phaseType.toUpperCase() === phaseType}) + }, + function(err) { + $log.error(err) + } + ) } function getChallengeDetails(challengeId) { - var url = CONSTANTS.API_URL_V2 + '/challenges/' + challengeId - return ApiService.requestHandler('GET', url, {}, true) + // var url = CONSTANTS.API_URL_V2 + '/challenges/' + challengeId + // return ApiService.requestHandler('GET', url, {}, true) + return apiV2.one('challenges', challengeId).get().then( + function(data) { return data.plain() } + ) } function processActiveDevDesignChallenges(challenges) { diff --git a/app/services/helpers.service.js b/app/services/helpers.service.js index 6c29134cd..f7b74e4ca 100644 --- a/app/services/helpers.service.js +++ b/app/services/helpers.service.js @@ -8,8 +8,6 @@ import angular from 'angular' Helpers.$inject = ['$window', '$location', '$state', '$http', '$filter', 'ISO3166'] function Helpers($window, $location, $state, $http, $filter, ISO3166) { - // TODO: Separate helpers by submodule - var service = { storeById: storeById, parseQuestions: parseQuestions, diff --git a/app/services/review.service.js b/app/services/review.service.js index e2ee638bf..162ff1640 100644 --- a/app/services/review.service.js +++ b/app/services/review.service.js @@ -8,6 +8,8 @@ import angular from 'angular' ReviewService.$inject = ['CONSTANTS', 'ApiService'] function ReviewService(CONSTANTS, ApiService) { + var api = ApiService.getApiServiceProvider('Review') + var service = { getUsersPeerReviews: getUsersPeerReviews, getReview: getReview, @@ -20,39 +22,36 @@ import angular from 'angular' /////////////// function getUsersPeerReviews(challengeId) { - var url = CONSTANTS.API_URL + '/reviews/?filter=' + encodeURIComponent('challengeId=' + challengeId) - return ApiService.requestHandler('GET', url) + return api.all('reviews').getList({filter: encodeURIComponent('challengeId=' + challengeId)}) } function getReview(reviewId) { - var url = CONSTANTS.API_URL + '/reviews/' + reviewId - return ApiService.requestHandler('GET', url) + return api.one('reviews', reviewId).get() } function getReviewItems(reviewId) { - var url = CONSTANTS.API_URL + '/reviewItems/?filter=' + encodeURIComponent('reviewId=' + reviewId) - return ApiService.requestHandler('GET', url) + return api.all('reviewItems').getList({filter: encodeURIComponent('reviewId=' + reviewId)}) } function getNextReview(challengeId) { - var url = CONSTANTS.API_URL + '/reviews/' + challengeId + '/assignNextReview' - return ApiService.requestHandler('PUT', url) + return api.one('reviews', challengeId).customPUT(null, 'assignNextReview', null, null) } function saveReviewItems(body, isPreviouslySaved) { - var method = isPreviouslySaved ? 'PUT' : 'POST' - var url = CONSTANTS.API_URL + '/reviewItems/' - return ApiService.requestHandler(method, url, JSON.stringify(body)) + if (isPreviouslySaved) { + return api.all('reviewItems').customPUT(body, null, null, null) + } else { + return api.all('reviewItems').post(body) + } } function markAsCompleted(reviewId) { - var url = CONSTANTS.API_URL + '/reviews/' + reviewId var body = { committed: 1, id: reviewId } - return ApiService.requestHandler('PUT', url, JSON.stringify(body)) + return api.one('reviews', reviewId).customPUT(body, null, null, null) } } })() diff --git a/app/services/scorecard.service.js b/app/services/scorecard.service.js index ab0d6ac75..603b6a13d 100644 --- a/app/services/scorecard.service.js +++ b/app/services/scorecard.service.js @@ -8,6 +8,8 @@ import angular from 'angular' ScorecardService.$inject = ['CONSTANTS', 'ApiService'] function ScorecardService(CONSTANTS, ApiService) { + var api = ApiService.restangularV3 + var service = { getScorecardById: getScorecardById, getScorecard: getScorecard, @@ -18,18 +20,24 @@ import angular from 'angular' /////////////// function getScorecardById(scorecardId) { - var url = CONSTANTS.API_URL + '/scorecards/?filter=' + encodeURIComponent('scorecardId=' + scorecardId) - return ApiService.requestHandler('GET', url) + return api.all('scorecards').getList({filter: encodeURIComponent('scorecardId='+scorecardId)}) + .then(function(data) { + return data.plain() + }) } function getScorecard(challengeId) { - var url = CONSTANTS.API_URL + '/scorecards/?filter=' + encodeURIComponent('challengeId=' + challengeId) - return ApiService.requestHandler('GET', url) + return api.all('scorecards').getList({filter: encodeURIComponent('challengeId='+challengeId)}) + .then(function(data) { + return data.plain() + }) } function getScorecardQuestions(scorecardId) { - var url = CONSTANTS.API_URL + '/scorecardQuestions/?filter=' + encodeURIComponent('scorecardId=' + scorecardId) - return ApiService.requestHandler('GET', url) + return api.all('scorecardQuestions').getList({filter: encodeURIComponent('scorecardId='+scorecardId)}) + .then(function(data) { + return data.plain() + }) } } })() diff --git a/assets/css/peer-review/peer-review.scss b/assets/css/peer-review/peer-review.scss index 05fd54627..b8d158e9e 100644 --- a/assets/css/peer-review/peer-review.scss +++ b/assets/css/peer-review/peer-review.scss @@ -1,24 +1,23 @@ @import 'topcoder/tc-includes'; -// Remove glyphicon reference and mixin when peer-review is redesigned. -@include glyphicons-halflings; // Shared (review-status.html, edit-review.html, completed-review.html) .review-status-container, .completed-review-container, .edit-review-container, .read-only-scorecard-container { @include clearfix; - padding-bottom: 30px; + max-width: 1200px; + margin: 30px auto; .back-link { - .arrow, p { display: inline-block; vertical-align: middle; } .arrow { - background: url('/images/arrow-prev.png') no-repeat; - background-position: 0 0; height: 13px; width: 8px; + margin-right: 5px; + background: url('../../images/arrow-prev.png') no-repeat; + background-position: 0 0; } p { @include font-with-weight('Merriweather Sans', 300); diff --git a/tests/test-helpers/mock-data.js b/tests/test-helpers/mock-data.js index aaf606592..010143707 100644 --- a/tests/test-helpers/mock-data.js +++ b/tests/test-helpers/mock-data.js @@ -56,60 +56,58 @@ module.exports = (function() { function getMockChallenge() { return { - 'data': { - 'challengeType': 'Code', - 'challengeName': 'Swift Peer Review 2', - 'challengeId': 30049140, - 'projectId': 8619, - 'forumId': '28423', - 'detailedRequirements': '

This is a test challenge

\n', - 'finalSubmissionGuidelines': '

...

\n', - 'reviewScorecardId': '30001821', - 'cmcTaskId': '', - 'numberOfCheckpointsPrizes': 0, - 'topCheckPointPrize': '', - 'postingDate': '2015-04-01T17:02:38.606-0400', - 'registrationEndDate': '2015-04-03T09:41:57.633-0400', - 'checkpointSubmissionEndDate': '', - 'submissionEndDate': '2015-04-03T09:51:21.299-0400', - 'reviewType': 'PEER', - 'type': 'develop', - 'forumLink': 'http://apps.topcoder.com/forums/?module=Category&categoryID=28423', - 'appealsEndDate': '2015-05-01T00:00:00.000-0400', - 'status': 'Active', - 'challengeCommunity': 'develop', - 'directUrl': 'https://www.topcoder.com/direct/contest/detail.action?projectId=30049140', - 'technology': [ - 'SWIFT', - 'iOS' - ], - 'prize': [], - 'currentPhaseName': 'Review', - 'currentPhaseRemainingTime': -5163519, - 'currentPhaseEndDate': '2015-05-01T00:00:00.000-0400', - 'Documents': [], - 'platforms': [ - 'iOS' - ], - 'event': { - 'id': 3445, - 'description': 'Swift Developer Program', - 'shortDescription': 'swiftprogram' - }, - 'serverInformation': { - 'serverName': 'TopCoder API', - 'apiVersion': '0.0.1', - 'requestDuration': 69, - 'currentTime': 1435601894786 - }, - 'requesterInformation': { - 'id': '43d437b236d87c6360b589afe40d2b71006e4c34-RvzavyG1JoTJmgH1', - 'remoteIP': '12.251.243.22', - 'receivedParams': { - 'apiVersion': 'v2', - 'challengeId': '30049140', - 'action': 'getChallenge' - } + 'challengeType': 'Code', + 'challengeName': 'Swift Peer Review 2', + 'challengeId': 30049140, + 'projectId': 8619, + 'forumId': '28423', + 'detailedRequirements': '

This is a test challenge

\n', + 'finalSubmissionGuidelines': '

...

\n', + 'reviewScorecardId': '30001821', + 'cmcTaskId': '', + 'numberOfCheckpointsPrizes': 0, + 'topCheckPointPrize': '', + 'postingDate': '2015-04-01T17:02:38.606-0400', + 'registrationEndDate': '2015-04-03T09:41:57.633-0400', + 'checkpointSubmissionEndDate': '', + 'submissionEndDate': '2015-04-03T09:51:21.299-0400', + 'reviewType': 'PEER', + 'type': 'develop', + 'forumLink': 'http://apps.topcoder.com/forums/?module=Category&categoryID=28423', + 'appealsEndDate': '2015-05-01T00:00:00.000-0400', + 'status': 'Active', + 'challengeCommunity': 'develop', + 'directUrl': 'https://www.topcoder.com/direct/contest/detail.action?projectId=30049140', + 'technology': [ + 'SWIFT', + 'iOS' + ], + 'prize': [], + 'currentPhaseName': 'Review', + 'currentPhaseRemainingTime': -5163519, + 'currentPhaseEndDate': '2015-05-01T00:00:00.000-0400', + 'Documents': [], + 'platforms': [ + 'iOS' + ], + 'event': { + 'id': 3445, + 'description': 'Swift Developer Program', + 'shortDescription': 'swiftprogram' + }, + 'serverInformation': { + 'serverName': 'TopCoder API', + 'apiVersion': '0.0.1', + 'requestDuration': 69, + 'currentTime': 1435601894786 + }, + 'requesterInformation': { + 'id': '43d437b236d87c6360b589afe40d2b71006e4c34-RvzavyG1JoTJmgH1', + 'remoteIP': '12.251.243.22', + 'receivedParams': { + 'apiVersion': 'v2', + 'challengeId': '30049140', + 'action': 'getChallenge' } } } @@ -943,121 +941,101 @@ module.exports = (function() { function getMockChallengeDates() { return { - 'data': { - 'id': '-13e20d1e:14e4052be45:-7f73', - 'result': { - 'success': true, - 'status': 200, - 'metadata': null, - 'content': [{ - 'updatedAt': null, - 'createdAt': null, - 'createdBy': null, - 'updatedBy': null, - 'scheduledStartTime': '2015-04-03T13:58Z', - 'scheduledEndTime': '2015-05-01T04:00Z', - 'actualStartTime': '2015-04-03T13:58Z', - 'actualEndTime': null - }] - }, - 'version': 'v3' - } + 'updatedAt': null, + 'createdAt': null, + 'createdBy': null, + 'updatedBy': null, + 'scheduledStartTime': '2015-04-03T13:58Z', + 'scheduledEndTime': '2015-05-01T04:00Z', + 'actualStartTime': '2015-04-03T13:58Z', + 'actualEndTime': null } } function getMockUsersPeerReviews() { - return { - 'data': { - 'id': '-13e20d1e:14e4052be45:-7f71', - 'result': { - 'success': true, - 'status': 200, - 'metadata': null, - 'content': [{ - 'updatedAt': '2015-06-15T17:23Z', - 'createdAt': '2015-06-12T22:25Z', - 'createdBy': '2000003', - 'updatedBy': '2000003', - 'id': 388840, - 'resourceId': null, - 'submissionId': 506562, - 'projectPhaseId': null, - 'scorecardId': null, - 'committed': 1, - 'uploadId': 506581, - 'score': 100.0, - 'initialScore': 100.0, - 'reviewerUserId': 2000003, - 'submitterUserId': 1800109 - }, { - 'updatedAt': '2015-06-23T19:32Z', - 'createdAt': '2015-06-15T17:23Z', - 'createdBy': '2000003', - 'updatedBy': '2000003', - 'id': 388850, - 'resourceId': null, - 'submissionId': 506597, - 'projectPhaseId': null, - 'scorecardId': null, - 'committed': 0, - 'uploadId': 506616, - 'score': 0.0, - 'initialScore': 0.0, - 'reviewerUserId': 2000003, - 'submitterUserId': 2000007 - }, { - 'updatedAt': '2015-06-23T18:24Z', - 'createdAt': '2015-06-15T21:10Z', - 'createdBy': '2000003', - 'updatedBy': '2000003', - 'id': 388851, - 'resourceId': null, - 'submissionId': 506557, - 'projectPhaseId': null, - 'scorecardId': null, - 'committed': 1, - 'uploadId': 506576, - 'score': 13.199999809265137, - 'initialScore': 66.0, - 'reviewerUserId': 2000003, - 'submitterUserId': 1800103 - }, { - 'updatedAt': '2015-06-23T19:32Z', - 'createdAt': '2015-06-23T19:32Z', - 'createdBy': '2000003', - 'updatedBy': '2000003', - 'id': 388860, - 'resourceId': null, - 'submissionId': 506570, - 'projectPhaseId': null, - 'scorecardId': null, - 'committed': 0, - 'uploadId': 506589, - 'score': 0.0, - 'initialScore': 0.0, - 'reviewerUserId': 2000003, - 'submitterUserId': 1800125 - }, { - 'updatedAt': '2015-06-23T19:32Z', - 'createdAt': '2015-06-23T19:32Z', - 'createdBy': '2000003', - 'updatedBy': '2000003', - 'id': 388861, - 'resourceId': null, - 'submissionId': 506583, - 'projectPhaseId': null, - 'scorecardId': null, - 'committed': 0, - 'uploadId': 506602, - 'score': 0.0, - 'initialScore': 0.0, - 'reviewerUserId': 2000003, - 'submitterUserId': 1800159 - }] - }, - 'version': 'v3' + return [ + { + 'updatedAt': '2015-06-15T17:23Z', + 'createdAt': '2015-06-12T22:25Z', + 'createdBy': '2000003', + 'updatedBy': '2000003', + 'id': 388840, + 'resourceId': null, + 'submissionId': 506562, + 'projectPhaseId': null, + 'scorecardId': null, + 'committed': 1, + 'uploadId': 506581, + 'score': 100.0, + 'initialScore': 100.0, + 'reviewerUserId': 2000003, + 'submitterUserId': 1800109 + }, { + 'updatedAt': '2015-06-23T19:32Z', + 'createdAt': '2015-06-15T17:23Z', + 'createdBy': '2000003', + 'updatedBy': '2000003', + 'id': 388850, + 'resourceId': null, + 'submissionId': 506597, + 'projectPhaseId': null, + 'scorecardId': null, + 'committed': 0, + 'uploadId': 506616, + 'score': 0.0, + 'initialScore': 0.0, + 'reviewerUserId': 2000003, + 'submitterUserId': 2000007 + }, { + 'updatedAt': '2015-06-23T18:24Z', + 'createdAt': '2015-06-15T21:10Z', + 'createdBy': '2000003', + 'updatedBy': '2000003', + 'id': 388851, + 'resourceId': null, + 'submissionId': 506557, + 'projectPhaseId': null, + 'scorecardId': null, + 'committed': 1, + 'uploadId': 506576, + 'score': 13.199999809265137, + 'initialScore': 66.0, + 'reviewerUserId': 2000003, + 'submitterUserId': 1800103 + }, { + 'updatedAt': '2015-06-23T19:32Z', + 'createdAt': '2015-06-23T19:32Z', + 'createdBy': '2000003', + 'updatedBy': '2000003', + 'id': 388860, + 'resourceId': null, + 'submissionId': 506570, + 'projectPhaseId': null, + 'scorecardId': null, + 'committed': 0, + 'uploadId': 506589, + 'score': 0.0, + 'initialScore': 0.0, + 'reviewerUserId': 2000003, + 'submitterUserId': 1800125 + }, { + 'updatedAt': '2015-06-23T19:32Z', + 'createdAt': '2015-06-23T19:32Z', + 'createdBy': '2000003', + 'updatedBy': '2000003', + 'id': 388861, + 'resourceId': null, + 'submissionId': 506583, + 'projectPhaseId': null, + 'scorecardId': null, + 'committed': 0, + 'uploadId': 506602, + 'score': 0.0, + 'initialScore': 0.0, + 'reviewerUserId': 2000003, + 'submitterUserId': 1800159 } - } + ] } function getMockBlogs() {