diff --git a/app/models/organization_membership.rb b/app/models/organization_membership.rb index 83913cc65..d65246e54 100644 --- a/app/models/organization_membership.rb +++ b/app/models/organization_membership.rb @@ -5,4 +5,11 @@ class OrganizationMembership < ApplicationRecord validates :user_id, :organization_id, :type_of_user, presence: true validates :user_id, uniqueness: { scope: :organization_id } validates :type_of_user, inclusion: { in: %w[admin member guest] } + + after_create :update_user_organization_info_updated_at + after_destroy :update_user_organization_info_updated_at + + def update_user_organization_info_updated_at + user.touch(:organization_info_updated_at) + end end diff --git a/app/views/users/_organizations_area.html.erb b/app/views/users/_organizations_area.html.erb new file mode 100755 index 000000000..30e84ce18 --- /dev/null +++ b/app/views/users/_organizations_area.html.erb @@ -0,0 +1,16 @@ +<% if @user.organizations.present? %> +
+<% end %> diff --git a/app/views/users/_sidebar_additional.html.erb b/app/views/users/_sidebar_additional.html.erb index 5fe0c4982..eb0807121 100644 --- a/app/views/users/_sidebar_additional.html.erb +++ b/app/views/users/_sidebar_additional.html.erb @@ -1,6 +1,7 @@ - <% cache "user-profile-sidebar-additional-#{@user.id}-#{@user.github_repos_updated_at}-#{@user.badge_achievements_count}", expires_in: 2.days do %> + <% cache "user-profile-sidebar-additional-#{@user.id}-#{@user.github_repos_updated_at}-#{@user.badge_achievements_count}-#{@user.organization_info_updated_at}", expires_in: 2.days do %> <%= render "users/sidebar_additional" %> <% end %> diff --git a/db/migrate/20200119214529_add_organization_info_updated_at_to_users.rb b/db/migrate/20200119214529_add_organization_info_updated_at_to_users.rb new file mode 100644 index 000000000..1e120614e --- /dev/null +++ b/db/migrate/20200119214529_add_organization_info_updated_at_to_users.rb @@ -0,0 +1,5 @@ +class AddOrganizationInfoUpdatedAtToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :organization_info_updated_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 2f8f8f972..7cc8c8c8b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1115,6 +1115,7 @@ ActiveRecord::Schema.define(version: 2020_01_20_053525) do t.string "onboarding_variant_version", default: "0" t.boolean "org_admin", default: false t.integer "organization_id" + t.datetime "organization_info_updated_at" t.boolean "permit_adjacent_sponsors", default: true t.datetime "personal_data_updated_at" t.string "profile_image" diff --git a/spec/factories/organization_memberships.rb b/spec/factories/organization_memberships.rb index c2dce017b..4d6c8f455 100644 --- a/spec/factories/organization_memberships.rb +++ b/spec/factories/organization_memberships.rb @@ -1,7 +1,11 @@ FactoryBot.define do factory :organization_membership do - user - organization + association :user, factory: :user, strategy: :create + association :organization, factory: :organization, strategy: :create type_of_user { "member" } + + after(:build) do |organization_membership| + organization_membership.class.skip_callback(:create, :after, :update_user_organization_info_updated_at, raise: false) + end end end diff --git a/spec/system/user/view_user_index_spec.rb b/spec/system/user/view_user_index_spec.rb index d623613b7..7ddf5faa0 100644 --- a/spec/system/user/view_user_index_spec.rb +++ b/spec/system/user/view_user_index_spec.rb @@ -5,6 +5,7 @@ RSpec.describe "User index", type: :system do let!(:article) { create(:article, user: user) } let!(:other_article) { create(:article) } let!(:comment) { create(:comment, user: user, commentable: other_article) } + let(:organization) { create(:organization) } context "when user is unauthorized" do context "when 1 article" do @@ -59,6 +60,17 @@ RSpec.describe "User index", type: :system do end end + context "when user has an organization membership" do + before do + user.organization_memberships.create(organization: organization, type_of_user: "member") + end + + it "shows organizations" do + visit "/user3000" + expect(page).to have_css("#sidebar-wrapper-right h4", text: "organizations") + end + end + context "when visiting own profile" do before do sign_in user