From 870cb09f56573c82bdb1bfc15939d79c13dc1b59 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 11 Jun 2015 13:40:41 +0200 Subject: [PATCH] fix user timeline activity --- app/coffee/modules/resources.coffee | 1 + app/modules/profile/profile.jade | 2 +- .../resources/users-resource.service.coffee | 13 ++- .../user-timeline.controller.coffee | 7 +- .../user-timeline.controller.spec.coffee | 89 ++++++++++--------- .../user-timeline.directive.coffee | 3 +- .../user-timeline.service.coffee | 8 +- .../user-timeline.service.spec.coffee | 30 ++++++- 8 files changed, 102 insertions(+), 51 deletions(-) diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index ba1c1dc7..991133c9 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -132,6 +132,7 @@ urls = { # Timeline "timeline-profile": "/timeline/profile" + "timeline-user": "/timeline/user" "timeline-project": "/timeline/project" # Search diff --git a/app/modules/profile/profile.jade b/app/modules/profile/profile.jade index afb1e8f4..5f0099d6 100644 --- a/app/modules/profile/profile.jade +++ b/app/modules/profile/profile.jade @@ -4,7 +4,7 @@ div.profile.centered(ng-if="vm.user") div.main div.timeline-wrapper(tg-profile-tabs) div(tg-profile-tab="activity", tab-title="{{'USER.PROFILE.ACTIVITY_TAB' | translate}}", tab-icon="icon-timeline", tab-active) - div(tg-user-timeline, user="vm.user") + div(tg-user-timeline, user="vm.user", current-user="vm.isCurrentUser") div(tab-disabled="{{vm.isCurrentUser}}", tg-profile-tab="projects", tab-title="{{'USER.PROFILE.PROJECTS_TAB' | translate}}", tab-icon="icon-project") div(tg-profile-projects, user="vm.user") diff --git a/app/modules/resources/users-resource.service.coffee b/app/modules/resources/users-resource.service.coffee index ea3e10b0..1c3bb07b 100644 --- a/app/modules/resources/users-resource.service.coffee +++ b/app/modules/resources/users-resource.service.coffee @@ -44,7 +44,7 @@ Resource = (urlsService, http) -> .then (result) -> return Immutable.fromJS(result.data) - service.getTimeline = (userId, page) -> + service.getProfileTimeline = (userId, page) -> params = { page: page } @@ -55,6 +55,17 @@ Resource = (urlsService, http) -> return http.get(url, params).then (result) -> return Immutable.fromJS(result.data) + service.getUserTimeline = (userId, page) -> + params = { + page: page + } + + url = urlsService.resolve("timeline-user") + url = "#{url}/#{userId}" + + return http.get(url, params).then (result) -> + return Immutable.fromJS(result.data) + return () -> return {"users": service} diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee index 6e28d4ee..a4e19031 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee @@ -41,9 +41,14 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta .getProjectTimeline(@.projectId, @.page) .then (newTimelineList) => @._timelineLoaded(newTimelineList) + else if @.currentUser + @userTimelineService + .getProfileTimeline(@.user.get("id"), @.page) + .then (newTimelineList) => + @._timelineLoaded(newTimelineList) else @userTimelineService - .getTimeline(@.user.get("id"), @.page) + .getUserTimeline(@.user.get("id"), @.page) .then (newTimelineList) => @._timelineLoaded(newTimelineList) diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee index 3db1dea3..ce4c8710 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee @@ -7,7 +7,7 @@ describe "UserTimelineController", -> _mockUserTimeline = () -> mocks.userTimelineService = { - getTimeline: sinon.stub(), + getProfileTimeline: sinon.stub(), getProjectTimeline: sinon.stub() } @@ -47,37 +47,54 @@ describe "UserTimelineController", -> { fake: "fake"} ]) - it "the scrollDisabled variable must be true during the timeline load", () -> + it "if is current user call getProfileTimeline and call timelineLoaded at the end", () -> myCtrl = controller "UserTimeline" + myCtrl.currentUser = true myCtrl.user = mockUser + myCtrl._timelineLoaded = sinon.spy() + thenStub = sinon.stub() - mocks.userTimelineService.getTimeline = sinon.stub() + mocks.userTimelineService.getProfileTimeline = sinon.stub() .withArgs(mockUser.get("id"), myCtrl.page) .returns({ then: thenStub }) - expect(myCtrl.scrollDisabled).to.be.false - myCtrl.loadTimeline() - - expect(myCtrl.scrollDisabled).to.be.true - thenStub.callArgWith(0, timelineList) - expect(myCtrl.scrollDisabled).to.be.false - - it "disable scroll when no more content", () -> - emptyTimelineList = Immutable.fromJS([]) - + it "if not current user call getUserTimeline and call timelineLoaded at the end", () -> myCtrl = controller "UserTimeline" + myCtrl.currentUser = false myCtrl.user = mockUser + myCtrl._timelineLoaded = sinon.spy() + thenStub = sinon.stub() - mocks.userTimelineService.getTimeline = sinon.stub() + mocks.userTimelineService.getUserTimeline = sinon.stub() + .withArgs(mockUser.get("id"), myCtrl.page) + .returns({ + then: thenStub + }) + + myCtrl.loadTimeline() + + thenStub.callArgWith(0, timelineList) + expect(myCtrl._timelineLoaded.withArgs(timelineList)).to.be.calledOnce + + it "the scrollDisabled variable must be true during the timeline load", () -> + myCtrl = controller "UserTimeline" + myCtrl.currentUser = true + myCtrl.user = mockUser + + myCtrl._timelineLoaded = sinon.spy() + + thenStub = sinon.stub() + + mocks.userTimelineService.getProfileTimeline = sinon.stub() .withArgs(mockUser.get("id"), myCtrl.page) .returns({ then: thenStub @@ -89,47 +106,35 @@ describe "UserTimelineController", -> expect(myCtrl.scrollDisabled).to.be.true - thenStub.callArgWith(0, emptyTimelineList) + it "disable scroll when no more content", () -> + myCtrl = controller "UserTimeline" + + myCtrl.scrollDisabled = true + + myCtrl._timelineLoaded(Immutable.fromJS(['xx', 'ii'])) + + expect(myCtrl.scrollDisabled).to.be.false + + myCtrl.scrollDisabled = true + myCtrl._timelineLoaded(Immutable.fromJS([])) expect(myCtrl.scrollDisabled).to.be.true it "pagiantion increase one every call to loadTimeline", () -> myCtrl = controller "UserTimeline" - myCtrl.user = mockUser - - thenStub = sinon.stub() - - mocks.userTimelineService.getTimeline = sinon.stub() - .withArgs(mockUser.get("id"), myCtrl.page) - .returns({ - then: thenStub - }) expect(myCtrl.page).to.equal(1) - myCtrl.loadTimeline() - - thenStub.callArgWith(0, timelineList) + myCtrl._timelineLoaded(timelineList) expect(myCtrl.page).to.equal(2) - it "timeline items", () -> + it "concat timeline list", () -> myCtrl = controller "UserTimeline" - myCtrl.user = mockUser - thenStub = sinon.stub() - - mocks.userTimelineService.getTimeline = sinon.stub() - .withArgs(mockUser.get("id"), myCtrl.page) - .returns({ - then: thenStub - }) - - myCtrl.loadTimeline() - - thenStub.callArgWith(0, timelineList) - - expect(myCtrl.timelineList.size).to.be.eql(4) + myCtrl._timelineLoaded(timelineList) + myCtrl._timelineLoaded(timelineList) + expect(myCtrl.timelineList.size).to.be.eql(8) it "project timeline items", () -> myCtrl = controller "UserTimeline" diff --git a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee index 45fd46d1..5b9314e8 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee @@ -5,7 +5,8 @@ UserTimelineDirective = -> controllerAs: "vm", scope: { projectId: "=projectid", - user: "=" + user: "=", + currentUser: "=" }, bindToController: true } diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee index fb656a17..d7995562 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee @@ -53,11 +53,15 @@ class UserTimelineService extends taiga.Service return true - getTimeline: (userId, page) -> - return @rs.users.getTimeline(userId, page) + getProfileTimeline: (userId, page) -> + return @rs.users.getProfileTimeline(userId, page) .then (result) => return result.filter (timeline) => @._filterValidTimelineItems(timeline) + getUserTimeline: (userId, page) -> + return @rs.users.getUserTimeline(userId, page) + .then (result) => + return result.filter (timeline) => @._filterValidTimelineItems(timeline) getProjectTimeline: (projectId, page) -> return @rs.projects.getTimeline(projectId, page) diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee index dd3f8243..86432a9b 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee @@ -115,18 +115,42 @@ describe "tgUserTimelineService", -> } ] - it "filter invalid user timeline items", (done) -> + it "filter invalid profile timeline items", (done) -> userId = 3 page = 2 - mocks.resources.users.getTimeline = (_userId_, _page_) -> + mocks.resources.users.getProfileTimeline = (_userId_, _page_) -> expect(_userId_).to.be.equal(userId) expect(_page_).to.be.equal(page) return $q (resolve, reject) -> resolve(Immutable.fromJS(valid_items)) - userTimelineService.getTimeline(userId, page) + userTimelineService.getProfileTimeline(userId, page) + .then (_items_) -> + items = _items_.toJS() + + expect(items).to.have.length(3) + expect(items[0]).to.be.eql(valid_items[0]) + expect(items[1]).to.be.eql(valid_items[3]) + expect(items[2]).to.be.eql(valid_items[5]) + + done() + + $rootScope.$apply() + + it "filter invalid user timeline items", (done) -> + userId = 3 + page = 2 + + mocks.resources.users.getUserTimeline = (_userId_, _page_) -> + expect(_userId_).to.be.equal(userId) + expect(_page_).to.be.equal(page) + + return $q (resolve, reject) -> + resolve(Immutable.fromJS(valid_items)) + + userTimelineService.getUserTimeline(userId, page) .then (_items_) -> items = _items_.toJS()