Skip to content
This repository has been archived by the owner on Jul 30, 2019. It is now read-only.

Commit

Permalink
Merge pull request #901 from 18F/jy-redesign-admin-users-page
Browse files Browse the repository at this point in the history
Refactor UserShowViewModel
  • Loading branch information
Jacob Harris committed Jul 19, 2016
2 parents 969676f + d45b59c commit 01b742f
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 70 deletions.
15 changes: 15 additions & 0 deletions app/presenters/boolean_presenter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class BooleanPresenter
attr_reader :boolean

def initialize(boolean)
@boolean = boolean
end

def to_s
if boolean == true
'Yes'
else
'No'
end
end
end
2 changes: 1 addition & 1 deletion app/presenters/sam_status_presenter/pending.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class SamStatuPresenter::Pending < SamStatusPresenter::Base
class SamStatusPresenter::Pending < SamStatusPresenter::Base
def flash_type
:warning
end
Expand Down
2 changes: 1 addition & 1 deletion app/presenters/user_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,6 @@ def model
private

def sam_status_presenter
SamStatusPresenterFactory.new(user).create.admin_status_text
SamStatusPresenterFactory.new(model).create
end
end
67 changes: 28 additions & 39 deletions app/view_models/admin/user_show_view_model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,63 +5,52 @@ def initialize(user)
@user = user
end

def name
user.name
def data
[
{ label: 'Email', data: user.email },
{ label: 'Payment URL', data: user.payment_url },
{ label: 'DUNS number', data: user.duns_number },
{ label: 'GitHub username', data: user.github_login },
{ label: 'GitHub ID', data: user.github_id },
{ label: 'SAM', data: sam_status },
{ label: 'Small business', data: small_business },
{ label: 'Contracting officer', data: contracting_officer }
]
end

def email
user.email
def name
user.name
end

def payment_url
user.payment_url
def bids_partial
if bids?
'bid_history'
else
'components/null'
end
end

def duns_number
user.duns_number
def user_auctions
AuctionQuery.new.with_bid_from_user(user.id).map do |auction|
Admin::UserAuctionViewModel.new(auction, user)
end
end

def github_id
user.github_id
end
private

def github_login
user.github_login
def bids?
user_auctions.count > 0
end

def sam_status
SamStatusPresenterFactory.new(user).create.admin_status_text
end

def small_business
if user.small_business?
"Yes"
else
"No"
end
BooleanPresenter.new(user.small_business?).to_s
end

def contracting_officer
if user.contracting_officer?
"Yes"
else
"No"
end
end

def bids_partial
if bids?
'bid_history'
else
'components/null'
end
end

def bids?
user_auctions.count > 0
end

def user_auctions
AuctionQuery.new.with_bid_from_user(user.id).map { |auction| Admin::UserAuctionViewModel.new(auction, user) }
BooleanPresenter.new(user.contracting_officer?).to_s
end
end
8 changes: 2 additions & 6 deletions app/views/admin/users/_attribute_row.html.erb
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
<tr>
<td class="label">
<%= label %>
</td>
<td>
<%= attribute %>
</td>
<td class="label"><%= label %></td>
<td><%= data %></td>
</tr>
2 changes: 1 addition & 1 deletion app/views/admin/users/_bid_history.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<h2>Bid History</h2>

<table class="striped-table">
<table class="striped-table" id="bid-history">
<thead>
<tr>
<th scope="col">Auction</th>
Expand Down
23 changes: 6 additions & 17 deletions app/views/admin/users/show.html.erb
Original file line number Diff line number Diff line change
@@ -1,23 +1,12 @@
<h2><%= @view_model.name %></h2>
<table class="striped-table">
<tbody>
<%= render partial: 'attribute_row',
locals: { label: 'Email', attribute: @view_model.email } %>
<%= render partial: 'attribute_row',
locals: { label: 'Payment URL', attribute: @view_model.payment_url } %>
<%= render partial: 'attribute_row',
locals: { label: 'DUNS number', attribute: @view_model.duns_number } %>
<%= render partial: 'attribute_row',
locals: { label: 'GitHub username', attribute: @view_model.github_login } %>
<%= render partial: 'attribute_row',
locals: { label: 'GitHub ID', attribute: @view_model.github_id } %>
<%= render partial: 'attribute_row',
locals: { label: 'SAM', attribute: @view_model.sam_status } %>
<%= render partial: 'attribute_row',
locals: { label: 'Small business', attribute: @view_model.small_business } %>
<%= render partial: 'attribute_row',
locals: { label: 'Contracting officer', attribute: @view_model.contracting_officer } %>
<% @view_model.data.each do |row| %>
<%= render partial: 'attribute_row',
locals: { label: row[:label], data: row[:data] } %>
<% end %>
</tbody>
</table>

<%= render partial: @view_model.bids_partial, locals: {view_model: @view_model} %>
<%= render partial: @view_model.bids_partial,
locals: { view_model: @view_model } %>
2 changes: 1 addition & 1 deletion features/admin_views_user.feature
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Feature: Admin views user
Given there is a user in the system who has bid on an auction
When I visit the admin users page
And I click on the name of the first user
Then I should see a section labeled "Bidding History"
Then I should see a section labeled "Bid History"
And in that section I should see a table of the user's bids

Scenario: I see a user who has not bid
Expand Down
13 changes: 10 additions & 3 deletions features/step_definitions/admin_views_user_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@
table_headers = ['Auction', 'Status', 'Skills', 'User Bids', 'User Won?', 'Accepted?']

table_headers.each_with_index do |header, index|
within(:xpath, th_xpath(table_id: 'bidding-history', column: index+1)) do
within(:xpath, th_xpath(table_id: 'bid-history', column: index + 1)) do
expect(page).to have_content(header)
end
end

view_model = Admin::UserAuctionViewModel.new(@auction, @user)

values = [view_model.title, view_model.status, view_model.skills, view_model.user_bid_count, view_model.user_won_label, view_model.accepted_label]
values = [
view_model.title,
view_model.status,
view_model.skills,
view_model.user_bid_count,
view_model.user_won_label,
view_model.accepted_label
]

values.each_with_index do |value, index|
within(:xpath, cel_xpath(table_id: 'bidding-history', column: index+1)) do
within(:xpath, cel_xpath(table_id: 'bid-history', column: index + 1)) do
expect(page).to have_content(value)
end
end
Expand Down
1 change: 0 additions & 1 deletion features/step_definitions/page_content_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@
expect(page).to have_content(@user.duns_number)
expect(page).to have_content(@user.github_id)
expect(page).to have_content(@user.github_login)
expect(page).to have_content(@user.sam_status)
end

Then(/^I should see a page title "([^"]+)"$/) do |title|
Expand Down

0 comments on commit 01b742f

Please sign in to comment.