diff --git a/app/controllers/preferences_controller.rb b/app/controllers/preferences_controller.rb index eed1405ef60..85de4577f36 100644 --- a/app/controllers/preferences_controller.rb +++ b/app/controllers/preferences_controller.rb @@ -42,6 +42,7 @@ def update def available_skins (@user.skins.site_skins.usable + - Skin.approved_skins.site_skins.usable).uniq + Skin.approved_skins.site_skins.usable + + [@user.preference.skin]).compact.uniq end end diff --git a/spec/controllers/preferences_controller_spec.rb b/spec/controllers/preferences_controller_spec.rb index f1edfc79bc1..5682f08fa9b 100644 --- a/spec/controllers/preferences_controller_spec.rb +++ b/spec/controllers/preferences_controller_spec.rb @@ -35,6 +35,24 @@ expect(assigns(:available_skins)).to include(usable_skin) expect(assigns(:available_skins)).not_to include(parent_only_skin) end + + it "includes the user's current skin even if it is parent-only" do + parent_only_skin = create(:skin, author: user, unusable: true) + user.preference.update(skin_id: parent_only_skin.id) + + get :index, params: { user_id: user.login } + + expect(assigns(:available_skins)).to include(parent_only_skin) + end + + it "does not add a nil entry when the user's skin has been deleted" do + user.preference.update(skin_id: 9999) + + get :index, params: { user_id: user.login } + + expect(assigns(:available_skins)).not_to include(nil) + expect(response).to be_successful + end end context "as a guest" do