diff --git a/app/controllers/admin/valuators_controller.rb b/app/controllers/admin/valuators_controller.rb
index 8b454a1a2..5b881c96a 100644
--- a/app/controllers/admin/valuators_controller.rb
+++ b/app/controllers/admin/valuators_controller.rb
@@ -1,6 +1,10 @@
class Admin::ValuatorsController < Admin::BaseController
load_and_authorize_resource
+ def show
+ @valuator = Valuator.find(params[:id])
+ end
+
def index
@valuators = @valuators.page(params[:page])
end
@@ -13,12 +17,27 @@ class Admin::ValuatorsController < Admin::BaseController
end
def create
- @valuator = Valuator.new(create_params)
+ @valuator = Valuator.new(valuator_params)
@valuator.save
redirect_to admin_valuators_path
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
@valuator.destroy
redirect_to admin_valuators_path
@@ -30,9 +49,9 @@ class Admin::ValuatorsController < Admin::BaseController
private
- def create_params
+ def valuator_params
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
diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb
index 07c9d158d..6f8a70b5e 100644
--- a/app/models/abilities/administrator.rb
+++ b/app/models/abilities/administrator.rb
@@ -43,7 +43,7 @@ module Abilities
can [:search, :create, :index, :destroy], ::Administrator
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, :index], ::User
diff --git a/app/models/valuator.rb b/app/models/valuator.rb
index 5df6ea030..85f199adb 100644
--- a/app/models/valuator.rb
+++ b/app/models/valuator.rb
@@ -1,5 +1,7 @@
class Valuator < ActiveRecord::Base
belongs_to :user, touch: true
+ belongs_to :valuator_group
+
delegate :name, :email, :name_and_email, to: :user
has_many :valuation_assignments, dependent: :destroy
diff --git a/app/models/valuator_group.rb b/app/models/valuator_group.rb
index d230bd686..ba7fc5edc 100644
--- a/app/models/valuator_group.rb
+++ b/app/models/valuator_group.rb
@@ -1,2 +1,3 @@
class ValuatorGroup < ActiveRecord::Base
+ has_many :valuators
end
\ No newline at end of file
diff --git a/app/views/admin/valuator_groups/new.html.erb b/app/views/admin/valuator_groups/new.html.erb
index 5e0d135c5..917cb9760 100644
--- a/app/views/admin/valuator_groups/new.html.erb
+++ b/app/views/admin/valuator_groups/new.html.erb
@@ -1,4 +1,6 @@
<%= form_for [:admin, @group] do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
-<% end %>
\ No newline at end of file
+<% end %>
+
+<%= link_to "Go back", admin_valuator_groups_path %>
\ No newline at end of file
diff --git a/app/views/admin/valuators/edit.html.erb b/app/views/admin/valuators/edit.html.erb
new file mode 100644
index 000000000..2915114e6
--- /dev/null
+++ b/app/views/admin/valuators/edit.html.erb
@@ -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) %>
\ No newline at end of file
diff --git a/app/views/admin/valuators/index.html.erb b/app/views/admin/valuators/index.html.erb
index c0a11addb..15cc66235 100644
--- a/app/views/admin/valuators/index.html.erb
+++ b/app/views/admin/valuators/index.html.erb
@@ -13,6 +13,7 @@
<%= t("admin.valuators.index.name") %> |
<%= t("admin.valuators.index.email") %> |
<%= t("admin.valuators.index.description") %> |
+ Grupo |
<%= t("admin.actions.actions") %> |
@@ -28,6 +29,12 @@
<% end %>
+ <%= valuator.valuator_group.try(:name) %>
+ |
+
+ <%= link_to "Edit",
+ edit_admin_valuator_path(valuator),
+ class: "button hollow expanded" %>
<%= link_to t("admin.valuators.valuator.delete"),
admin_valuator_path(valuator),
method: :delete,
diff --git a/app/views/admin/valuators/show.html.erb b/app/views/admin/valuators/show.html.erb
new file mode 100644
index 000000000..eff8fad2a
--- /dev/null
+++ b/app/views/admin/valuators/show.html.erb
@@ -0,0 +1,7 @@
+ Name: <%= @valuator.name %>
+Description <%= @valuator.description %>
+Email: <%= @valuator.email %>
+Group: <%= @valuator.valuator_group.try(:name) %>
+
+<%= link_to "See all evaluators", admin_valuators_path %>
+<%= link_to "Edit", edit_admin_valuator_path(@valuator) %>
\ No newline at end of file
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 703227679..6bf380f0c 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -80,7 +80,7 @@ namespace :admin do
get :search, on: :collection
end
- resources :valuators, only: [:index, :create, :destroy] do
+ resources :valuators, only: [:show, :index, :edit, :update, :create, :destroy] do
get :search, on: :collection
get :summary, on: :collection
end
diff --git a/db/migrate/20180208163135_add_valuator_group_to_valuators.rb b/db/migrate/20180208163135_add_valuator_group_to_valuators.rb
new file mode 100644
index 000000000..93ec65e17
--- /dev/null
+++ b/db/migrate/20180208163135_add_valuator_group_to_valuators.rb
@@ -0,0 +1,5 @@
+class AddValuatorGroupToValuators < ActiveRecord::Migration
+ def change
+ add_column :valuators, :valuator_group_id, :integer
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index ab703cb52..154ced3d7 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1142,6 +1142,7 @@ ActiveRecord::Schema.define(version: 20180320104823) do
t.string "description"
t.integer "spending_proposals_count", default: 0
t.integer "budget_investments_count", default: 0
+ t.integer "valuator_group_id"
end
add_index "valuators", ["user_id"], name: "index_valuators_on_user_id", using: :btree
diff --git a/spec/features/admin/valuator_groups_spec.rb b/spec/features/admin/valuator_groups_spec.rb
index 8f179b024..391bb441b 100644
--- a/spec/features/admin/valuator_groups_spec.rb
+++ b/spec/features/admin/valuator_groups_spec.rb
@@ -1,6 +1,6 @@
require 'rails_helper'
-feature "Valuator groups", :focus do
+feature "Valuator groups" do
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"
end
+ pending "When we change the group of a Valuator we should also change the valuator_assignments"
+
end
\ No newline at end of file
diff --git a/spec/features/admin/valuators_spec.rb b/spec/features/admin/valuators_spec.rb
index 25ae57a12..25f8eb3fb 100644
--- a/spec/features/admin/valuators_spec.rb
+++ b/spec/features/admin/valuators_spec.rb
@@ -9,13 +9,21 @@ feature 'Admin valuators' do
visit admin_valuators_path
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
expect(page).to have_content(@valuator.name)
expect(page).to have_content(@valuator.email)
expect(page).not_to have_content(@user.name)
end
- scenario 'Create Valuator', :js do
+ scenario 'Create', :js do
fill_in 'name_or_email', with: @user.email
click_button 'Search'
@@ -29,7 +37,19 @@ feature 'Admin valuators' do
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'
within('#valuators') do
@@ -85,4 +105,48 @@ feature 'Admin valuators' do
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
diff --git a/spec/models/valuator_spec.rb b/spec/models/valuator_spec.rb
index c905bd376..c9387a150 100644
--- a/spec/models/valuator_spec.rb
+++ b/spec/models/valuator_spec.rb
@@ -15,4 +15,8 @@ describe Valuator do
expect(valuator.description_or_email).to eq(valuator.email)
end
end
+
+ describe "Group" do
+ pending "should reasign investments when the group changes"
+ end
end
|