diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 95c10f40a..65a34f183 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -10,6 +10,12 @@ def index .eager_load(members: :account) .page(params[:page]) .per(25) + + @memberships = current_organization.members. + where(user_id: @users.map(&:id)). + includes(:account).each_with_object({}) do |mem, ob| + ob[mem.user_id] = mem + end end def show diff --git a/app/views/users/_user_rows.html.erb b/app/views/users/_user_rows.html.erb index 1631dfa0a..344ffea50 100644 --- a/app/views/users/_user_rows.html.erb +++ b/app/views/users/_user_rows.html.erb @@ -1,5 +1,5 @@ <% users.each do |user| %> - <% membership = user.members.first %> + <% membership = memberships[user.id] %> <%= content_tag(:tr, class: membership.active? ? "" : "bg-danger") do %> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 2deb86c4e..fea03f0d9 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -54,7 +54,7 @@ - <%= render "user_rows", users: @users %> + <%= render "user_rows", users: @users, memberships: @memberships %> diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 1f3f967a2..dcf1fe170 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -1,28 +1,28 @@ require "spec_helper" describe UsersController do - let (:test_organization) { Fabricate(:organization) } - let (:member_admin) do + let(:test_organization) { Fabricate(:organization) } + let(:member_admin) do Fabricate(:member, organization: test_organization, manager: true) end - let (:member) do + let(:member) do Fabricate(:member, organization: test_organization, manager: false) end - let (:another_member) do + let(:another_member) do Fabricate(:member, organization: test_organization, manager: false) end - let (:wrong_email_member) do + let(:wrong_email_member) do Fabricate(:member, organization: test_organization, manager: false) end - let (:empty_email_member) do + let(:empty_email_member) do Fabricate(:member, organization: test_organization, manager: false) @@ -38,6 +38,35 @@ before { set_browser_locale("ca") } describe "GET #index" do + context 'when a user has many memberships' do + let!(:member_in_another_organization) { Fabricate(:member, user: user) } + + before do + login(user) + member.account.update_attribute( + :balance, + Time.parse('13:33').seconds_since_midnight + ) + end + + it 'gets her membership in the current organization' do + get :index + + expect(assigns(:memberships)).to eq({ + member.user_id => member, + another_member.user_id => another_member, + member_admin.user_id => member_admin, + wrong_email_member.user_id => wrong_email_member, + empty_email_member.user_id => empty_email_member + }) + end + + it 'shows data for her membership in the current organization' do + get :index + expect(response.body).to include(" 13:33 ") + end + end + context "with an normal logged user" do it "populates and array of users" do login(user)