add timeline fields after parse and filter the api response
parent
56c2fd25dc
commit
c9951601aa
|
@ -18,7 +18,10 @@ UserTimelinePaginationSequence = () ->
|
|||
data = response.get("data")
|
||||
|
||||
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)
|
||||
|
||||
|
|
|
@ -107,3 +107,31 @@ describe "tgUserTimelinePaginationSequenceService", ->
|
|||
expect(result.next).to.be.true
|
||||
|
||||
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
|
||||
|
||||
# - create a entry per every item in the values_diff
|
||||
# - add extra attributes to each entry
|
||||
_parseTimeline: (response) ->
|
||||
newdata = Immutable.List()
|
||||
|
||||
response.get('data').forEach (item) =>
|
||||
event = @._parseEventType(item.get('event_type'))
|
||||
type = @userTimelineItemType.getType(item, event)
|
||||
|
||||
data = item.get('data')
|
||||
values_diff = data.get('values_diff')
|
||||
|
@ -142,15 +140,19 @@ class UserTimelineService extends taiga.Service
|
|||
|
||||
newItem = item.setIn(['data', 'value_diff'], obj)
|
||||
newItem = newItem.deleteIn(['data', 'values_diff'])
|
||||
newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type)
|
||||
newdata = newdata.push(newItem)
|
||||
else
|
||||
newItem = item.deleteIn(['data', 'values_diff'])
|
||||
newItem = @._attachExtraInfoToTimelineEntry(newItem, event, type)
|
||||
newdata = newdata.push(newItem)
|
||||
|
||||
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) ->
|
||||
config = {}
|
||||
|
||||
|
@ -159,6 +161,8 @@ class UserTimelineService extends taiga.Service
|
|||
.then (response) =>
|
||||
return @._parseTimeline(response)
|
||||
|
||||
config.map = (obj) => @._addEntyAttributes(obj)
|
||||
|
||||
config.filter = (items) =>
|
||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||
|
||||
|
@ -172,6 +176,8 @@ class UserTimelineService extends taiga.Service
|
|||
.then (response) =>
|
||||
return @._parseTimeline(response)
|
||||
|
||||
config.map = (obj) => @._addEntyAttributes(obj)
|
||||
|
||||
config.filter = (items) =>
|
||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||
|
||||
|
@ -184,6 +190,8 @@ class UserTimelineService extends taiga.Service
|
|||
return @rs.projects.getTimeline(projectId, page)
|
||||
.then (response) => return @._parseTimeline(response)
|
||||
|
||||
config.map = (obj) => @._addEntyAttributes(obj)
|
||||
|
||||
config.filter = (items) =>
|
||||
return items.filterNot (item) => @._isInValidTimeline(item)
|
||||
|
||||
|
|
|
@ -237,32 +237,29 @@ describe "tgUserTimelineService", ->
|
|||
|
||||
it "all timeline extra fields filled", () ->
|
||||
timeline = Immutable.fromJS({
|
||||
data: [{
|
||||
event_type: 'issues.issue.created',
|
||||
data: {
|
||||
user: 'user_fake',
|
||||
project: 'project_fake',
|
||||
milestone: 'milestone_fake',
|
||||
created: new Date().getTime(),
|
||||
issue: {
|
||||
id: 2
|
||||
},
|
||||
value_diff: {
|
||||
key: 'attachments',
|
||||
value: {
|
||||
new: "fakeAttachment"
|
||||
}
|
||||
event_type: 'issues.issue.created',
|
||||
data: {
|
||||
user: 'user_fake',
|
||||
project: 'project_fake',
|
||||
milestone: 'milestone_fake',
|
||||
created: new Date().getTime(),
|
||||
issue: {
|
||||
id: 2
|
||||
},
|
||||
value_diff: {
|
||||
key: 'attachments',
|
||||
value: {
|
||||
new: "fakeAttachment"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
})
|
||||
|
||||
mocks.userTimelineItemTitle.getTitle.returns("fakeTitle")
|
||||
mocks.getType.description.returns("fakeDescription")
|
||||
mocks.getType.member.returns("fakeMember")
|
||||
|
||||
timeline = userTimelineService._parseTimeline(timeline)
|
||||
timelineEntry = timeline.get('data').get(0)
|
||||
timelineEntry = userTimelineService._addEntyAttributes(timeline)
|
||||
|
||||
expect(timelineEntry.get('title_html')).to.be.equal("fakeTitle")
|
||||
expect(timelineEntry.get('obj')).to.be.equal(timelineEntry.getIn(["data", "issue"]))
|
||||
|
|
Loading…
Reference in New Issue