Skip to content
This repository was archived by the owner on Oct 2, 2019. It is now read-only.

Commit b8baaa7

Browse files
committed
Merge pull request #159 from 18F/85744742_empty_recent_purchases_message
85744742 empty recent purchases message
2 parents 8834aa1 + 7840cd4 commit b8baaa7

File tree

7 files changed

+99
-62
lines changed

7 files changed

+99
-62
lines changed

app/assets/stylesheets/common/communicarts.css.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ body.communicart-notification {
116116
line-height: 20px;
117117
}
118118

119-
body.communicart-notification p {
119+
body.communicart-notification p, p.empty-list-label {
120120
color: #333;
121121
}
122122

app/controllers/carts_controller.rb

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ def show
1111
def index
1212
# TODO: handle role on a cart-by-cart basis
1313
# (including action buttons in approver/open case)
14-
@role = 'requester'
15-
my_carts = current_user.carts.where(approvals: {role: @role})
16-
if my_carts.empty?
17-
@role = 'approver'
18-
my_carts = current_user.carts.where(approvals: {role: @role})
19-
end
20-
@closed_carts = my_carts.closed
21-
@open_carts = my_carts.open
14+
@role = requester_or_approver
15+
@carts = current_user.carts.where(approvals: { role: @role })
2216
end
2317

2418
def archive
2519
@role = params[:role] || 'requester'
2620
@closed_cart_full_list = current_user.carts.where(approvals: {role: @role}).closed
2721
end
22+
23+
private
24+
25+
def requester_or_approver
26+
['requester','approver'].each do |role|
27+
break role if current_user.carts.where(approvals: { role: role }).any?
28+
end
29+
end
2830
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="col-sm-2">
2+
<%- if @carts.closed.size > CartsController::CLOSED_CART_LIMIT %>
3+
<%= link_to "View the archive", url_for(:controller => 'carts', :action => 'archive', :role => @role) %>
4+
<%- end %>
5+
</div>

app/views/carts/_cart_list.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<%- if defined? limit %>
1313
<%- cart_list = carts.limit(limit) %>
1414
<%- else %>
15-
<%-cart_list = carts %>
15+
<%-cart_list = carts %>
1616
<%- end %>
1717
<%- cart_list.each do |cart| %>
1818
<tr>

app/views/carts/index.html.erb

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,34 @@
22
<div class="row pending-pr">
33
<div class="col-md-12">
44
<h3>Pending Purchase Requests</h3>
5-
<%= render partial: "cart_list", locals: { carts: @open_carts, role: @role, closed: false} %>
5+
<%- if @carts.open.any? %>
6+
<%= render partial: "cart_list", locals: { carts: @carts.open, role: @role, closed: false} %>
7+
<%- else %>
8+
<p class="empty-list-label">No pending purchase requests</p>
9+
<%- end %>
610
</div>
711
</div>
812
<div class="row past-pr">
913
<div class="col-sm-10">
10-
<h3>Recent Purchase Requests</h3>
11-
</div>
12-
<div class="col-sm-2">
13-
<%- if @closed_carts.size > CartsController::CLOSED_CART_LIMIT %>
14-
<%= link_to "View the archive", url_for(:controller => 'carts', :action => 'archive', :role => @role) %>
15-
<%- end %>
16-
</div>
17-
</div>
18-
<div class="row">
19-
<div class="col-sm-12">
20-
<%= render partial: "cart_list", locals: { carts: @closed_carts, role: @role, closed: true,
21-
limit: CartsController::CLOSED_CART_LIMIT} %>
14+
<h3>Recently Closed Purchase Requests</h3>
2215
</div>
16+
17+
<%= render partial: 'archive_link' %>
18+
2319
</div>
24-
<div class="row">
25-
<div class="col-sm-10">
20+
<%- if @carts.closed.any? %>
21+
<div class="row">
22+
<div class="col-sm-12">
23+
<%= render partial: "cart_list", locals: { carts: @carts.closed, role: @role, closed: true,
24+
limit: CartsController::CLOSED_CART_LIMIT} %>
25+
</div>
2626
</div>
27-
<div class="col-sm-2">
28-
<%- if @closed_carts.size > CartsController::CLOSED_CART_LIMIT %>
29-
<%= link_to "View the archive", url_for(:controller => 'carts', :action => 'archive', :role => @role) %>
30-
<%- end %>
27+
28+
<div class="row">
29+
<%= render partial: "archive_link" %>
3130
</div>
32-
</div>
31+
32+
<%- else %>
33+
<p class="empty-list-label">No recently closed purchase requests</p>
34+
<%- end %>
3335
</div>
Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,32 @@
11
describe CartsController do
2-
let(:user1) { FactoryGirl.create(:user) }
3-
let(:user2) { FactoryGirl.create(:user) }
4-
let(:user3) { FactoryGirl.create(:user) }
5-
let(:user4) { FactoryGirl.create(:user) }
2+
let(:user) { FactoryGirl.create(:user) }
63
let(:approval_group1) { FactoryGirl.create(:approval_group, name: 'test-approval-group1') }
7-
let(:approval_group2) { FactoryGirl.create(:approval_group, name: 'test-approval-group2') }
84

95
before do
10-
UserRole.create!(user_id: user1.id, approval_group_id: approval_group1.id, role: 'approver')
11-
UserRole.create!(user_id: user2.id, approval_group_id: approval_group1.id, role: 'requester')
12-
UserRole.create!(user_id: user3.id, approval_group_id: approval_group1.id, role: 'approver')
6+
UserRole.create!(user_id: user.id, approval_group_id: approval_group1.id, role: 'requester')
137
p = {'approvalGroup' => 'test-approval-group1', 'cartName' => 'cart1' }
148
@cart1 = Commands::Approval::InitiateCartApproval.new.perform(p)
159
session[:user] = {}
1610
end
1711

18-
describe('index') do
19-
20-
it 'should find the open cart' do
21-
session[:user]['email'] = user2.email_address
22-
get :index
23-
expect(assigns(:open_carts).first).to eq(@cart1)
24-
end
25-
26-
it 'should find nothing' do
27-
session[:user]['email'] = user4.email_address
28-
get :index
29-
expect(assigns(:open_carts).first).to be_nil
30-
end
31-
32-
it 'should find the approved cart' do
33-
session[:user]['email'] = user2.email_address
34-
@cart1.update_attributes(status: 'approved')
12+
describe '#index' do
13+
it 'sets @role' do
14+
session[:user]['email'] = user.email_address
3515
get :index
36-
expect(assigns(:closed_carts).first).to eq(@cart1)
16+
expect(assigns(:role)).to eq 'requester'
3717
end
3818

39-
it 'should find the rejected cart' do
40-
session[:user]['email'] = user2.email_address
41-
@cart1.update_attributes(status: 'rejected')
19+
it 'sets @carts' do
20+
approval_group1
21+
session[:user]['email'] = user.email_address
4222
get :index
43-
expect(assigns(:closed_carts).first).to eq(@cart1)
23+
expect(assigns(:carts)).to eq [@cart1]
4424
end
4525
end
4626

47-
describe('archive') do
27+
describe '#archive' do
4828
it 'should show all the closed carts' do
49-
session[:user]['email'] = user2.email_address
29+
session[:user]['email'] = user.email_address
5030
carts = Array.new
5131
(1..4).each do |i|
5232
p = {}
@@ -60,4 +40,17 @@
6040
expect(assigns(:closed_cart_full_list).size).to eq(3)
6141
end
6242
end
43+
44+
describe '#requester_or_approver helper' do
45+
it 'returns requester role set on approval' do
46+
session[:user]['email'] = user.email_address
47+
expect(controller.send(:requester_or_approver)).to eq 'requester'
48+
end
49+
50+
it 'returns approver role set on approval' do
51+
user.approvals.first.update_attributes(role: 'approver')
52+
session[:user]['email'] = user.email_address
53+
expect(controller.send(:requester_or_approver)).to eq 'approver'
54+
end
55+
end
6356
end

spec/models/cart_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,39 @@
6464
expect(cart.ordered_awaiting_approvals).to eq(cart.awaiting_approvals.order('id DESC'))
6565
end
6666
end
67+
68+
context 'scopes' do
69+
let(:approved_cart1) { FactoryGirl.create(:cart, status: 'approved') }
70+
let(:approved_cart2) { FactoryGirl.create(:cart, status: 'approved') }
71+
let(:pending_cart) { FactoryGirl.create(:cart, status: 'pending') }
72+
let(:rejected_cart) { FactoryGirl.create(:cart, status: 'rejected') }
73+
74+
describe 'approved' do
75+
it "returns approved carts" do
76+
approved_cart1
77+
approved_cart2
78+
pending_cart
79+
expect(Cart.approved).to eq [approved_cart1, approved_cart2]
80+
end
81+
end
82+
83+
describe 'open' do
84+
it 'returns open carts' do
85+
approved_cart1
86+
pending_cart
87+
expect(Cart.open).to eq [pending_cart]
88+
end
89+
end
90+
91+
describe 'closed' do
92+
it 'returns closed carts' do
93+
approved_cart1
94+
pending_cart
95+
rejected_cart
96+
expect(Cart.closed).to eq [approved_cart1, rejected_cart]
97+
end
98+
end
99+
100+
end
101+
67102
end

0 commit comments

Comments
 (0)