Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
language: ruby

cache:
bundler: true
yarn: true
directories:
- /home/travis/.rvm/
rvm:
- 2.7.0

services:
- postgresql

addons:
apt:
- google-chrome-stable
- chromium-chromedriver

before_script:
- psql -c 'create database casa_test;' -U postgres
- ln -s /usr/lib/chromium-browser/chromedriver ~/bin/chromedriver

install:
- travis_retry gem install bundler
- travis_retry nvm install 13.5.0
- travis_retry npm install --global yarn
- travis_retry bundle install
- travis_retry yarn
- bundle install

script:
- bundle exec rails webpacker:compile
- bundle exec brakeman
Expand Down
30 changes: 21 additions & 9 deletions app/controllers/case_assignments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,38 @@ class CaseAssignmentsController < ApplicationController
before_action :must_be_admin

def create
volunteer = User.find(params[:volunteer_id])
case_assignment = volunteer.case_assignments.new(case_assignment_params)

case_assignment = case_assignment_parent.case_assignments.new(case_assignment_params)
case_assignment.save

redirect_to edit_volunteer_path(volunteer)
redirect_to after_action_path(case_assignment_parent)
end

def destroy
volunteer = User.find(params[:volunteer_id])
case_assignment = volunteer.case_assignments.find(params[:id])

case_assignment = CaseAssignment.find(params[:id])
case_assignment.destroy

redirect_to edit_volunteer_path(volunteer)
redirect_to after_action_path(case_assignment_parent)
end

private

def case_assignment_parent
if params[:volunteer_id]
User.find(params[:volunteer_id])
else
CasaCase.find(params[:casa_case_id])
end
end

def after_action_path(resource)
if resource.is_a? User
edit_volunteer_path(resource)
else
edit_casa_case_path(resource)
end
end

def case_assignment_params
params.require(:case_assignment).permit(:casa_case_id)
params.require(:case_assignment).permit(:casa_case_id, :volunteer_id)
end
end
2 changes: 1 addition & 1 deletion app/javascript/packs/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ require("@rails/ujs").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
require('datatables.net-dt')
require("packs/new_casa_contact")
require("packs/show_casa_case")
require("packs/dashboard")
require('datatables.net-dt')
import 'bootstrap'

// Uncomment to copy all static images under ../images to the output folder and reference
Expand Down
49 changes: 49 additions & 0 deletions app/views/casa_cases/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,52 @@
</div>

<br>

<% if @casa_case.volunteers.present? %>
<br>
<div class="row">
<div class="col-sm-12">
<h3>Assigned Volunteers</h3>
<table class='table case-list'>
<thead>
<tr>
<th>Volunteer Name</th>
<th>Volunteer Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<% @casa_case.case_assignments.each do |assignment| %>
<tr>
<td><%= link_to assignment&.volunteer&.display_name, edit_volunteer_path(assignment.volunteer) %></td>
<td><%= assignment&.volunteer&.email %></td>
<td><%= button_to 'Unassign Volunteer', case_assignment_path(assignment, casa_case_id: @casa_case.id), method: :delete, class: "btn btn-danger" %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<% end %>

<br>

<div class="row">
<div class="col-sm-6">
<h3>Assign a New Volunteer</h3>

<%= form_for CaseAssignment.new, url: case_assignments_path(casa_case_id: @casa_case.id) do |form| %>

<div class='form-group'>
<label for='case_assignment_casa_case_id'>Select a Volunteer</label>
<select name='case_assignment[volunteer_id]' class='form-control'>
<% User.where(role: "volunteer").all.order(:display_name).each do |volunteer| %>
<option value="<%= volunteer.id %>"><%= volunteer.display_name %></option>
<% end %>
</select>
</div>

<%= form.submit 'Assign Volunteer', class: 'btn btn-primary' %>
<% end %>
</div>
</div>
8 changes: 4 additions & 4 deletions app/views/volunteers/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
</div>
</div>

<% if @volunteer.casa_cases %>
<% if @volunteer.casa_cases.present? %>
<br>
<div class="row">
<div class="col-sm-12">
Expand All @@ -76,9 +76,9 @@
<tbody>
<% @volunteer.case_assignments.each do |assignment| %>
<tr>
<td><%= assignment.casa_case.case_number %></td>
<td><%= link_to assignment.casa_case.case_number, edit_casa_case_path(assignment.casa_case) %></td>
<td><%= assignment.casa_case.transition_aged_youth %></td>
<td><%= button_to 'Unassign Case', volunteer_case_assignment_path(@volunteer, assignment), method: :delete, class: "btn btn-danger" %></td>
<td><%= button_to 'Unassign Case', case_assignment_path(assignment, volunteer_id: @volunteer.id), method: :delete, class: "btn btn-danger" %></td>
</tr>
<% end %>
</tbody>
Expand All @@ -93,7 +93,7 @@
<div class="col-sm-6">
<h3>Assign a New Case</h3>

<%= form_for CaseAssignment.new, url: volunteer_case_assignments_path(@volunteer) do |form| %>
<%= form_for CaseAssignment.new, url: case_assignments_path(volunteer_id: @volunteer.id) do |form| %>

