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

Commit e8583aa

Browse files
committed
Merge pull request #691 from appirio-tech/dev
dev to QA
2 parents c03beb7 + 6aaef07 commit e8583aa

13 files changed

+562
-34
lines changed

app/index.jade

+1-2
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,6 @@ html
156156
script(src='../bower_components/react/react.js')
157157
script(src='../bower_components/react/react-dom.js')
158158
script(src='../bower_components/classnames/index.js')
159-
script(src='../bower_components/classnames/bind.js')
160-
script(src='../bower_components/classnames/dedupe.js')
161159
script(src='../bower_components/react-input-autosize/dist/react-input-autosize.min.js')
162160
script(src='../bower_components/react-select/dist/react-select.min.js')
163161
script(src='../bower_components/ngReact/ngReact.js')
@@ -336,6 +334,7 @@ html
336334
script(src="submissions/submissions.controller.js")
337335
script(src="submissions/submissions.routes.js")
338336
script(src="submissions/submit-design-files/submit-design-files.controller.js")
337+
script(src="submissions/submit-develop-files/submit-develop-files.controller.js")
339338
script(src="topcoder.constants.js")
340339
script(src="topcoder.controller.js")
341340
script(src="topcoder.interceptors.js")

app/profile/subtrack/design/design-challenges.jade

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
.no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0")
99
| Sorry, no successful challenges found.
1010

11-
tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams")
11+
tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams")

app/profile/subtrack/develop/develop-challenges.jade

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010
.no-challenges(ng-show="!vm.challenges || vm.challenges.length == 0")
1111
| Sorry, no successful challenges found.
1212

13-
tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams")
13+
tc-endless-paginator(state="vm.status.challenges", page-params="vm.pageParams")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.panel-body
2+
p.tc-error-messages.submissions-access-error(ng-bind="submissions.errorMessage")
3+

app/submissions/submissions.controller.js

+20-13
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,30 @@
66
SubmissionsController.$inject = ['challengeToSubmitTo', '$state'];
77

88
function SubmissionsController(challengeToSubmitTo, $state) {
9-
109
var vm = this;
1110

12-
var challenge = challengeToSubmitTo.challenge;
13-
vm.challengeTitle = challenge.name;
14-
vm.challengeId = challenge.id;
15-
vm.track = challenge.track.toLowerCase();
16-
17-
activate();
11+
vm.error = !!challengeToSubmitTo.error;
1812

19-
function activate() {
20-
var track = challengeToSubmitTo.challenge.track;
13+
if (vm.error) {
14+
vm.errorType = challengeToSubmitTo.error.type;
15+
vm.errorMessage = challengeToSubmitTo.error.message;
16+
vm.challengeError = vm.errorType === 'challenge';
17+
}
2118

22-
if (track === 'DESIGN') {
23-
$state.go('submissions.file.design');
24-
} else if (track === 'DEVELOP') {
25-
$state.go('submissions.file.develop')
19+
if (challengeToSubmitTo.challenge) {
20+
var challenge = challengeToSubmitTo.challenge;
21+
vm.challengeTitle = challenge.name;
22+
vm.challengeId = challenge.id;
23+
vm.track = challenge.track.toLowerCase();
24+
25+
if (challengeToSubmitTo.error) {
26+
$state.go('submissions.file.error');
27+
} else {
28+
if (challenge.track === 'DESIGN') {
29+
$state.go('submissions.file.design');
30+
} else if (challenge.track === 'DEVELOP') {
31+
$state.go('submissions.file.develop')
32+
}
2633
}
2734
}
2835
}

app/submissions/submissions.jade

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
.panel-page
2-
.panel-header.flex.space-between
2+
.panel-header.flex.space-between(ng-if="!submissions.challengeError")
33
a.panel-header__back-button.flex.space-between.middle(ng-href="https://www.{{DOMAIN}}/challenge-details/{{submissions.challengeId}}/?type={{submissions.track}}")
44

55
//- TODO: Replace below with svg tag

app/submissions/submissions.routes.js

+36-10
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,18 @@
2929

3030
var userHandle = UserService.getUserIdentity().handle;
3131

32+
var error = null;
33+
3234
return ChallengeService.getUserChallenges(userHandle, params)
3335
.then(function(challenge) {
34-
challenge = challenge[0];
36+
challenge = challenge[0].plain();
3537

3638
if (!challenge) {
37-
// TODO: There should be a challenge, redirect?
38-
alert('User is not associated with this challenge.');
39+
setErrorMessage('challenge', 'This is not a valid challenge. Use your browser\'s back button to return.');
40+
return {
41+
error: error,
42+
challenge: null
43+
};
3944
}
4045
var phaseType;
4146
var phaseId;
@@ -57,26 +62,43 @@
5762
return false;
5863
});
5964

65+
if (!isPhaseSubmission) {
66+
setErrorMessage('phase', 'Submission phases are not currently open for this challenge.')
67+
}
68+
6069
var isSubmitter = _.some(challenge.userDetails.roles, function(role) {
6170
return role === 'Submitter';
6271
});
6372

64-
if (!isPhaseSubmission || !isSubmitter) {
65-
// TODO: Where do we redirect if you can't submit?
66-
alert('You should not have access to this page');
73+
if (!isSubmitter) {
74+
setErrorMessage('submitter', 'You do not have a submitter role for this challenge.')
6775
}
6876

6977
return {
78+
error: error,
7079
challenge: challenge,
7180
phaseType: phaseType,
7281
phaseId: phaseId
7382
};
7483
})
7584
.catch(function(err) {
76-
console.log('ERROR GETTING CHALLENGE: ', err);
77-
alert('There was an error accessing this page');
78-
// TODO: Where do we redirect if there is an error?
85+
setErrorMessage('challenge', 'There was an error getting information for this challenge.');
86+
87+
return {
88+
error: error,
89+
challenge: null
90+
};
7991
});
92+
93+
function setErrorMessage(type, message) {
94+
// Sets the error as the first error encountered
95+
if (!error) {
96+
error = {
97+
type: type,
98+
message: message
99+
};
100+
}
101+
}
80102
}]
81103
}
82104
},
@@ -85,6 +107,10 @@
85107
abstract: true,
86108
template: '<ui-view/>'
87109
},
110+
'submissions.file.error': {
111+
url: '',
112+
templateUrl: 'submissions/submission-error/submission-error.html',
113+
},
88114
'submissions.file.design': {
89115
url:'',
90116
templateUrl: 'submissions/submit-design-files/submit-design-files.html',
@@ -96,7 +122,7 @@
96122
templateUrl: 'submissions/submit-develop-files/submit-develop-files.html',
97123
controller: 'SubmitDevelopFilesController',
98124
controllerAs: 'vm',
99-
},
125+
}
100126
};
101127

102128
for (var name in states) {

app/submissions/submissions.spec.js

+39-2
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,38 @@ describe('Submissions Controller', function() {
3333
expect(vm).to.exist;
3434
});
3535

36-
it('has properties on vm from the routes resolve', function() {
36+
it('sets error properties when there is an error passed down', function() {
37+
controller = $controller('SubmissionsController', {
38+
challengeToSubmitTo: {
39+
challenge: null,
40+
error: {
41+
type: 'challenge',
42+
message: 'error getting challenge information'
43+
}
44+
},
45+
$state: state
46+
});
47+
vm = controller;
48+
49+
expect(vm.errorType).to.equal('challenge');
50+
expect(vm.errorMessage).to.equal('error getting challenge information');
51+
expect(vm.challengeError).to.be.true;
52+
});
53+
54+
it('sets challenge properties when there is a challenge from the routes resolve', function() {
3755
expect(vm.challengeTitle).to.equal(mockChallenge.challenge.name);
3856
expect(vm.challengeId).to.equal(30049240);
3957
expect(vm.track).to.equal(mockChallenge.challenge.track.toLowerCase());
4058
});
4159

60+
4261
describe('routes to the correct child state for', function() {
4362
it('design challenges', function() {
4463

4564
expect(state.go).calledWith('submissions.file.design');
4665
});
4766

4867
it('develop challenges', function() {
49-
5068
controller = $controller('SubmissionsController', {
5169
challengeToSubmitTo: {
5270
challenge: {
@@ -62,5 +80,24 @@ describe('Submissions Controller', function() {
6280
expect(state.go).calledWith('submissions.file.develop');
6381
});
6482

83+
it('errors', function() {
84+
controller = $controller('SubmissionsController', {
85+
challengeToSubmitTo: {
86+
challenge: {
87+
name: 'Challenge Name',
88+
track: 'DEVELOP',
89+
id: 30049240
90+
},
91+
error: {
92+
type: 'phase',
93+
message: 'No open submissions phase'
94+
}
95+
},
96+
$state: state
97+
});
98+
vm = controller;
99+
100+
expect(state.go).calledWith('submissions.file.error');
101+
});
65102
});
66103
});

app/submissions/submit-design-files/submit-design-files.controller.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,8 @@
163163
SubmissionsService.getPresignedURL(vm.submissionsBody, files, updateProgress);
164164
}
165165

166-
/*
167-
* Callback for updating submission upload process. It looks for different phases e.g. PREPARE, UPLOAD, FINISH
168-
* of the submission upload and updates the progress UI accordingly.
169-
*/
166+
// Callback for updating submission upload process. It looks for different phases e.g. PREPARE, UPLOAD, FINISH
167+
// of the submission upload and updates the progress UI accordingly.
170168
function updateProgress(phase, args) {
171169
// for PREPARE phase
172170
if (phase === 'PREPARE') {

0 commit comments

Comments
 (0)