From 50673f6dda82d8b3abb5e7f93f4b777eedbed374 Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Thu, 29 Jan 2015 17:58:24 +0200 Subject: [PATCH] Added creator and updator --- app/models/concerns/versions.rb | 16 +++- .../20150129144652_add_creator_and_updater.rb | 15 ++++ db/schema.rb | 85 ++++++++++--------- spec/models/country_spec.rb | 37 ++++++-- spec/rails_helper.rb | 1 + 5 files changed, 106 insertions(+), 48 deletions(-) create mode 100644 db/migrate/20150129144652_add_creator_and_updater.rb diff --git a/app/models/concerns/versions.rb b/app/models/concerns/versions.rb index 6f8a74faf..f984d7b9c 100644 --- a/app/models/concerns/versions.rb +++ b/app/models/concerns/versions.rb @@ -1,10 +1,22 @@ +# Papertrail concerns is mainly tested at country spec module Versions extend ActiveSupport::Concern included do has_paper_trail class_name: "#{model_name}Version" - end - class_methods do + before_create :add_creator + before_create :add_updator + before_update :add_updator + + def add_creator + self.creator_str = ::PaperTrail.whodunnit + true + end + + def add_updator + self.updator_str = ::PaperTrail.whodunnit + true + end end end diff --git a/db/migrate/20150129144652_add_creator_and_updater.rb b/db/migrate/20150129144652_add_creator_and_updater.rb new file mode 100644 index 000000000..b2eae256c --- /dev/null +++ b/db/migrate/20150129144652_add_creator_and_updater.rb @@ -0,0 +1,15 @@ +class AddCreatorAndUpdater < ActiveRecord::Migration + def change + %w(address contact_disclosure contact contact_status country dnskey + domain_contact domain domain_status domain_transfer api_user keyrelay + legal_document message nameserver registrar + reserved_domain setting user zonefile_setting + ).each do |name| + table_name = name.tableize + remove_column table_name, :creator_id, :string + remove_column table_name, :updater_id, :string + add_column table_name, :creator_str, :string + add_column table_name, :updator_str, :string + end + end +end diff --git a/db/schema.rb b/db/schema.rb index bc803f8c0..017870ea6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,8 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150129134601) do +ActiveRecord::Schema.define(version: 20150129144652) do + # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,8 +26,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.datetime "updated_at" t.string "street2" t.string "street3" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "api_users", force: :cascade do |t| @@ -38,8 +39,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.text "crt" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "cached_nameservers", id: false, force: :cascade do |t| @@ -60,8 +61,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.boolean "name" t.boolean "org_name" t.boolean "address" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "contact_statuses", force: :cascade do |t| @@ -70,8 +71,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.integer "contact_id" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "contacts", force: :cascade do |t| @@ -91,8 +92,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "name" t.string "org_name" t.integer "registrar_id" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "countries", force: :cascade do |t| @@ -100,8 +101,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "name" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "delayed_jobs", force: :cascade do |t| @@ -143,8 +144,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.integer "ds_alg" t.integer "ds_digest_type" t.string "ds_digest" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "domain_contacts", force: :cascade do |t| @@ -154,16 +155,16 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.datetime "created_at" t.datetime "updated_at" t.string "contact_code_cache" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "domain_statuses", force: :cascade do |t| t.integer "domain_id" t.string "description" t.string "value" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "domain_transfers", force: :cascade do |t| @@ -176,8 +177,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.datetime "created_at" t.datetime "updated_at" t.datetime "wait_until" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "domains", force: :cascade do |t| @@ -195,8 +196,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "name_puny" t.integer "period" t.string "period_unit", limit: 1 - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "epp_sessions", force: :cascade do |t| @@ -236,8 +237,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.integer "accepter_id" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "legal_documents", force: :cascade do |t| @@ -247,8 +248,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "documentable_type" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "log_addresses", force: :cascade do |t| @@ -519,8 +520,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.boolean "queued" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "nameservers", force: :cascade do |t| @@ -530,8 +531,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.datetime "updated_at" t.string "ipv6" t.integer "domain_id" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "registrars", force: :cascade do |t| @@ -548,25 +549,27 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "billing_email" t.integer "creator_id" t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "reserved_domains", force: :cascade do |t| t.string "name" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "settings", force: :cascade do |t| - t.string "var", null: false + t.string "var", null: false t.text "value" t.integer "thing_id" - t.string "thing_type", limit: 30 + t.string "thing_type", limit: 30 t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end add_index "settings", ["thing_type", "thing_id", "var"], name: "index_settings_on_thing_type_and_thing_id_and_var", unique: true, using: :btree @@ -585,8 +588,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "identity_code" t.integer "country_id" t.string "roles", array: true - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end create_table "versions", force: :cascade do |t| @@ -604,8 +607,8 @@ ActiveRecord::Schema.define(version: 20150129134601) do t.string "master_nameserver" t.datetime "created_at" t.datetime "updated_at" - t.integer "creator_id" - t.integer "updater_id" + t.string "creator_str" + t.string "updator_str" end end diff --git a/spec/models/country_spec.rb b/spec/models/country_spec.rb index 09a54d2f6..44d0437bd 100644 --- a/spec/models/country_spec.rb +++ b/spec/models/country_spec.rb @@ -1,10 +1,6 @@ require 'rails_helper' describe Country do - before :all do - @epp_user = Fabricate(:country) - end - context 'about class' do it 'should have versioning enabled?' do Country.paper_trail_enabled_for_model?.should == true @@ -30,6 +26,14 @@ describe Country do it 'should not have any versions' do @country.versions.should == [] end + + it 'should not have any creator' do + @country.creator_str.should == nil + end + + it 'should not have any updater' do + @country.updator_str.should == nil + end end context 'with valid attributes' do @@ -42,7 +46,7 @@ describe Country do @country.errors.full_messages.should match_array([]) end - it 'should not have one version' do + it 'should not have a version' do with_versioning do @country.versions.should == [] @country.name = 'New name' @@ -50,5 +54,28 @@ describe Country do @country.versions.size.should == 1 end end + + it 'should have creator' do + PaperTrail.whodunnit = 'test-user' + + with_versioning do + @country = Fabricate(:country) + @country.name = 'Updated name' + @country.save + @country.creator_str.should == 'test-user' + @country.updator_str.should == 'test-user' + end + end + + it 'should have creator' do + PaperTrail.whodunnit = 'test-user-2' + + with_versioning do + @country.name = 'Updated name' + @country.save + @country.updator_str.should == 'test-user-2' + @country.creator_str.should == nil # Factory does not have it + end + end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 8ee505490..43dc4bfce 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -6,6 +6,7 @@ require 'rspec/rails' require 'shoulda/matchers' require 'capybara/poltergeist' require 'paper_trail/frameworks/rspec' +PaperTrail.whodunnit = 'autotest' if ENV['ROBOT'] require 'simplecov'