fix user timeline activity
parent
f4b145e976
commit
870cb09f56
|
@ -132,6 +132,7 @@ urls = {
|
||||||
|
|
||||||
# Timeline
|
# Timeline
|
||||||
"timeline-profile": "/timeline/profile"
|
"timeline-profile": "/timeline/profile"
|
||||||
|
"timeline-user": "/timeline/user"
|
||||||
"timeline-project": "/timeline/project"
|
"timeline-project": "/timeline/project"
|
||||||
|
|
||||||
# Search
|
# Search
|
||||||
|
|
|
@ -4,7 +4,7 @@ div.profile.centered(ng-if="vm.user")
|
||||||
div.main
|
div.main
|
||||||
div.timeline-wrapper(tg-profile-tabs)
|
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-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(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")
|
div(tg-profile-projects, user="vm.user")
|
||||||
|
|
|
@ -44,7 +44,7 @@ Resource = (urlsService, http) ->
|
||||||
.then (result) ->
|
.then (result) ->
|
||||||
return Immutable.fromJS(result.data)
|
return Immutable.fromJS(result.data)
|
||||||
|
|
||||||
service.getTimeline = (userId, page) ->
|
service.getProfileTimeline = (userId, page) ->
|
||||||
params = {
|
params = {
|
||||||
page: page
|
page: page
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,17 @@ Resource = (urlsService, http) ->
|
||||||
return http.get(url, params).then (result) ->
|
return http.get(url, params).then (result) ->
|
||||||
return Immutable.fromJS(result.data)
|
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 () ->
|
||||||
return {"users": service}
|
return {"users": service}
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,14 @@ class UserTimelineController extends mixOf(taiga.Controller, taiga.PageMixin, ta
|
||||||
.getProjectTimeline(@.projectId, @.page)
|
.getProjectTimeline(@.projectId, @.page)
|
||||||
.then (newTimelineList) =>
|
.then (newTimelineList) =>
|
||||||
@._timelineLoaded(newTimelineList)
|
@._timelineLoaded(newTimelineList)
|
||||||
|
else if @.currentUser
|
||||||
|
@userTimelineService
|
||||||
|
.getProfileTimeline(@.user.get("id"), @.page)
|
||||||
|
.then (newTimelineList) =>
|
||||||
|
@._timelineLoaded(newTimelineList)
|
||||||
else
|
else
|
||||||
@userTimelineService
|
@userTimelineService
|
||||||
.getTimeline(@.user.get("id"), @.page)
|
.getUserTimeline(@.user.get("id"), @.page)
|
||||||
.then (newTimelineList) =>
|
.then (newTimelineList) =>
|
||||||
@._timelineLoaded(newTimelineList)
|
@._timelineLoaded(newTimelineList)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe "UserTimelineController", ->
|
||||||
|
|
||||||
_mockUserTimeline = () ->
|
_mockUserTimeline = () ->
|
||||||
mocks.userTimelineService = {
|
mocks.userTimelineService = {
|
||||||
getTimeline: sinon.stub(),
|
getProfileTimeline: sinon.stub(),
|
||||||
getProjectTimeline: sinon.stub()
|
getProjectTimeline: sinon.stub()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,37 +47,54 @@ describe "UserTimelineController", ->
|
||||||
{ fake: "fake"}
|
{ 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 = controller "UserTimeline"
|
||||||
|
myCtrl.currentUser = true
|
||||||
myCtrl.user = mockUser
|
myCtrl.user = mockUser
|
||||||
|
|
||||||
|
myCtrl._timelineLoaded = sinon.spy()
|
||||||
|
|
||||||
thenStub = sinon.stub()
|
thenStub = sinon.stub()
|
||||||
|
|
||||||
mocks.userTimelineService.getTimeline = sinon.stub()
|
mocks.userTimelineService.getProfileTimeline = sinon.stub()
|
||||||
.withArgs(mockUser.get("id"), myCtrl.page)
|
.withArgs(mockUser.get("id"), myCtrl.page)
|
||||||
.returns({
|
.returns({
|
||||||
then: thenStub
|
then: thenStub
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(myCtrl.scrollDisabled).to.be.false
|
|
||||||
|
|
||||||
myCtrl.loadTimeline()
|
myCtrl.loadTimeline()
|
||||||
|
|
||||||
expect(myCtrl.scrollDisabled).to.be.true
|
|
||||||
|
|
||||||
thenStub.callArgWith(0, timelineList)
|
thenStub.callArgWith(0, timelineList)
|
||||||
|
|
||||||
expect(myCtrl.scrollDisabled).to.be.false
|
it "if not current user call getUserTimeline and call timelineLoaded at the end", () ->
|
||||||
|
|
||||||
it "disable scroll when no more content", () ->
|
|
||||||
emptyTimelineList = Immutable.fromJS([])
|
|
||||||
|
|
||||||
myCtrl = controller "UserTimeline"
|
myCtrl = controller "UserTimeline"
|
||||||
|
myCtrl.currentUser = false
|
||||||
myCtrl.user = mockUser
|
myCtrl.user = mockUser
|
||||||
|
|
||||||
|
myCtrl._timelineLoaded = sinon.spy()
|
||||||
|
|
||||||
thenStub = sinon.stub()
|
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)
|
.withArgs(mockUser.get("id"), myCtrl.page)
|
||||||
.returns({
|
.returns({
|
||||||
then: thenStub
|
then: thenStub
|
||||||
|
@ -89,47 +106,35 @@ describe "UserTimelineController", ->
|
||||||
|
|
||||||
expect(myCtrl.scrollDisabled).to.be.true
|
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
|
expect(myCtrl.scrollDisabled).to.be.true
|
||||||
|
|
||||||
it "pagiantion increase one every call to loadTimeline", () ->
|
it "pagiantion increase one every call to loadTimeline", () ->
|
||||||
myCtrl = controller "UserTimeline"
|
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)
|
expect(myCtrl.page).to.equal(1)
|
||||||
|
|
||||||
myCtrl.loadTimeline()
|
myCtrl._timelineLoaded(timelineList)
|
||||||
|
|
||||||
thenStub.callArgWith(0, timelineList)
|
|
||||||
|
|
||||||
expect(myCtrl.page).to.equal(2)
|
expect(myCtrl.page).to.equal(2)
|
||||||
|
|
||||||
it "timeline items", () ->
|
it "concat timeline list", () ->
|
||||||
myCtrl = controller "UserTimeline"
|
myCtrl = controller "UserTimeline"
|
||||||
myCtrl.user = mockUser
|
|
||||||
|
|
||||||
thenStub = sinon.stub()
|
myCtrl._timelineLoaded(timelineList)
|
||||||
|
myCtrl._timelineLoaded(timelineList)
|
||||||
mocks.userTimelineService.getTimeline = sinon.stub()
|
expect(myCtrl.timelineList.size).to.be.eql(8)
|
||||||
.withArgs(mockUser.get("id"), myCtrl.page)
|
|
||||||
.returns({
|
|
||||||
then: thenStub
|
|
||||||
})
|
|
||||||
|
|
||||||
myCtrl.loadTimeline()
|
|
||||||
|
|
||||||
thenStub.callArgWith(0, timelineList)
|
|
||||||
|
|
||||||
expect(myCtrl.timelineList.size).to.be.eql(4)
|
|
||||||
|
|
||||||
it "project timeline items", () ->
|
it "project timeline items", () ->
|
||||||
myCtrl = controller "UserTimeline"
|
myCtrl = controller "UserTimeline"
|
||||||
|
|
|
@ -5,7 +5,8 @@ UserTimelineDirective = ->
|
||||||
controllerAs: "vm",
|
controllerAs: "vm",
|
||||||
scope: {
|
scope: {
|
||||||
projectId: "=projectid",
|
projectId: "=projectid",
|
||||||
user: "="
|
user: "=",
|
||||||
|
currentUser: "="
|
||||||
},
|
},
|
||||||
bindToController: true
|
bindToController: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,11 +53,15 @@ class UserTimelineService extends taiga.Service
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
getTimeline: (userId, page) ->
|
getProfileTimeline: (userId, page) ->
|
||||||
return @rs.users.getTimeline(userId, page)
|
return @rs.users.getProfileTimeline(userId, page)
|
||||||
.then (result) =>
|
.then (result) =>
|
||||||
return result.filter (timeline) => @._filterValidTimelineItems(timeline)
|
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) ->
|
getProjectTimeline: (projectId, page) ->
|
||||||
return @rs.projects.getTimeline(projectId, page)
|
return @rs.projects.getTimeline(projectId, page)
|
||||||
|
|
|
@ -115,18 +115,42 @@ describe "tgUserTimelineService", ->
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
it "filter invalid user timeline items", (done) ->
|
it "filter invalid profile timeline items", (done) ->
|
||||||
userId = 3
|
userId = 3
|
||||||
page = 2
|
page = 2
|
||||||
|
|
||||||
mocks.resources.users.getTimeline = (_userId_, _page_) ->
|
mocks.resources.users.getProfileTimeline = (_userId_, _page_) ->
|
||||||
expect(_userId_).to.be.equal(userId)
|
expect(_userId_).to.be.equal(userId)
|
||||||
expect(_page_).to.be.equal(page)
|
expect(_page_).to.be.equal(page)
|
||||||
|
|
||||||
return $q (resolve, reject) ->
|
return $q (resolve, reject) ->
|
||||||
resolve(Immutable.fromJS(valid_items))
|
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_) ->
|
.then (_items_) ->
|
||||||
items = _items_.toJS()
|
items = _items_.toJS()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue