diff --git a/app/index.jade b/app/index.jade index 641538cf7..2f3c4dca3 100644 --- a/app/index.jade +++ b/app/index.jade @@ -18,13 +18,13 @@ html link(rel="stylesheet", href="assets/css/account/account.css") link(rel="stylesheet", href="assets/css/account/login.css") link(rel="stylesheet", href="assets/css/account/register.css") + link(rel="stylesheet", href="assets/css/layout/footer.css") + link(rel="stylesheet", href="assets/css/layout/header.css") link(rel="stylesheet", href="assets/css/peer-review/completed.css") link(rel="stylesheet", href="assets/css/peer-review/edit.css") link(rel="stylesheet", href="assets/css/peer-review/peer-review.css") link(rel="stylesheet", href="assets/css/peer-review/readOnlyScorecard.css") link(rel="stylesheet", href="assets/css/peer-review/reviewStatus.css") - link(rel="stylesheet", href="assets/css/layout/footer.css") - link(rel="stylesheet", href="assets/css/layout/header.css") //- endinject // endbuild @@ -63,8 +63,8 @@ html script(src="account/account.module.js") script(src="layout/layout.module.js") script(src="peer-review/peer-review.module.js") - script(src="account/account.routes.js") script(src="filters/local-time.filter.js") + script(src="account/account.routes.js") script(src="peer-review/peer-review.routes.js") script(src="peer-review/slideable.directive.js") script(src="services/api.service.js") @@ -80,10 +80,10 @@ html script(src="account/register/register.controller.js") script(src="layout/header/header.controller.js") script(src="peer-review/completed-review/completed-review.controller.js") - script(src="peer-review/edit-review/edit-review.controller.js") script(src="peer-review/readOnlyScorecard/readOnlyScorecard.controller.js") script(src="peer-review/review-status/review-status.controller.js") script(src="peer-review/review-status/review-status.filter.js") + script(src="peer-review/edit-review/edit-review.controller.js") //- endinject // inject:templates.js diff --git a/app/peer-review/review-status/review-status.controller.js b/app/peer-review/review-status/review-status.controller.js index ff14d4b94..a496508dd 100644 --- a/app/peer-review/review-status/review-status.controller.js +++ b/app/peer-review/review-status/review-status.controller.js @@ -12,6 +12,7 @@ vm.loaded = false; vm.challengeId = $stateParams.challengeId; vm.challenge = null; + vm.getNextReview = function() { if (vm.reviews.length >= 5) { alert('You may only complete 5 reviews.'); diff --git a/app/peer-review/review-status/review-status.spec.js b/app/peer-review/review-status/review-status.spec.js index 9a2646439..e20b07c23 100644 --- a/app/peer-review/review-status/review-status.spec.js +++ b/app/peer-review/review-status/review-status.spec.js @@ -1,19 +1,43 @@ /* jshint -W117, -W030 */ describe('Review Status Controller', function() { var controller; + var challenge = mockData.getMockChallenge(); + var challengeDates = mockData.getMockChallengeDates(); + var userReviews = mockData.getMockUsersPeerReviews(); beforeEach(function() { bard.appModule('topcoder'); bard.inject(this, '$controller', '$rootScope', '$q'); - controller = $controller('ReviewStatusController'); - $rootScope.$apply(); + var challengeService = { + getChallengeDetails: function() { + return $q.when(challenge); + }, + getReviewEndDate: function() { + return $q.when(challengeDates); + } + }; + var reviewService = { + getUsersPeerReviews: function() { + return $q.when(userReviews); + } + }; + + var stateParams = { + challengeId: 123 + }; + + controller = $controller('ReviewStatusController', { + challenge: challengeService, + review: reviewService, + $stateParams: stateParams + }); }); - // bard.verifyNoOutstandingHttpRequests(); + bard.verifyNoOutstandingHttpRequests(); it('should be created successfully', function() { - expect(controller).to.be.defined; + expect(controller).to.exist; }); it('should have a submissionDownloadPath property set', function() { @@ -21,16 +45,38 @@ describe('Review Status Controller', function() { }); it('should have a domain property', function() { - expect(controller.domain).to.be.defined; + expect(controller.domain).to.exist; }); it('should have a loaded property', function() { - expect(controller.loaded).to.be.defined; + expect(controller.loaded).to.exist; }); it('should have a challengeId property', function() { - expect(controller.challengeId).to.be.defined; + expect(controller.challengeId).to.exist; }); it('should have challenge set to null', function() { expect(controller.challenge).to.be.null; }); + + describe('after activation', function() { + beforeEach(function() { + $rootScope.$apply(); + }); + + it('should get a challenge', function() { + expect(controller.challenge).to.exist; + expect(controller.challenge.challengeName).to.equal(challenge.data.challengeName); + }); + + it('should have a user\'s reviews', function() { + expect(controller.reviews).to.exist; + expect(controller.reviews).to.have.length(5); + }); + + it('should know when the reviews are due', function() { + expect(controller.reviewsDue).to.exist; + expect(controller.reviewsDue).to.equal('2015-05-01T04:00Z'); + }); + }); + }); diff --git a/app/services/challenge.service.spec.js b/app/services/challenge.service.spec.js new file mode 100644 index 000000000..a32737d36 --- /dev/null +++ b/app/services/challenge.service.spec.js @@ -0,0 +1,38 @@ +/* jshint -W117, -W030 */ +describe('Challenge Service', function() { + var challengeData = mockData.getMockChallenge(); + var apiUrl = 'https://api.topcoder-dev.com/v2'; + + beforeEach(function() { + bard.appModule('topcoder'); + bard.inject(this, '$httpBackend', '$q', 'challenge'); + }); + + it('exists', function() { + expect(challenge).to.exist; + }); + + it('getChallengeDetails returns challenge information', function() { + $httpBackend + .when('GET', apiUrl + '/challenges/' + 123456) + .respond(200, [{}]); + + challenge.getChallengeDetails(123456).then(function(data) { + expect(data).to.exist; + }) + $httpBackend.flush(); + }); + + it('getChallengeDetails returns error information', function() { + $httpBackend + .when('GET', apiUrl + '/challenges/' + 123456) + .respond(500, {message: 'there was an error'}); + + challenge.getChallengeDetails(123456).catch(function(error) { + console.log(error); + expect(error.data.message).to.match(/error/); + }) + $httpBackend.flush(); + }); + +}); diff --git a/app/specs.html b/app/specs.html index 84d7ae89f..d7ea04463 100644 --- a/app/specs.html +++ b/app/specs.html @@ -83,8 +83,8 @@
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", + "currentStatus": "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" + } + } + } + } + } + + 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" + } + }; + } + + 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" + } + } + } + })();