Add progress bars to milestones public view

This commit is contained in:
Javi Martín
2019-01-10 21:03:46 +01:00
committed by decabeza
parent ad355d4df6
commit e73f3bd97a
7 changed files with 95 additions and 98 deletions

View File

@@ -1,4 +1,4 @@
.tab-milestones ul {
.tab-milestones .timeline ul {
margin-top: rem-calc(40);
position: relative;
}

View File

@@ -0,0 +1,9 @@
module MilestonesHelper
def progress_tag_for(progress_bar)
content_tag :progress,
number_to_percentage(progress_bar.percentage, precision: 0),
class: progress_bar.primary? ? "primary" : "",
max: ProgressBar::RANGE.max,
value: progress_bar.percentage
end
end

View File

@@ -7,5 +7,13 @@ module Milestoneable
scope :with_milestones, -> { joins(:milestones).distinct }
has_many :progress_bars, as: :progressable
def primary_progress_bar
progress_bars.primary.first
end
def secondary_progress_bars
progress_bars.secondary
end
end
end

View File

@@ -5,6 +5,22 @@
<%= t("milestones.index.no_milestones") %>
</div>
<% end %>
<% if milestoneable.primary_progress_bar %>
<%= progress_tag_for(milestoneable.primary_progress_bar) %>
<% if milestoneable.secondary_progress_bars.any? %>
<ul class="milestone-progress">
<% milestoneable.secondary_progress_bars.each do |progress_bar| %>
<li>
<%= progress_bar.title %>
<%= progress_tag_for(progress_bar) %>
</li>
<% end %>
</ul>
<% end %>
<% end %>
<section class="timeline">
<ul class="no-bullet">
<% milestoneable.milestones.order_by_publication_date.each do |milestone| %>

View File

@@ -376,9 +376,9 @@ feature 'Legislation' do
end
context "Milestones" do
scenario "Without milestones" do
process = create(:legislation_process, :upcoming_proposals_phase)
let(:process) { create(:legislation_process, :upcoming_proposals_phase) }
scenario "Without milestones" do
visit legislation_process_path(process)
within(".legislation-process-list") do
@@ -387,7 +387,6 @@ feature 'Legislation' do
end
scenario "With milestones" do
process = create(:legislation_process, :upcoming_proposals_phase)
create(:milestone,
milestoneable: process,
description: "Something important happened",
@@ -408,6 +407,39 @@ feature 'Legislation' do
expect(page).to have_content "Something important happened"
end
end
scenario "With main progress bar" do
create(:progress_bar, progressable: process)
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).to have_css "progress"
end
end
scenario "With main and secondary progress bar" do
create(:progress_bar, progressable: process)
create(:progress_bar, :secondary, progressable: process, title: "Build laboratory")
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).to have_css "progress"
expect(page).to have_content "Build laboratory"
end
end
scenario "No main progress bar" do
create(:progress_bar, :secondary, progressable: process, title: "Defeat Evil Lords")
visit milestones_legislation_process_path(process)
within(".tab-milestones") do
expect(page).not_to have_css "progress"
expect(page).not_to have_content "Defeat Evil Lords"
end
end
end
end
end

View File

@@ -1,4 +1,6 @@
shared_examples "milestoneable" do |factory_name, path_name|
it_behaves_like "progressable", factory_name, path_name
let!(:milestoneable) { create(factory_name) }
feature "Show milestones" do

View File

@@ -1,114 +1,44 @@
shared_examples "progressable" do |factory_name, path_name|
feature "Progress bars", :js do
let!(:progressable) { create(factory_name) }
let(:path) { send(path_name, *resource_hierarchy_for(progressable)) }
feature "Manage progress bars" do
let(:progressable_path) { send(path_name, *resource_hierarchy_for(progressable)) }
let(:path) do
polymorphic_path([:admin, *resource_hierarchy_for(progressable.progress_bars.new)])
end
context "Index" do
scenario "Link to index path" do
create(:progress_bar, :secondary, progressable: progressable,
title: "Reading documents",
percentage: 20)
visit progressable_path
click_link "Manage progress bars"
expect(page).to have_content "Reading documents"
end
scenario "No progress bars" do
visit path
expect(page).to have_content("There are no progress bars")
end
end
context "New" do
scenario "Primary progress bar", :js do
visit path
click_link "Create new progress bar"
select "Primary", from: "Type"
expect(page).not_to have_field "Title"
fill_in "Current progress", with: 43
click_button "Create Progress bar"
expect(page).to have_content "Progress bar created successfully"
expect(page).to have_content "43%"
expect(page).to have_content "Primary"
expect(page).to have_content "Primary progress bar"
end
scenario "Secondary progress bar", :js do
visit path
click_link "Create new progress bar"
select "Secondary", from: "Type"
fill_in "Current progress", with: 36
fill_in "Title", with: "Plant trees"
click_button "Create Progress bar"
expect(page).to have_content "Progress bar created successfully"
expect(page).to have_content "36%"
expect(page).to have_content "Secondary"
expect(page).to have_content "Plant trees"
end
end
context "Edit" do
scenario "Primary progress bar", :js do
bar = create(:progress_bar, progressable: progressable)
scenario "With main progress bar" do
create(:progress_bar, progressable: progressable)
visit path
within("#progress_bar_#{bar.id}") { click_link "Edit" }
expect(page).to have_field "Current progress"
expect(page).not_to have_field "Title"
find("#tab-milestones-label").click
fill_in "Current progress", with: 44
click_button "Update Progress bar"
expect(page).to have_content "Progress bar updated successfully"
within("#progress_bar_#{bar.id}") do
expect(page).to have_content "44%"
within("#tab-milestones") do
expect(page).to have_content "Progress"
end
end
scenario "Secondary progress bar", :js do
bar = create(:progress_bar, :secondary, progressable: progressable)
scenario "With main and secondary progress bar" do
create(:progress_bar, progressable: progressable)
create(:progress_bar, :secondary, progressable: progressable, title: "Build laboratory")
visit path
within("#progress_bar_#{bar.id}") { click_link "Edit" }
fill_in "Current progress", with: 76
fill_in "Title", with: "Updated title"
click_button "Update Progress bar"
find("#tab-milestones-label").click
expect(page).to have_content "Progress bar updated successfully"
within("#progress_bar_#{bar.id}") do
expect(page).to have_content "76%"
expect(page).to have_content "Updated title"
end
within("#tab-milestones") do
expect(page).to have_content "Progress"
expect(page).to have_content "Build laboratory"
end
end
context "Delete" do
scenario "Remove progress bar" do
bar = create(:progress_bar, progressable: progressable, percentage: 34)
scenario "No main progress bar" do
create(:progress_bar, :secondary, progressable: progressable, title: "Defeat Evil Lords")
visit path
within("#progress_bar_#{bar.id}") { click_link "Delete" }
expect(page).to have_content "Progress bar deleted successfully"
expect(page).not_to have_content "34%"
find("#tab-milestones-label").click
within("#tab-milestones") do
expect(page).not_to have_content "Progress"
expect(page).not_to have_content "Defeat Evil Lords"
end
end
end