From af33338bbf752ab5f4dba5b981644b399ae3563b Mon Sep 17 00:00:00 2001 From: Alexander Matyushentsev Date: Sun, 15 May 2016 00:22:01 -0700 Subject: [PATCH] Add more information into RSS fead for issues --- CHANGELOG | 2 ++ app/views/issues/_issue.atom.builder | 20 +++++++++++- spec/features/atom/dashboard_issues_spec.rb | 35 +++++++++++++++------ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7a6a14919da..80b19bbd04e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -123,6 +123,8 @@ v 8.8.1 v 8.8.0 - Implement GFM references for milestones (Alejandro Rodríguez) +v 8.8.0 (unreleased) + - Add more information into RSS fead for issues. - Snippets tab under user profile. !4001 (Long Nguyen) - Fix error when using link to uploads in global snippets - Fix Error 500 when attempting to retrieve project license when HEAD points to non-existent ref diff --git a/app/views/issues/_issue.atom.builder b/app/views/issues/_issue.atom.builder index 68a2d19e58d..96831874144 100644 --- a/app/views/issues/_issue.atom.builder +++ b/app/views/issues/_issue.atom.builder @@ -5,10 +5,28 @@ xml.entry do xml.updated issue.created_at.xmlschema xml.media :thumbnail, width: "40", height: "40", url: image_url(avatar_icon(issue.author_email)) - xml.author do |author| + xml.author do xml.name issue.author_name xml.email issue.author_email end xml.summary issue.title + xml.description issue.description if issue.description + xml.milestone issue.milestone.title if issue.milestone + xml.due_date issue.due_date if issue.due_date + + unless issue.labels.empty? + xml.labels do + issue.labels.each do |label| + xml.label label.name + end + end + end + + if issue.assignee + xml.assignee do + xml.name issue.assignee.name + xml.email issue.assignee.email + end + end end diff --git a/spec/features/atom/dashboard_issues_spec.rb b/spec/features/atom/dashboard_issues_spec.rb index b710cb3c72f..87b478adb8f 100644 --- a/spec/features/atom/dashboard_issues_spec.rb +++ b/spec/features/atom/dashboard_issues_spec.rb @@ -2,15 +2,18 @@ require 'spec_helper' describe "Dashboard Issues Feed", feature: true do describe "GET /issues" do - let!(:user) { create(:user) } - let!(:project1) { create(:project) } - let!(:project2) { create(:project) } - let!(:issue1) { create(:issue, author: user, assignee: user, project: project1) } - let!(:issue2) { create(:issue, author: user, assignee: user, project: project2) } + let!(:user) { create(:user) } + let!(:project1) { create(:project) } + let!(:project2) { create(:project) } + let!(:milestone1) { create(:milestone, project: project1, title: 'v1') } + let!(:label1) { create(:label, project: project1, title: 'label1') } + let!(:issue1) { create(:issue, author: user, assignee: user, project: project1, milestone: milestone1) } + let!(:issue2) { create(:issue, author: user, assignee: user, project: project2, description: 'test desc') } before do project1.team << [user, :master] project2.team << [user, :master] + issue1.labels << label1 end describe "atom feed" do @@ -20,10 +23,24 @@ describe "Dashboard Issues Feed", feature: true do expect(response_headers['Content-Type']). to have_content('application/atom+xml') expect(body).to have_selector('title', text: "#{user.name} issues") - expect(body).to have_selector('author email', text: issue1.author_email) - expect(body).to have_selector('entry summary', text: issue1.title) - expect(body).to have_selector('author email', text: issue2.author_email) - expect(body).to have_selector('entry summary', text: issue2.title) + + entry_1 = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue1.title}')]") + expect(entry_1).to be_present + + entry_2 = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue2.title}')]") + expect(entry_2).to be_present + + expect(entry_1).to have_selector('author email', text: issue1.author_email) + expect(entry_1).to have_selector('assignee email', text: issue1.author_email) + expect(entry_1).to have_selector('labels label', text: label1.title) + expect(entry_1).to have_selector('milestone', text: milestone1.title) + expect(entry_1).not_to have_selector('description') + + expect(entry_2).to have_selector('author email', text: issue2.author_email) + expect(entry_2).to have_selector('assignee email', text: issue2.author_email) + expect(entry_2).not_to have_selector('labels') + expect(entry_2).not_to have_selector('milestone') + expect(entry_2).to have_selector('description', text: issue1.description) end end end