diff --git a/app/controllers/serviceDetailController.js b/app/controllers/serviceDetailController.js index 4da2a196..3cffb4cb 100644 --- a/app/controllers/serviceDetailController.js +++ b/app/controllers/serviceDetailController.js @@ -9,11 +9,11 @@ app.controller('ServiceDetailController', function ($controller, $routeParams, $ })); if (!$scope.isAnonymous()) { - UserRepo.getUser().then(function(response) { + UserRepo.getUser().then(function (response) { var apiRes = angular.fromJson(response.body); - if(apiRes.meta.status === 'SUCCESS') { + if (apiRes.meta.status === 'SUCCESS') { $scope.user = apiRes.payload.User; - $scope.hasVoted = function(fp) { + $scope.hasVoted = function (fp) { return fp.voters.indexOf($scope.user.id) >= 0; }; } @@ -26,12 +26,17 @@ app.controller('ServiceDetailController', function ($controller, $routeParams, $ ServiceRepo.ready().then(function () { $scope.service = ServiceRepo.findById($routeParams.serviceId); + $scope.notesTableParams = $scope.service.getNotesTableParams(); $scope.ideasTableParams = $scope.service.getIdeasTableParams(); $scope.featureProposalsTableParams = $scope.service.getFeatureProposalsTableParams(); + + $scope.hasFeatureProposals = function () { + return $scope.featureProposalsTableParams.data.length > 0; + }; }); - $scope.setActiveTab = function(tab) { + $scope.setActiveTab = function (tab) { $scope.activeTab = tab; }; @@ -39,9 +44,9 @@ app.controller('ServiceDetailController', function ($controller, $routeParams, $ FeatureProposalRepo.vote(fp); }; - $scope.getServiceWebsite = function(service) { + $scope.getServiceWebsite = function (service) { var link = service.website; - if(link.indexOf('//') === -1) { + if (link.indexOf('//') === -1) { link = '//' + link; } return link; diff --git a/app/views/detail/service.html b/app/views/detail/service.html index aea25194..fb05ff17 100644 --- a/app/views/detail/service.html +++ b/app/views/detail/service.html @@ -1,5 +1,3 @@ - -

@@ -8,8 +6,16 @@


-

Software:  {{service.software}}

-

Website:  {{service.website}}

+

+ Software: +  {{service.software}} +

+

+ Website: + +  {{service.website}} + +

@@ -53,11 +59,11 @@

Ideas

--> -
+

Feature Proposal

- +
- +
@@ -67,4 +73,4 @@

Feature Proposal

-
+
\ No newline at end of file diff --git a/tests/mocks/repo/mockFeatureProposalRepo.js b/tests/mocks/repo/mockFeatureProposalRepo.js new file mode 100644 index 00000000..74980d63 --- /dev/null +++ b/tests/mocks/repo/mockFeatureProposalRepo.js @@ -0,0 +1,94 @@ +var mockFeatureProposalRepos = [ + +]; + +angular.module('mock.featureProposalRepo', []).service('FeatureProposalRepo', function ($q) { + var featureProposalRepo = this; + + featureProposalRepo.list = mockFeatureProposalRepos; + + featureProposalRepo.create = function (note) { + var defer = $q.defer(); + note.id = featureProposalRepo.list.length + 1; + featureProposalRepo.list.push(note); + defer.resolve(note); + return defer.promise; + }; + + featureProposalRepo.update = function (note) { + var defer = $q.defer(); + for (var i in featureProposalRepo.list) { + if (featureProposalRepo.list[i].id === note.id) { + angular.extend(featureProposalRepo.list[i], note); + note = featureProposalRepo.list[i]; + break; + } + } + defer.resolve(note); + return defer.promise; + }; + + var updateFeatureProposal = function (note) { + featureProposalRepo.update(note); + }; + + featureProposalRepo.getAll = function () { + var defer = $q.defer(); + defer.resolve(featureProposalRepo.list); + return defer.promise; + }; + + featureProposalRepo.fetchById = function (noteId) { + var note = new Note(); + for (var i in featureProposalRepo.list) { + if (featureProposalRepo.list[i].id === id) { + note = featureProposalRepo.list[i]; + break; + } + } + return note; + }; + + featureProposalRepo.getPageSettings = function () { + var mockPageSettings = { + filters: { + active: [true] + }, + sort: [{ + property: 'service.name', + direction: 'ASC' + }, { + property: 'lastModified', + direction: 'DESC' + }] + }; + + return mockPageSettings; + }; + + featureProposalRepo.getTableParams = function () { + // @todo + return {}; + }; + + featureProposalRepo.fetchPage = function (pageSettings) { + // @todo + return {}; + }; + + var safePage = function (resolve) { + // @todo + }; + + featureProposalRepo.page = function () { + return $q(function (resolve) { + safePage(resolve); + }); + }; + + var table = { + // @todo + }; + + return featureProposalRepo; +}); \ No newline at end of file diff --git a/tests/unit/controllers/serviceDetailControllerTest.js b/tests/unit/controllers/serviceDetailControllerTest.js new file mode 100644 index 00000000..72acbe3b --- /dev/null +++ b/tests/unit/controllers/serviceDetailControllerTest.js @@ -0,0 +1,33 @@ +describe('controller: ServiceDetailController', function () { + + var scope, controller; + + beforeEach(module('core')); + + beforeEach(module('app')); + + beforeEach(module('mock.featureProposalRepo')); + + beforeEach(module('mock.serviceRepo')); + + beforeEach(module('mock.userRepo')); + + beforeEach(inject(function ($controller, $rootScope, _FeatureProposalRepo_, _ServiceRepo_, _UserRepo_) { + installPromiseMatchers(); + scope = $rootScope.$new(); + controller = $controller('ServiceDetailController', { + $scope: scope, + FeatureProposalRepo: _FeatureProposalRepo_, + ServiceRepo: _ServiceRepo_, + UserRepo: _UserRepo_ + }); + + })); + + describe('Is the controller defined', function () { + it('should be defined', function () { + expect(controller).toBeDefined(); + }); + }); + +}); \ No newline at end of file