<div class='form-group'>
<label for='case_assignment_casa_case_id'>Select a Case</label>
Expand Down
5 changes: 2 additions & 3 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@
resources :case_contacts
resources :reports, only: %i[show index]

resources :volunteers, only: %i[new edit create update] do
resources :case_assignments, only: %i[create destroy]
end
resources :volunteers, only: %i[new edit create update]
resources :case_assignments, only: %i[create destroy]

resources :users, only: [] do
collection do
Expand Down
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
"name": "casa",
"private": true,
"dependencies": {
"@rails/actioncable": "^6.0.3",
"@rails/activestorage": "^6.0.3",
"@rails/ujs": "^6.0.3",
"@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "4.2.2",
"bootstrap": "4.3.1",
"datatables.net-dt": "^1.10.21",
"jquery": "^3.5.1",
"datatables.net-dt": "^1.10.20",
"jquery": "^3.5.0",
"popper.js": "^1.16.1",
"turbolinks": "^5.2.0"
},
"version": "0.1.0",
"devDependencies": {
"webpack-dev-server": "^3.11.0"
"webpack-dev-server": "^3.10.3"
}
}
4 changes: 4 additions & 0 deletions spec/factories/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
role { :casa_admin }
end

trait :inactive do
role { :inactive }
end

trait :with_casa_cases do
after(:create) do |user, _|
create_list(:case_assignment, 2, volunteer: user)
Expand Down
12 changes: 10 additions & 2 deletions spec/features/admin_views_dashboard_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,26 @@
expect(page).to have_css("form#new_user")
end

it "can filters volunteers", type: :system do
it "can filter volunteers", type: :system do
create_list(:user, 3, :volunteer)
create_list(:user, 2, :inactive)

sign_in admin

visit root_path
expect(page).to have_selector(".volunteer-filters")

# by default, only active users are shown, so result should be 4 here
expect(page.all("table#volunteers tr").count).to eq 4

click_on "Status"
find(:css, 'input[data-value="Active"]').set(false)

expect(page.all("table#volunteers tr").count).to eq 4
# when all users are hidden, the tr count will be 2 for header and "no results" row
expect(page.all("table#volunteers tr").count).to eq 2

find(:css, 'input[data-value="Inactive"]').set(true)

expect(page.all("table#volunteers tr").count).to eq 3
end
end
78 changes: 58 additions & 20 deletions spec/requests/case_assignments_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,74 @@

RSpec.describe "/case_assignments", type: :request do
describe "POST /create" do
it "creates a new case assignment" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)
context "when the case assignment parent is a volunteer" do
it "creates a new case assignment for the volunteer" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)

sign_in admin
sign_in admin

expect {
post volunteer_case_assignments_url(volunteer),
params: {case_assignment: {casa_case_id: casa_case.id}}
}.to change(volunteer.casa_cases, :count).by(1)
expect do
post case_assignments_url(volunteer_id: volunteer.id),
params: { case_assignment: { casa_case_id: casa_case.id } }
end.to change(volunteer.casa_cases, :count).by(1)

expect(response).to redirect_to edit_volunteer_path(volunteer)
expect(response).to redirect_to edit_volunteer_path(volunteer)
end
end

context "when the case assignment parent is a casa_case" do
it "creates a new case assignment for the casa_case" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)

sign_in admin

expect do
post case_assignments_url(casa_case_id: casa_case.id),
params: { case_assignment: { volunteer_id: volunteer.id } }
end.to change(casa_case.volunteers, :count).by(1)

expect(response).to redirect_to edit_casa_case_path(casa_case)
end
end
end

describe "DELETE /destroy" do
it "destroys the case assignment" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)
assignment = create(:case_assignment, volunteer: volunteer, casa_case: casa_case)
context "when the case assignment parent is a volunteer" do
it "destroys the case assignment from the volunteer" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)
assignment = create(:case_assignment, volunteer: volunteer, casa_case: casa_case)

sign_in admin

expect do
delete case_assignment_url(assignment, volunteer_id: volunteer.id)
end.to change(volunteer.casa_cases, :count).by(-1)

expect(response).to redirect_to edit_volunteer_path(volunteer)
end
end

context "when the case assignment parent is a casa_case" do
it "destroys the case assignment from the casa_case" do
admin = create(:user, :casa_admin)
volunteer = create(:user, :volunteer)
casa_case = create(:casa_case)
assignment = create(:case_assignment, volunteer: volunteer, casa_case: casa_case)

sign_in admin
sign_in admin

expect {
delete volunteer_case_assignment_url(volunteer, assignment)
}.to change(volunteer.casa_cases, :count).by(-1)
expect do
delete case_assignment_url(assignment, casa_case_id: casa_case.id)
end.to change(casa_case.volunteers, :count).by(-1)

expect(response).to redirect_to edit_volunteer_path(volunteer)
expect(response).to redirect_to edit_casa_case_path(casa_case)
end
end
end
end
Loading