Assign valuators to groups

This commit is contained in:
rgarcia
2018-02-08 20:47:47 +01:00
parent cddfdf4b84
commit 1dbbe331c9
14 changed files with 132 additions and 9 deletions

View File

@@ -1,6 +1,10 @@
class Admin::ValuatorsController < Admin::BaseController class Admin::ValuatorsController < Admin::BaseController
load_and_authorize_resource load_and_authorize_resource
def show
@valuator = Valuator.find(params[:id])
end
def index def index
@valuators = @valuators.page(params[:page]) @valuators = @valuators.page(params[:page])
end end
@@ -13,12 +17,27 @@ class Admin::ValuatorsController < Admin::BaseController
end end
def create def create
@valuator = Valuator.new(create_params) @valuator = Valuator.new(valuator_params)
@valuator.save @valuator.save
redirect_to admin_valuators_path redirect_to admin_valuators_path
end end
def edit
@valuator = Valuator.find(params[:id])
@valuator_groups = ValuatorGroup.all
end
def update
@valuator = Valuator.find(params[:id])
if @valuator.update(valuator_params)
notice = "Valuator updated successfully"
redirect_to [:admin, @valuator], notice: notice
else
render :edit
end
end
def destroy def destroy
@valuator.destroy @valuator.destroy
redirect_to admin_valuators_path redirect_to admin_valuators_path
@@ -30,9 +49,9 @@ class Admin::ValuatorsController < Admin::BaseController
private private
def create_params def valuator_params
params[:valuator][:description] = nil if params[:valuator][:description].blank? params[:valuator][:description] = nil if params[:valuator][:description].blank?
params.require(:valuator).permit(:user_id, :description) params.require(:valuator).permit(:user_id, :description, :valuator_group_id)
end end
end end

View File

@@ -43,7 +43,7 @@ module Abilities
can [:search, :create, :index, :destroy], ::Administrator can [:search, :create, :index, :destroy], ::Administrator
can [:search, :create, :index, :destroy], ::Moderator can [:search, :create, :index, :destroy], ::Moderator
can [:search, :create, :index, :destroy, :summary], ::Valuator can [:search, :show, :edit, :update, :create, :index, :destroy, :summary], ::Valuator
can [:search, :create, :index, :destroy], ::Manager can [:search, :create, :index, :destroy], ::Manager
can [:search, :index], ::User can [:search, :index], ::User

View File

@@ -1,5 +1,7 @@
class Valuator < ActiveRecord::Base class Valuator < ActiveRecord::Base
belongs_to :user, touch: true belongs_to :user, touch: true
belongs_to :valuator_group
delegate :name, :email, :name_and_email, to: :user delegate :name, :email, :name_and_email, to: :user
has_many :valuation_assignments, dependent: :destroy has_many :valuation_assignments, dependent: :destroy

View File

@@ -1,2 +1,3 @@
class ValuatorGroup < ActiveRecord::Base class ValuatorGroup < ActiveRecord::Base
has_many :valuators
end end

View File

@@ -1,4 +1,6 @@
<%= form_for [:admin, @group] do |f| %> <%= form_for [:admin, @group] do |f| %>
<%= f.text_field :name %> <%= f.text_field :name %>
<%= f.submit %> <%= f.submit %>
<% end %> <% end %>
<%= link_to "Go back", admin_valuator_groups_path %>

View File

@@ -0,0 +1,9 @@
<%= form_for [:admin, @valuator] do |f| %>
<%= f.text_field :description %>
<%= f.select :valuator_group_id,
@valuator_groups.map {|group| [group.name, group.id] },
{ include_blank: true } %>
<%= f.submit %>
<% end %>
<%= link_to "Go back", admin_valuator_path(@valuator) %>

View File

@@ -13,6 +13,7 @@
<th scope="col"><%= t("admin.valuators.index.name") %></th> <th scope="col"><%= t("admin.valuators.index.name") %></th>
<th scope="col"><%= t("admin.valuators.index.email") %></th> <th scope="col"><%= t("admin.valuators.index.email") %></th>
<th scope="col"><%= t("admin.valuators.index.description") %></th> <th scope="col"><%= t("admin.valuators.index.description") %></th>
<th scope="col">Grupo</th>
<th scope="col"><%= t("admin.actions.actions") %></th> <th scope="col"><%= t("admin.actions.actions") %></th>
</thead> </thead>
<tbody> <tbody>
@@ -28,6 +29,12 @@
<% end %> <% end %>
</td> </td>
<td> <td>
<%= valuator.valuator_group.try(:name) %>
</td>
<td>
<%= link_to "Edit",
edit_admin_valuator_path(valuator),
class: "button hollow expanded" %>
<%= link_to t("admin.valuators.valuator.delete"), <%= link_to t("admin.valuators.valuator.delete"),
admin_valuator_path(valuator), admin_valuator_path(valuator),
method: :delete, method: :delete,

