From 3d3d03127501f3068b3ceac212b76ef561638419 Mon Sep 17 00:00:00 2001 From: Drake Harper Date: Mon, 11 May 2020 13:37:12 -0600 Subject: [PATCH] Set already set pronouns to sticky Test plan: -migrations run Fixes KNO-476 flag=account_pronouns Change-Id: I95fcb90b891cc20be6f3de1e88a138ee2007a3bd Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/236947 Tested-by: Service Cloud Jenkins Reviewed-by: Rob Orton QA-Review: Rob Orton Product-Review: Rob Orton --- ...508_make_existing_pronoun_fields_sticky.rb | 33 +++++++++++++ ...ake_existing_pronoun_fields_sticky_spec.rb | 46 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 db/migrate/20200511171508_make_existing_pronoun_fields_sticky.rb create mode 100644 spec/migrations/make_existing_pronoun_fields_sticky_spec.rb diff --git a/db/migrate/20200511171508_make_existing_pronoun_fields_sticky.rb b/db/migrate/20200511171508_make_existing_pronoun_fields_sticky.rb new file mode 100644 index 00000000000..a49a3c9440b --- /dev/null +++ b/db/migrate/20200511171508_make_existing_pronoun_fields_sticky.rb @@ -0,0 +1,33 @@ +# +# Copyright (C) 2020 - present Instructure, Inc. +# +# This file is part of Canvas. +# +# Canvas is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, version 3 of the License. +# +# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . + +class MakeExistingPronounFieldsSticky < ActiveRecord::Migration[5.2] + tag :postdeploy + disable_ddl_transaction! + + def up + User.where.not(pronouns: nil).find_each do |u| + u.add_sis_stickiness(:pronouns) + u.set_sis_stickiness + User.where(id: u).update_all(stuck_sis_fields: u.stuck_sis_fields) + end + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/spec/migrations/make_existing_pronoun_fields_sticky_spec.rb b/spec/migrations/make_existing_pronoun_fields_sticky_spec.rb new file mode 100644 index 00000000000..8ad654b4c94 --- /dev/null +++ b/spec/migrations/make_existing_pronoun_fields_sticky_spec.rb @@ -0,0 +1,46 @@ +# +# Copyright (C) 2020 - present Instructure, Inc. +# +# This file is part of Canvas. +# +# Canvas is free software: you can redistribute it and/or modify it under +# the terms of the GNU Affero General Public License as published by the Free +# Software Foundation, version 3 of the License. +# +# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +# details. +# +# You should have received a copy of the GNU Affero General Public License along +# with this program. If not, see . +# + +require_relative "../spec_helper" +require 'db/migrate/20200511171508_make_existing_pronoun_fields_sticky.rb' + +describe 'MakeExistingPronounFieldsSticky' do + describe "up" do + it "sets already set pronoun field as a sticky field" do + u = User.create!(pronouns: 'she/her') + User.where(id: u).update_all(stuck_sis_fields: nil) + MakeExistingPronounFieldsSticky.up + expect(u.stuck_sis_fields.to_a.join(',')).to eq 'name,sortable_name,pronouns' + end + + it "doesn't change a non-set pronoun field as a sticky field" do + u = User.create! + expect(u.stuck_sis_fields.to_a.join(',')).to eq 'name,sortable_name' + MakeExistingPronounFieldsSticky.up + expect(u.stuck_sis_fields.to_a.join(',')).to eq 'name,sortable_name' + end + + it "doesn't affect other set sticky fields" do + u = User.create!(name: 'John Doe') + expect(u.stuck_sis_fields.to_a.join(',')).to eq 'name,sortable_name' + u.update(pronouns: 'she/her') + MakeExistingPronounFieldsSticky.up + expect(u.stuck_sis_fields.to_a.join(',')).to eq 'name,sortable_name,pronouns' + end + end +end