add timeline fields after parse and filter the api response
parent
56c2fd25dc
commit
c9951601aa
|
@ -18,7 +18,10 @@ UserTimelinePaginationSequence = () ->
|
||||||
data = response.get("data")
|
data = response.get("data")
|
||||||
|
|
||||||
if config.filter
|
if config.filter
|
||||||
data = config.filter(response.get("data"))
|
data = config.filter(data)
|
||||||
|
|
||||||
|
if config.map
|
||||||
|
data = data.map(config.map)
|
||||||
|
|
||||||
items = items.concat(data)
|
items = items.concat(data)
|
||||||
|
|
||||||
|
|
|
@ -107,3 +107,31 @@ describe "tgUserTimelinePaginationSequenceService", ->
|
||||||
expect(result.next).to.be.true
|
expect(result.next).to.be.true
|
||||||
|
|
||||||
done()
|
done()
|
||||||
|
|
||||||
|
|
||||||
|
it "map items", (done) ->
|
||||||
|
config = {}
|
||||||
|
|
||||||
|
page1 = Immutable.Map({
|
||||||
|
next: false,
|
||||||
|
data: [1, 2, 3]
|
||||||
|
})
|
||||||
|
|
||||||
|
promise = sinon.stub()
|
||||||
|
promise.withArgs(1).promise().resolve(page1)
|
||||||
|
|
||||||
|
config.fetch = (page) ->
|
||||||
|
return promise(page)
|
||||||
|
|
||||||
|
config.minItems = 1
|
||||||
|
|
||||||
|
config.map = (item) => item + 1;
|
||||||
|
|
||||||
|
seq = userTimelinePaginationSequenceService.generate(config)
|
||||||
|
|
||||||
|
seq.next().then (result) ->
|
||||||
|
result = result.toJS()
|
||||||
|
|
||||||
|
expect(result.items).to.be.eql([2, 3, 4])
|
||||||
|
|
||||||
|
done()
|
||||||
|
|
|
@ -113,13 +113,11 @@ class UserTimelineService extends taiga.Service
|
||||||
return timeline
|
return timeline
|
||||||
|
|
||||||
# - create a entry per every item in the values_diff
|
# - create a entry per every item in the values_diff
|
||||||
# - add extra attributes to each entry
|
|
||||||
_parseTimeline: (response) ->
|
_parseTimeline: (response) ->
|
||||||
newdata = Immutable.List()
|
newdata = Immutable.List()
|
||||||
|
|
||||||
response.get('data').forEach (item) =>
|
response.get('data').forEach (item) =>
|
||||||
event = @._parseEventType(item.get('event_type'))
|
event = @._parseEventType(item.get('event_type'))
|
||||||
type = @userTimelineItemType.getType(item, event)
|
|
||||||
|
|
||||||
data = item.get('data')
|
data = item.get('data')
|
||||||
values_diff = data.get('values_diff')
|
values_diff = data.get('values_diff')
|
||||||
|
@ -142,15 +140,19 @@ class UserTimelineService extends taiga.Service
|
||||||
|
|
||||||
newItem = item.setIn(['data', 'value_diff'], obj)
|
newItem = item.setIn(['data', 'value_diff'], obj)
|
||||||
newItem = newItem.deleteIn(['data', 'values_diff'])
|
newItem = newItem.deleteIn(['data', 'values_diff'])
|
||||||
newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type)
|
|
||||||
newdata = newdata.push(newItem)
|
newdata = newdata.push(newItem)
|
||||||
else
|
else
|
||||||
newItem = item.deleteIn(['data', 'values_diff'])
|
newItem = item.deleteIn(['data', 'values_diff'])
|
||||||
newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type)
|
|
||||||
newdata = newdata.push(newItem)
|
newdata = newdata.push(newItem)
|
||||||
|
|
||||||
return response.set('data', newdata)
|
return response.set('data', newdata)
|
||||||
|
|
||||||
|
_addEntyAttributes: (item) ->
|
||||||
|
event = @._parseEventType(item.get('event_type'))
|
||||||
|
type = @userTimelineItemType.getType(item, event)
|
||||||
|
|
||||||
|
return @._attachExtraInfoToTimelineEntry(item, event, type)
|
||||||
|
|
||||||
getProfileTimeline: (userId) ->
|
getProfileTimeline: (userId) ->
|
||||||
config = {}
|
config = {}
|
||||||
|
|
||||||
|
@ -159,6 +161,8 @@ class UserTimelineService extends taiga.Service
|
||||||
.then (response) =>
|
.then (response) =>
|
||||||
return @._parseTimeline(response)
|
return @._parseTimeline(response)
|
||||||
|
|
||||||
|
config.map = (obj) => @._addEntyAttributes(obj)
|
||||||
|
|
||||||
config.filter = (items) =>
|
config.filter = (items) =>
|
||||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||||
|
|
||||||
|
@ -172,6 +176,8 @@ class UserTimelineService extends taiga.Service
|
||||||
.then (response) =>
|
.then (response) =>
|
||||||
return @._parseTimeline(response)
|
return @._parseTimeline(response)
|
||||||
|
|
||||||
|
config.map = (obj) => @._addEntyAttributes(obj)
|
||||||
|
|
||||||
config.filter = (items) =>
|
config.filter = (items) =>
|
||||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||||
|
|
||||||
|
@ -184,6 +190,8 @@ class UserTimelineService extends taiga.Service
|
||||||
return @rs.projects.getTimeline(projectId, page)
|
return @rs.projects.getTimeline(projectId, page)
|
||||||
.then (response) => return @._parseTimeline(response)
|
.then (response) => return @._parseTimeline(response)
|
||||||
|
|
||||||
|
config.map = (obj) => @._addEntyAttributes(obj)
|
||||||
|
|
||||||
config.filter = (items) =>
|
config.filter = (items) =>
|
||||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||||
|
|
||||||
|
|
|
@ -237,7 +237,6 @@ describe "tgUserTimelineService", ->
|
||||||
|
|
||||||
it "all timeline extra fields filled", () ->
|
it "all timeline extra fields filled", () ->
|
||||||
timeline = Immutable.fromJS({
|
timeline = Immutable.fromJS({
|
||||||
data: [{
|
|
||||||
event_type: 'issues.issue.created',
|
event_type: 'issues.issue.created',
|
||||||
data: {
|
data: {
|
||||||
user: 'user_fake',
|
user: 'user_fake',
|
||||||
|
@ -254,15 +253,13 @@ describe "tgUserTimelineService", ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}]
|
|
||||||
})
|
})
|
||||||
|
|
||||||
mocks.userTimelineItemTitle.getTitle.returns("fakeTitle")
|
mocks.userTimelineItemTitle.getTitle.returns("fakeTitle")
|
||||||
mocks.getType.description.returns("fakeDescription")
|
mocks.getType.description.returns("fakeDescription")
|
||||||
mocks.getType.member.returns("fakeMember")
|
mocks.getType.member.returns("fakeMember")
|
||||||
|
|
||||||
timeline = userTimelineService._parseTimeline(timeline)
|
timelineEntry = userTimelineService._addEntyAttributes(timeline)
|
||||||
timelineEntry = timeline.get('data').get(0)
|
|
||||||
|
|
||||||
expect(timelineEntry.get('title_html')).to.be.equal("fakeTitle")
|
expect(timelineEntry.get('title_html')).to.be.equal("fakeTitle")
|
||||||
expect(timelineEntry.get('obj')).to.be.equal(timelineEntry.getIn(["data", "issue"]))
|
expect(timelineEntry.get('obj')).to.be.equal(timelineEntry.getIn(["data", "issue"]))
|
||||||
|
|
Loading…
Reference in New Issue