View File

@@ -0,0 +1,7 @@
<div>Name: <%= @valuator.name %></div>
<div>Description <%= @valuator.description %></div>
<div>Email: <%= @valuator.email %></div>
<div>Group: <%= @valuator.valuator_group.try(:name) %></div>
<%= link_to "See all evaluators", admin_valuators_path %>
<%= link_to "Edit", edit_admin_valuator_path(@valuator) %>

View File

@@ -80,7 +80,7 @@ namespace :admin do
get :search, on: :collection get :search, on: :collection
end end
resources :valuators, only: [:index, :create, :destroy] do resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
get :search, on: :collection get :search, on: :collection
get :summary, on: :collection get :summary, on: :collection
end end

View File

@@ -0,0 +1,5 @@
class AddValuatorGroupToValuators < ActiveRecord::Migration
def change
add_column :valuators, :valuator_group_id, :integer
end
end

View File

@@ -1142,6 +1142,7 @@ ActiveRecord::Schema.define(version: 20180320104823) do
t.string "description" t.string "description"
t.integer "spending_proposals_count", default: 0 t.integer "spending_proposals_count", default: 0
t.integer "budget_investments_count", default: 0 t.integer "budget_investments_count", default: 0
t.integer "valuator_group_id"
end end
add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree

View File

@@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
feature "Valuator groups", :focus do feature "Valuator groups" do
let(:admin) { create(:administrator).user } let(:admin) { create(:administrator).user }
@@ -63,4 +63,6 @@ feature "Valuator groups", :focus do
expect(page).to have_content "There are 0 groups of users" expect(page).to have_content "There are 0 groups of users"
end end
pending "When we change the group of a Valuator we should also change the valuator_assignments"
end end

View File

@@ -9,13 +9,21 @@ feature 'Admin valuators' do
visit admin_valuators_path visit admin_valuators_path
end end
scenario "Show", :focus do
visit admin_valuator_path(@valuator)
expect(page).to have_content @valuator.name
expect(page).to have_content @valuator.description
expect(page).to have_content @valuator.email
end
scenario 'Index' do scenario 'Index' do
expect(page).to have_content(@valuator.name) expect(page).to have_content(@valuator.name)
expect(page).to have_content(@valuator.email) expect(page).to have_content(@valuator.email)
expect(page).not_to have_content(@user.name) expect(page).not_to have_content(@user.name)
end end
scenario 'Create Valuator', :js do scenario 'Create', :js do
fill_in 'name_or_email', with: @user.email fill_in 'name_or_email', with: @user.email
click_button 'Search' click_button 'Search'
@@ -29,7 +37,19 @@ feature 'Admin valuators' do
end end
end end
scenario 'Delete Valuator' do scenario "Edit", :focus do
visit edit_admin_valuator_path(@valuator)
fill_in 'name_or_email', with: "john@valuators.org"
fill_in 'valuator_description', with: 'Valuator for health'
click_link "Update valuator"
expect(page).to have_content "Valuator updated successfully"
expect(page).to have_content "john@valuators.org"
expect(page).to have_content "Valuator for health"
end
scenario 'Destroy' do
click_link 'Delete' click_link 'Delete'
within('#valuators') do within('#valuators') do
@@ -85,4 +105,48 @@ feature 'Admin valuators' do
end end
end end
context "Valuator Group", :focus do
scenario "Add a valuator to a group" do
valuator = create(:valuator)
group = create(:valuator_group, name: "Health")
visit edit_admin_valuator_path(valuator)
select "Health", from: "valuator_valuator_group_id"
click_button "Update Evaluador"
expect(page).to have_content "Valuator updated successfully"
expect(page).to have_content "Health"
end
scenario "Update a valuator's group" do
valuator = create(:valuator)
group1 = create(:valuator_group, name: "Health")
group2 = create(:valuator_group, name: "Economy")
member = create(:valuator_group_member, valuator: valuator, valuator_group: group1)
visit edit_admin_valuator_path(valuator)
select "Economy", from: "valuator_valuator_group_id"
click_button "Update Evaluador"
expect(page).to have_content "Valuator updated successfully"
expect(page).to have_content "Economy"
end
scenario "Remove a valuator from a group" do
valuator = create(:valuator)
group1 = create(:valuator_group, name: "Health")
member = create(:valuator_group_member, valuator: valuator, valuator_group: group1)
visit edit_admin_valuator_path(valuator)
select "", from: "valuator_valuator_group_id"
click_button "Update Evaluador"
expect(page).to have_content "Valuator updated successfully"
expect(page).to_not have_content "Health"
end
end
end end

View File

@@ -15,4 +15,8 @@ describe Valuator do
expect(valuator.description_or_email).to eq(valuator.email) expect(valuator.description_or_email).to eq(valuator.email)
end end
end end
describe "Group" do
pending "should reasign investments when the group changes"
end
end end