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

Commit 6aaef07

Browse files
committed
Merge pull request #690 from appirio-tech/SUP-3017-error-page
Add error messages for all cases
2 parents 00ed688 + 661f7a0 commit 6aaef07

File tree

6 files changed

+105
-26
lines changed

6 files changed

+105
-26
lines changed
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
});

assets/css/submissions/submissions.scss

+6
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,9 @@
4444
}
4545
}
4646
}
47+
48+
.submissions-access-error {
49+
text-align: center;
50+
margin-left: auto;
51+
margin-right: auto;
52+
}

0 commit comments

Comments
 (0)