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