Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 5e8b0fe

Browse files
author
Parth Shah
committed
Merge branch 'dev' into feature/nested-states
Conflicts: app/index.jade app/peer-review/peer-review.routes.js app/services/helpers.service.js
2 parents b8416aa + ef888c4 commit 5e8b0fe

19 files changed

+399
-52
lines changed

app/index.jade

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,10 @@ html
4747
// build:js js/vendor.js
4848
//- bower:js
4949
script(src='../bower_components/angular/angular.js')
50-
script(src="bower_components/lodash/lodash.min.js")
5150
script(src='../bower_components/angular-ui-router/release/angular-ui-router.js')
5251
script(src='../bower_components/angular-cookies/angular-cookies.js')
5352
script(src='../bower_components/angular-jwt/dist/angular-jwt.js')
5453
script(src='../bower_components/moment/moment.js')
55-
script(src="bower_components/restangular/dist/restangular.min.js")
5654
//- endbower
5755
//- inject:nonBowerScripts
5856
script(src="/scripts/auth0-1.6.4.js")
@@ -64,16 +62,16 @@ html
6462
// build:js js/app.js
6563
//- inject:js
6664
script(src="topcoder.module.js")
65+
script(src="topcoder.constants.js")
66+
script(src="topcoder.controller.js")
67+
script(src="topcoder.interceptors.js")
68+
script(src="topcoder.routes.js")
6769
script(src="account/account.module.js")
6870
script(src="layout/layout.module.js")
6971
script(src="peer-review/peer-review.module.js")
7072
script(src="sample/sample.module.js")
7173
script(src="blocks/exception/exception.module.js")
7274
script(src="blocks/logger/logger.module.js")
73-
script(src="topcoder.constants.js")
74-
script(src="topcoder.controller.js")
75-
script(src="topcoder.interceptors.js")
76-
script(src="topcoder.routes.js")
7775
script(src="account/account.routes.js")
7876
script(src="filters/local-time.filter.js")
7977
script(src="peer-review/peer-review.routes.js")
@@ -93,12 +91,24 @@ html
9391
script(src="blocks/exception/exception-handler.provider.js")
9492
script(src="blocks/exception/exception.js")
9593
script(src="blocks/logger/logger.js")
94+
script(src="bower_components/lodash/lodash.js")
95+
script(src="bower_components/lodash/lodash.min.js")
96+
script(src="bower_components/angular/angular.js")
97+
script(src="bower_components/angular/angular.min.js")
98+
script(src="bower_components/angular/index.js")
99+
script(src="bower_components/restangular/Gruntfile.js")
100+
script(src="bower_components/restangular/karma.conf.js")
101+
script(src="bower_components/restangular/karma.underscore.conf.js")
96102
script(src="layout/header/header.controller.js")
97103
script(src="peer-review/completed-review/completed-review.controller.js")
98104
script(src="peer-review/edit-review/edit-review.controller.js")
99105
script(src="peer-review/readOnlyScorecard/readOnlyScorecard.controller.js")
100106
script(src="peer-review/review-status/review-status.controller.js")
101107
script(src="peer-review/review-status/review-status.filter.js")
108+
script(src="bower_components/restangular/dist/restangular.js")
109+
script(src="bower_components/restangular/dist/restangular.min.js")
110+
script(src="bower_components/restangular/test/restangularSpec.js")
111+
script(src="bower_components/restangular/src/restangular.js")
102112
//- endinject
103113
104114
// inject:templates.js

app/peer-review/completed-review/completed-review.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
.scorecard-container
88
.challenge-info
9-
img(src="content/images/swift-logo.png")
9+
img(src="images/swift-logo.png")
1010

1111
h1(ng-bind="challenge.challengeName")
1212

app/peer-review/completed-review/completed-review.spec.js

Whitespace-only changes.

app/peer-review/edit-review/edit-review.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
.scorecard-container
88
.challenge-info
9-
img(src="content/images/swift-logo.png")
9+
img(src="images/swift-logo.png")
1010

1111
h1(ng-bind="challenge.challengeName")
1212

app/peer-review/edit-review/edit-review.spec.js

Whitespace-only changes.

app/peer-review/peer-review.routes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
url: '/challenge/:challengeId',
2525
templateUrl: 'peer-review/review-status/review-status.html',
2626
controller: 'ReviewStatusController',
27+
controllerAs: 'vm',
2728
data: {
2829
title: 'Peer Review'
2930
}

app/peer-review/readOnlyScorecard/readOnlyScorecard.jade

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.container(ng-show="loaded")
22
.scorecard-container
33
.challenge-info
4-
img(src="content/images/swift-logo.png")
4+
img(src="images/swift-logo.png")
55

66
h1(ng-bind="scorecard.name")
77

app/peer-review/readOnlyScorecard/readOnlyScorecard.spec.js

Whitespace-only changes.

app/peer-review/review-status/review-status.controller.js

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,56 @@
33

44
angular.module('tc.peer-review').controller('ReviewStatusController', ReviewStatusController);
55

