diff --git a/frontend/src/css/modules/challenge.scss b/frontend/src/css/modules/challenge.scss index 337aa741d6..2e921c49a3 100644 --- a/frontend/src/css/modules/challenge.scss +++ b/frontend/src/css/modules/challenge.scss @@ -370,4 +370,42 @@ md-select .md-select-value span:first-child:after { .filter-icon { padding: 10px; -} \ No newline at end of file +} +.no-margin { + margin: 0px; +} +.nav-underline { + display: flex; + justify-content: space-around; + border-bottom: 1px solid #e0e0e0; + li { + margin-bottom: -0.5%; + } + + .nav-item { + flex: 1; + text-align: center; + color: #9e9e9e; + + .nav-link { + display: block; + padding: 10px 0; + color: #9e9e9e; + text-decoration: none; + border: none; + background-color: transparent; + font-weight: bold; + transition: border-bottom 0.3s ease, color 0.3s ease; + + &.active { + border-bottom: 2px solid #000; + color: #000; + } + + &:hover { + color: #000; + } + } + } +} + diff --git a/frontend/src/js/controllers/challengeListCtrl.js b/frontend/src/js/controllers/challengeListCtrl.js index 6c9db6e240..9f061c2249 100644 --- a/frontend/src/js/controllers/challengeListCtrl.js +++ b/frontend/src/js/controllers/challengeListCtrl.js @@ -28,6 +28,7 @@ vm.noneUpcomingChallenge = false; vm.nonePastChallenge = false; vm.getAllResults = function(parameters, resultsArray, typ){ + parameters.method = 'GET'; parameters.callback = { onSuccess: function(response) { var data = response.data; @@ -59,7 +60,7 @@ var url = data.next; var slicedUrl = url.substring(url.indexOf('challenges/challenge'), url.length); parameters.url = slicedUrl; - vm.getAllResults(parameters, resultsArray); + vm.getAllResults(parameters, resultsArray, typ); } else { utilities.hideLoader(); if (resultsArray.length === 0) { @@ -88,19 +89,13 @@ // calls for ongoing challenges parameters.url = 'challenges/challenge/present/approved/public'; - parameters.method = 'GET'; - vm.getAllResults(parameters, vm.currentList, "noneCurrentChallenge"); // calls for upcoming challenges parameters.url = 'challenges/challenge/future/approved/public'; - parameters.method = 'GET'; - vm.getAllResults(parameters, vm.upcomingList, "noneUpcomingChallenge"); // calls for past challenges parameters.url = 'challenges/challenge/past/approved/public'; - parameters.method = 'GET'; - vm.getAllResults(parameters, vm.pastList, "nonePastChallenge"); vm.scrollUp = function() { @@ -115,3 +110,4 @@ } })(); + diff --git a/frontend/src/views/web/challenge-list.html b/frontend/src/views/web/challenge-list.html index b0e1247c4c..e7aaa2c731 100644 --- a/frontend/src/views/web/challenge-list.html +++ b/frontend/src/views/web/challenge-list.html @@ -1,6 +1,30 @@
+

All Challenges

+ +
+ +
+ -
Ongoing Challenges
+
None
@@ -43,7 +68,7 @@ -
Upcoming Challenges
+
None
+
+ -
Past Challenges
+
None
@@ -91,7 +118,9 @@
View Details  
+
+ diff --git a/frontend/tests/controllers-test/challengeListCtrl.test.js b/frontend/tests/controllers-test/challengeListCtrl.test.js index 92df7f1c96..501c201909 100644 --- a/frontend/tests/controllers-test/challengeListCtrl.test.js +++ b/frontend/tests/controllers-test/challengeListCtrl.test.js @@ -316,6 +316,53 @@ describe('Unit tests for challenge list controller', function () { expect(vm.getAllResults).toHaveBeenCalledTimes(2); }); - + it('ensures method is set to GET inside getAllResults function', function() { + isPresentChallengeSuccess = true; + isUpcomingChallengeSucess = null; + isPastChallengeSuccess = null; + successResponse = { + next: null, + results: [] + }; + + vm = createController(); + spyOn(utilities, 'sendRequest').and.callThrough(); + + const parameters = { + url: 'challenges/challenge/present/approved/public' + }; + + vm.getAllResults(parameters, [], 'noneCurrentChallenge'); + + expect(utilities.sendRequest).toHaveBeenCalled(); + expect(utilities.sendRequest.calls.argsFor(0)[0].method).toEqual('GET'); + }); + it('tests scrollUp function binding to window scroll events', function() { + vm = createController(); + + var mockElement = { + bind: jasmine.createSpy('bind') + }; + + spyOn(angular, 'element').and.returnValue(mockElement); + + vm.scrollUp(); + + expect(angular.element).toHaveBeenCalled(); + + expect(mockElement.bind).toHaveBeenCalledWith('scroll', jasmine.any(Function)); + + var scrollCallback = mockElement.bind.calls.mostRecent().args[1]; + + spyOn(utilities, 'showButton'); + var mockScrollContext = { pageYOffset: 100 }; + scrollCallback.call(mockScrollContext); + expect(utilities.showButton).toHaveBeenCalled(); + + spyOn(utilities, 'hideButton'); + mockScrollContext.pageYOffset = 99; + scrollCallback.call(mockScrollContext); + expect(utilities.hideButton).toHaveBeenCalled(); + }); }); });