Merge pull request #687 from taigaio/add-attributes-after-timeline-filter

add timeline fields after parse and filter the api response
stable
Alejandro 2015-10-27 08:50:16 +01:00
commit 9f5b02aede
4 changed files with 59 additions and 23 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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"]))