6-
ReviewStatusController.$inject = ['$scope', '$state', '$stateParams', 'review', 'challenge', 'helpers', 'CONSTANTS'];
7-
8-
function ReviewStatusController($scope, $state, $stateParams, review, challenge, helpers, CONSTANTS) {
9-
$scope.submissionDownloadPath = CONSTANTS.submissionDownloadPath;
10-
$scope.domain = CONSTANTS.domain;
11-
$scope.loaded = false;
12-
$scope.challengeId = $stateParams.challengeId;
13-
$scope.challenge = null;
14-
$scope.getNextReview = function() {
15-
if ($scope.reviews.length >= 5) {
6+
ReviewStatusController.$inject = ['$state', '$stateParams', 'review', 'challenge', 'helpers', 'CONSTANTS'];
7+
8+
function ReviewStatusController($state, $stateParams, review, challenge, helpers, CONSTANTS) {
9+
var vm = this;
10+
vm.submissionDownloadPath = CONSTANTS.submissionDownloadPath;
11+
vm.domain = CONSTANTS.domain;
12+
vm.loaded = false;
13+
vm.challengeId = $stateParams.challengeId;
14+
vm.challenge = null;
15+
16+
vm.getNextReview = function() {
17+
if (vm.reviews.length >= 5) {
1618
alert('You may only complete 5 reviews.');
1719
return;
1820
}
19-
review.getNextReview($scope.challengeId).then(function(data) {
21+
review.getNextReview(vm.challengeId)
22+
.then(function(data) {
2023
var newReviewId = data.data.result.content;
2124

2225
$state.go('edit', {
23-
challengeId: $scope.challengeId,
26+
challengeId: vm.challengeId,
2427
reviewId: newReviewId
2528
});
26-
}).catch(function(error) {
29+
})
30+
.catch(function(error) {
2731
var message = 'An error occurred while trying to get the next review.\n' + error.status + ': ' + error.statusText;
2832
console.log(message);
2933
$state.reload();
3034
});
3135
};
3236

33-
challenge.getChallengeDetails($scope.challengeId).then(function(data) {
34-
$scope.challenge = data.data;
35-
});
36-
review.getUsersPeerReviews($scope.challengeId).then(function(data) {
37-
$scope.reviews = data.data.result.content;
38-
$scope.completed = helpers.countCompleted($scope.reviews);
39-
return $scope.loaded = true;
40-
});
41-
return challenge.getReviewEndDate($scope.challengeId).then(function(data) {
42-
return $scope.reviewsDue = data.data.result.content[0].scheduledEndTime + ' UTC';
43-
});
37+
activate();
38+
39+
function activate() {
40+
challenge.getChallengeDetails(vm.challengeId)
41+
.then(function(data) {
42+
vm.challenge = data.data;
43+
});
44+
45+
review.getUsersPeerReviews(vm.challengeId)
46+
.then(function(data) {
47+
vm.reviews = data.data.result.content;
48+
vm.completed = helpers.countCompleted(vm.reviews);
49+
// Move calls to $q.all(), and move this to the success callback there
50+
vm.loaded = true;
51+
});
52+
53+
challenge.getReviewEndDate(vm.challengeId).then(function(data) {
54+
vm.reviewsDue = data.data.result.content[0].scheduledEndTime;
55+
});
56+
}
4457
};
4558
})();
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
.container(ng-show="loaded")
1+
.container(ng-show="vm.loaded")
22
.back-link
33
.arrow
4-
p #[a.back(href="https://www.{{domain}}/challenge-details/{{challengeId}}/?type=develop") Back to Challenge]
4+
p #[a.back(href="https://www.{{vm.domain}}/challenge-details/{{challengeId}}/?type=develop") Back to Challenge]
55

6-
h1(ng-bind="challenge.challengeName")
6+
h1(ng-bind="vm.challenge.challengeName")
77

88
p.help-center Remember to uphold honesty and fair judging principles as described in the  #[a(href="http://help.topcoder.com") help center].
99

1010
hgroup
11-
h2 Your Reviews ({{completed}} of 5 completed)
11+
h2 Your Reviews ({{vm.completed}} of 5 completed)
1212

1313
h4 All Reviews Due: {{reviewsDue | localTime}}
1414

@@ -20,16 +20,16 @@
2020
th Submission
2121

2222
tbody
23-
tr(ng-repeat="review in reviews | orderBy: 'id'", ng-class-even="'even-rows'")
23+
tr(ng-repeat="review in vm.reviews | orderBy: 'id'", ng-class-even="'even-rows'")
2424
td Review {{$index + 1}}
2525

2626
td(ng-if="review.committed === 1")
27-
a.status(ui-sref="completed({challengeId: challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
27+
a.status(ui-sref="completed({challengeId: vm.challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
2828
td(ng-if="review.committed === 0")
29-
a.status(ui-sref="edit({challengeId: challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
29+
a.status(ui-sref="edit({challengeId: vm.challengeId, reviewId: review.id})") {{review.committed | reviewStatus}}
3030

3131
td
32-
a(ng-href="https://software.{{domain}}{{submissionDownloadPath}}{{review.uploadId}}")
32+
a(ng-href="https://software.{{vm.domain}}{{vm.submissionDownloadPath}}{{review.uploadId}}")
3333
span.glyphicon.glyphicon-download-alt
3434

35-
button.start-review(type="button", ng-click="getNextReview()") Start another review
35+
button.start-review(type="button", ng-click="vm.getNextReview()") Start another review
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/* jshint -W117, -W030 */
2+
describe('Review Status Controller', function() {
3+
var controller;
4+
var challenge = mockData.getMockChallenge();
5+
var challengeDates = mockData.getMockChallengeDates();
6+
var userReviews = mockData.getMockUsersPeerReviews();
7+
8+
beforeEach(function() {
9+
bard.appModule('topcoder');
10+
bard.inject(this, '$controller', '$rootScope', '$q');
11+
12+
var challengeService = {
13+
getChallengeDetails: function() {
14+
return $q.when(challenge);
15+
},
16+
getReviewEndDate: function() {
17+
return $q.when(challengeDates);
18+
}
19+
};
20+
var reviewService = {
21+
getUsersPeerReviews: function() {
22+
return $q.when(userReviews);
23+
}
24+
};
25+
26+
var stateParams = {
27+
challengeId: 123
28+
};
29+
30+
controller = $controller('ReviewStatusController', {
31+
challenge: challengeService,
32+
review: reviewService,
33+
$stateParams: stateParams
34+
});
35+
});
36+
37+
bard.verifyNoOutstandingHttpRequests();
38+
39+
it('should be created successfully', function() {
40+
expect(controller).to.exist;
41+
});
42+
43+
it('should have a submissionDownloadPath property set', function() {
44+
expect(controller.submissionDownloadPath).to.equal('/review/actions/DownloadContestSubmission?uid=');
45+
});
46+
47+
it('should have a domain property', function() {
48+
expect(controller.domain).to.exist;
49+
});
50+
it('should have a loaded property', function() {
51+
expect(controller.loaded).to.exist;
52+
});
53+
it('should have a challengeId property', function() {
54+
expect(controller.challengeId).to.exist;
55+
});
56+
57+
it('should have challenge set to null', function() {
58+
expect(controller.challenge).to.be.null;
59+
});
60+
61+
describe('after activation', function() {
62+
beforeEach(function() {
63+
$rootScope.$apply();
64+
});
65+
66+
it('should get a challenge', function() {
67+
expect(controller.challenge).to.exist;
68+
expect(controller.challenge.challengeName).to.equal(challenge.data.challengeName);
69+
});
70+
71+
it('should have a user\'s reviews', function() {
72+
expect(controller.reviews).to.exist;
73+
expect(controller.reviews).to.have.length(5);
74+
});
75+
76+
it('should know when the reviews are due', function() {
77+
expect(controller.reviewsDue).to.exist;
78+
expect(controller.reviewsDue).to.equal('2015-05-01T04:00Z');
79+
});
80+
});
81+
82+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* jshint -W117, -W030 */
2+
describe('Challenge Service', function() {
3+
var challengeData = mockData.getMockChallenge();
4+
var apiUrl = 'https://api.topcoder-dev.com/v2';
5+
6+
beforeEach(function() {
7+
bard.appModule('topcoder');
8+
bard.inject(this, '$httpBackend', '$q', 'challenge');
9+
});
10+
11+
it('exists', function() {
12+
expect(challenge).to.exist;
13+
});
14+
15+
it('getChallengeDetails returns challenge information', function() {
16+
$httpBackend
17+
.when('GET', apiUrl + '/challenges/' + 123456)
18+
.respond(200, [{}]);
19+
20+
challenge.getChallengeDetails(123456).then(function(data) {
21+
expect(data).to.exist;
22+
})
23+
$httpBackend.flush();
24+
});
25+
26+
it('getChallengeDetails returns error information', function() {
27+
$httpBackend
28+
.when('GET', apiUrl + '/challenges/' + 123456)
29+
.respond(500, {message: 'there was an error'});
30+
31+
challenge.getChallengeDetails(123456).catch(function(error) {
32+
console.log(error);
33+
expect(error.data.message).to.match(/error/);
34+
})
35+
$httpBackend.flush();
36+
});
37+
38+
});

app/services/helpers.service.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
parseAnswers: parseAnswers,
1515
compileReviewItems: compileReviewItems,
1616
countCompleted: countCompleted,
17+
getParameterByName: getParameterByName,
1718
getPageTitle: getPageTitle
1819
};
1920
return service;

app/services/scorecard.service.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
angular.module('tc.peer-review').factory('scorecard', scorecard);
55

6+
scorecard.$inject = ['CONSTANTS', 'api'];
7+
68
function scorecard(CONSTANTS, api) {
79
return {
810
getScorecardById: function(scorecardId) {

0 commit comments

Comments
 (0)