From c3675c1b2a630b8c66385436cbed20daeac4149c Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Thu, 29 Jan 2015 12:50:59 +0200 Subject: [PATCH] Logging added for most models --- app/models/api_user.rb | 1 + app/models/concerns/log_table.rb | 10 ---- app/models/contact_disclosure.rb | 1 + app/models/contact_status.rb | 1 + app/models/country.rb | 4 ++ app/models/dnskey.rb | 1 + app/models/domain_contact.rb | 1 + app/models/domain_transfer.rb | 1 + app/models/keyrelay.rb | 1 + app/models/legal_document.rb | 1 + app/models/message.rb | 1 + app/models/registrar.rb | 1 + app/models/reserved_domain.rb | 1 + app/models/setting.rb | 1 + app/models/user.rb | 1 + app/models/version/address_version.rb | 3 +- app/models/version/api_user_version.rb | 4 ++ .../version/contact_disclosure_version.rb | 4 ++ app/models/version/contact_status_version.rb | 4 ++ app/models/version/contact_version.rb | 10 ++-- app/models/version/country_version.rb | 4 ++ app/models/version/dnskey_version.rb | 4 ++ app/models/version/domain_contact_version.rb | 4 ++ app/models/version/domain_status_version.rb | 3 +- app/models/version/domain_transfer_version.rb | 4 ++ app/models/version/domain_version.rb | 4 +- app/models/version/keyrelay_version.rb | 4 ++ app/models/version/legal_document_version.rb | 4 ++ app/models/version/message_version.rb | 4 ++ app/models/version/nameserver_version.rb | 3 +- app/models/version/registrar_version.rb | 4 ++ app/models/version/reserved_domain_version.rb | 4 ++ app/models/version/setting_version.rb | 4 ++ app/models/version/user_version.rb | 4 ++ .../version/zonefile_setting_version.rb | 4 ++ app/models/zonefile_setting.rb | 1 + config/initializers/paper_trail.rb | 7 +-- db/migrate/20150129093938_add_versions.rb | 11 ++++ db/schema.rb | 15 ++++-- lib/generators/version/USAGE | 1 + .../version/templates/version.rb.erb | 4 ++ lib/generators/version/version_generator.rb | 11 ++++ spec/models/address_spec.rb | 47 +++++++++++++++- spec/models/contact_disclosure_spec.rb | 48 +++++++++++++++++ spec/models/country_spec.rb | 54 +++++++++++++++++++ spec/rails_helper.rb | 4 +- 46 files changed, 285 insertions(+), 28 deletions(-) delete mode 100644 app/models/concerns/log_table.rb create mode 100644 app/models/version/api_user_version.rb create mode 100644 app/models/version/contact_disclosure_version.rb create mode 100644 app/models/version/contact_status_version.rb create mode 100644 app/models/version/country_version.rb create mode 100644 app/models/version/dnskey_version.rb create mode 100644 app/models/version/domain_contact_version.rb create mode 100644 app/models/version/domain_transfer_version.rb create mode 100644 app/models/version/keyrelay_version.rb create mode 100644 app/models/version/legal_document_version.rb create mode 100644 app/models/version/message_version.rb create mode 100644 app/models/version/registrar_version.rb create mode 100644 app/models/version/reserved_domain_version.rb create mode 100644 app/models/version/setting_version.rb create mode 100644 app/models/version/user_version.rb create mode 100644 app/models/version/zonefile_setting_version.rb create mode 100644 db/migrate/20150129093938_add_versions.rb create mode 100644 lib/generators/version/USAGE create mode 100644 lib/generators/version/templates/version.rb.erb create mode 100644 lib/generators/version/version_generator.rb create mode 100644 spec/models/country_spec.rb diff --git a/app/models/api_user.rb b/app/models/api_user.rb index 3f9fc7d40..77eb6fa38 100644 --- a/app/models/api_user.rb +++ b/app/models/api_user.rb @@ -1,5 +1,6 @@ # rubocop: disable Metrics/ClassLength class ApiUser < ActiveRecord::Base + include Versions # version/api_user_version.rb # TODO: should have max request limit per day belongs_to :registrar has_many :contacts diff --git a/app/models/concerns/log_table.rb b/app/models/concerns/log_table.rb deleted file mode 100644 index f34538c67..000000000 --- a/app/models/concerns/log_table.rb +++ /dev/null @@ -1,10 +0,0 @@ -module LogTable - extend ActiveSupport::Concern - - included do - # one plase to define log tables - log_table_name = "log_#{table_name.sub('_versions', '').tableize}" - self.table_name = log_table_name - self.sequence_name = log_table_name - end -end diff --git a/app/models/contact_disclosure.rb b/app/models/contact_disclosure.rb index 0d7554bd1..537c388a7 100644 --- a/app/models/contact_disclosure.rb +++ b/app/models/contact_disclosure.rb @@ -1,4 +1,5 @@ class ContactDisclosure < ActiveRecord::Base + include Versions # version/contact_disclosure_version.rb belongs_to :contact def attributes_with_flag diff --git a/app/models/contact_status.rb b/app/models/contact_status.rb index 71b435b78..ac46c40d5 100644 --- a/app/models/contact_status.rb +++ b/app/models/contact_status.rb @@ -1,4 +1,5 @@ class ContactStatus < ActiveRecord::Base + include Versions # version/contact_status_version.rb include EppErrors belongs_to :contact diff --git a/app/models/country.rb b/app/models/country.rb index d4e8698bf..adfe73e12 100644 --- a/app/models/country.rb +++ b/app/models/country.rb @@ -1,4 +1,8 @@ class Country < ActiveRecord::Base + include Versions # version/country_version.rb + + validates :name, presence: true + def to_s name end diff --git a/app/models/dnskey.rb b/app/models/dnskey.rb index de4e23004..bb194959a 100644 --- a/app/models/dnskey.rb +++ b/app/models/dnskey.rb @@ -1,4 +1,5 @@ class Dnskey < ActiveRecord::Base + include Versions # version/dnskey_version.rb include EppErrors belongs_to :domain diff --git a/app/models/domain_contact.rb b/app/models/domain_contact.rb index face6a067..0bd60e80e 100644 --- a/app/models/domain_contact.rb +++ b/app/models/domain_contact.rb @@ -1,4 +1,5 @@ class DomainContact < ActiveRecord::Base + include Versions # version/domain_contact_version.rb include EppErrors belongs_to :contact belongs_to :domain diff --git a/app/models/domain_transfer.rb b/app/models/domain_transfer.rb index 877a420a7..9e5186eb7 100644 --- a/app/models/domain_transfer.rb +++ b/app/models/domain_transfer.rb @@ -1,4 +1,5 @@ class DomainTransfer < ActiveRecord::Base + include Versions # version/domain_transfer_version.rb belongs_to :domain belongs_to :transfer_from, class_name: 'Registrar' diff --git a/app/models/keyrelay.rb b/app/models/keyrelay.rb index a6df639e6..b723919a4 100644 --- a/app/models/keyrelay.rb +++ b/app/models/keyrelay.rb @@ -1,4 +1,5 @@ class Keyrelay < ActiveRecord::Base + include Versions # version/keyrelay_version.rb include EppErrors belongs_to :domain diff --git a/app/models/legal_document.rb b/app/models/legal_document.rb index 07c27fd2a..1201f0ddb 100644 --- a/app/models/legal_document.rb +++ b/app/models/legal_document.rb @@ -1,4 +1,5 @@ class LegalDocument < ActiveRecord::Base + include Versions # version/legal_document_version.rb belongs_to :documentable, polymorphic: true TYPES = %w(pdf bdoc ddoc zip rar gz tar 7z) diff --git a/app/models/message.rb b/app/models/message.rb index 831ff970a..174edc8ef 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -1,4 +1,5 @@ class Message < ActiveRecord::Base + include Versions # version/message_version.rb belongs_to :registrar before_create -> { self.queued = true } diff --git a/app/models/registrar.rb b/app/models/registrar.rb index 29df5ccd3..300336d56 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -1,4 +1,5 @@ class Registrar < ActiveRecord::Base + include Versions # version/registrar_version.rb belongs_to :country has_many :domains, dependent: :restrict_with_error has_many :contacts, dependent: :restrict_with_error diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb index 7bb3963c8..807c44f91 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -1,2 +1,3 @@ class ReservedDomain < ActiveRecord::Base + include Versions # version/reserved_domain_version.rb end diff --git a/app/models/setting.rb b/app/models/setting.rb index 50222cb11..005cce626 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -1,2 +1,3 @@ class Setting < RailsSettings::CachedSettings + include Versions # version/setting_version.rb end diff --git a/app/models/user.rb b/app/models/user.rb index 4df12fab5..33259416c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,4 +1,5 @@ class User < ActiveRecord::Base + include Versions # version/user_version.rb # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :trackable, :timeoutable diff --git a/app/models/version/address_version.rb b/app/models/version/address_version.rb index 99f61603e..a4a1b503c 100644 --- a/app/models/version/address_version.rb +++ b/app/models/version/address_version.rb @@ -1,3 +1,4 @@ class AddressVersion < PaperTrail::Version - include LogTable + self.table_name = :log_addresses + self.sequence_name = :log_addresses_id_seq end diff --git a/app/models/version/api_user_version.rb b/app/models/version/api_user_version.rb new file mode 100644 index 000000000..031be475c --- /dev/null +++ b/app/models/version/api_user_version.rb @@ -0,0 +1,4 @@ +class ApiUserVersion < PaperTrail::Version + self.table_name = :log_api_users + self.sequence_name = :log_api_users_id_seq +end diff --git a/app/models/version/contact_disclosure_version.rb b/app/models/version/contact_disclosure_version.rb new file mode 100644 index 000000000..22ed40076 --- /dev/null +++ b/app/models/version/contact_disclosure_version.rb @@ -0,0 +1,4 @@ +class ContactDisclosureVersion < PaperTrail::Version + self.table_name = :log_contact_disclosures + self.sequence_name = :log_contact_disclosures_id_seq +end diff --git a/app/models/version/contact_status_version.rb b/app/models/version/contact_status_version.rb new file mode 100644 index 000000000..4ca0e5ed6 --- /dev/null +++ b/app/models/version/contact_status_version.rb @@ -0,0 +1,4 @@ +class ContactStatusVersion < PaperTrail::Version + self.table_name = :log_contact_statuses + self.sequence_name = :log_contact_statuses_id_seq +end diff --git a/app/models/version/contact_version.rb b/app/models/version/contact_version.rb index cbd435ece..c98efc41f 100644 --- a/app/models/version/contact_version.rb +++ b/app/models/version/contact_version.rb @@ -1,8 +1,8 @@ class ContactVersion < PaperTrail::Version - include LogTable - include UserEvents - # self.table_name = :post_versions - # self.sequence_name = :post_version_id_seq + self.table_name = :log_contacts + self.sequence_name = :log_contacts_id_seq - scope :deleted, -> { where(event: 'destroy') } + # include UserEvents + + # scope :deleted, -> { where(event: 'destroy') } end diff --git a/app/models/version/country_version.rb b/app/models/version/country_version.rb new file mode 100644 index 000000000..55c980138 --- /dev/null +++ b/app/models/version/country_version.rb @@ -0,0 +1,4 @@ +class CountryVersion < PaperTrail::Version + self.table_name = :log_countries + self.sequence_name = :log_countries_id_seq +end diff --git a/app/models/version/dnskey_version.rb b/app/models/version/dnskey_version.rb new file mode 100644 index 000000000..6116d328d --- /dev/null +++ b/app/models/version/dnskey_version.rb @@ -0,0 +1,4 @@ +class DnskeyVersion < PaperTrail::Version + self.table_name = :log_dnskeys + self.sequence_name = :log_dnskeys_id_seq +end diff --git a/app/models/version/domain_contact_version.rb b/app/models/version/domain_contact_version.rb new file mode 100644 index 000000000..31dc1be5e --- /dev/null +++ b/app/models/version/domain_contact_version.rb @@ -0,0 +1,4 @@ +class DomainContactVersion < PaperTrail::Version + self.table_name = :log_domain_contacts + self.sequence_name = :log_domain_contacts_id_seq +end diff --git a/app/models/version/domain_status_version.rb b/app/models/version/domain_status_version.rb index 55fd08557..4ec702b7c 100644 --- a/app/models/version/domain_status_version.rb +++ b/app/models/version/domain_status_version.rb @@ -1,3 +1,4 @@ class DomainStatusVersion < PaperTrail::Version - include LogTable + self.table_name = :log_domain_statuses + self.sequence_name = :log_domain_statuses_id_seq end diff --git a/app/models/version/domain_transfer_version.rb b/app/models/version/domain_transfer_version.rb new file mode 100644 index 000000000..4b37a9113 --- /dev/null +++ b/app/models/version/domain_transfer_version.rb @@ -0,0 +1,4 @@ +class DomainTransferVersion < PaperTrail::Version + self.table_name = :log_domain_transfers + self.sequence_name = :log_domain_transfers_id_seq +end diff --git a/app/models/version/domain_version.rb b/app/models/version/domain_version.rb index c66a4d1ce..47d0c3240 100644 --- a/app/models/version/domain_version.rb +++ b/app/models/version/domain_version.rb @@ -1,5 +1,7 @@ class DomainVersion < PaperTrail::Version - include LogTable + self.table_name = :log_domains + self.sequence_name = :log_domains_id_seq + include UserEvents # TODO: remove old # include DomainVersionObserver if Setting.whois_enabled # unless Setting.whois_enabled diff --git a/app/models/version/keyrelay_version.rb b/app/models/version/keyrelay_version.rb new file mode 100644 index 000000000..f21a58887 --- /dev/null +++ b/app/models/version/keyrelay_version.rb @@ -0,0 +1,4 @@ +class KeyrelayVersion < PaperTrail::Version + self.table_name = :log_keyrelays + self.sequence_name = :log_keyrelays_id_seq +end diff --git a/app/models/version/legal_document_version.rb b/app/models/version/legal_document_version.rb new file mode 100644 index 000000000..d9187f7ad --- /dev/null +++ b/app/models/version/legal_document_version.rb @@ -0,0 +1,4 @@ +class LegalDocumentVersion < PaperTrail::Version + self.table_name = :log_legal_documents + self.sequence_name = :log_legal_documents_id_seq +end diff --git a/app/models/version/message_version.rb b/app/models/version/message_version.rb new file mode 100644 index 000000000..eee161ba0 --- /dev/null +++ b/app/models/version/message_version.rb @@ -0,0 +1,4 @@ +class MessageVersion < PaperTrail::Version + self.table_name = :log_messages + self.sequence_name = :log_messages_id_seq +end diff --git a/app/models/version/nameserver_version.rb b/app/models/version/nameserver_version.rb index 47b7d652e..bde708c41 100644 --- a/app/models/version/nameserver_version.rb +++ b/app/models/version/nameserver_version.rb @@ -1,3 +1,4 @@ class NameserverVersion < PaperTrail::Version - include LogTable + self.table_name = :log_nameservers + self.sequence_name = :log_nameservers_id_seq end diff --git a/app/models/version/registrar_version.rb b/app/models/version/registrar_version.rb new file mode 100644 index 000000000..f8b115dcd --- /dev/null +++ b/app/models/version/registrar_version.rb @@ -0,0 +1,4 @@ +class RegistrarVersion < PaperTrail::Version + self.table_name = :log_registrars + self.sequence_name = :log_registrars_id_seq +end diff --git a/app/models/version/reserved_domain_version.rb b/app/models/version/reserved_domain_version.rb new file mode 100644 index 000000000..2eab866ed --- /dev/null +++ b/app/models/version/reserved_domain_version.rb @@ -0,0 +1,4 @@ +class ReservedDomainVersion < PaperTrail::Version + self.table_name = :log_reserved_domains + self.sequence_name = :log_reserved_domains_id_seq +end diff --git a/app/models/version/setting_version.rb b/app/models/version/setting_version.rb new file mode 100644 index 000000000..87632f485 --- /dev/null +++ b/app/models/version/setting_version.rb @@ -0,0 +1,4 @@ +class SettingVersion < PaperTrail::Version + self.table_name = :log_settings + self.sequence_name = :log_settings_id_seq +end diff --git a/app/models/version/user_version.rb b/app/models/version/user_version.rb new file mode 100644 index 000000000..714a44c45 --- /dev/null +++ b/app/models/version/user_version.rb @@ -0,0 +1,4 @@ +class UserVersion < PaperTrail::Version + self.table_name = :log_users + self.sequence_name = :log_users_id_seq +end diff --git a/app/models/version/zonefile_setting_version.rb b/app/models/version/zonefile_setting_version.rb new file mode 100644 index 000000000..a3d2bcacd --- /dev/null +++ b/app/models/version/zonefile_setting_version.rb @@ -0,0 +1,4 @@ +class ZonefileSettingVersion < PaperTrail::Version + self.table_name = :log_zonefile_settings + self.sequence_name = :log_zonefile_settings_id_seq +end diff --git a/app/models/zonefile_setting.rb b/app/models/zonefile_setting.rb index 96f692fae..cdeb8087d 100644 --- a/app/models/zonefile_setting.rb +++ b/app/models/zonefile_setting.rb @@ -1,4 +1,5 @@ class ZonefileSetting < ActiveRecord::Base + include Versions # version/zonefile_setting_version.rb validates :origin, :ttl, :refresh, :retry, :expire, :minimum_ttl, :email, presence: true validates :ttl, :refresh, :retry, :expire, :minimum_ttl, numericality: { only_integer: true } diff --git a/config/initializers/paper_trail.rb b/config/initializers/paper_trail.rb index f40a464bf..08489353c 100644 --- a/config/initializers/paper_trail.rb +++ b/config/initializers/paper_trail.rb @@ -1,6 +1,10 @@ # the following line is required for PaperTrail >= 4.0.0 with Rails PaperTrail::Rails::Engine.eager_load! +PaperTrail::Version.module_eval do + self.abstract_class = true +end + # Store console and rake changes in versions if defined?(::Rails::Console) PaperTrail.whodunnit = "#{`whoami`.strip}: console" @@ -8,6 +12,3 @@ elsif File.basename($PROGRAM_NAME) == "rake" PaperTrail.whodunnit = "#{`whoami`.strip}: rake #{ARGV.join ' '}" end -PaperTrail::Version.module_eval do - self.abstract_class = true -end diff --git a/db/migrate/20150129093938_add_versions.rb b/db/migrate/20150129093938_add_versions.rb new file mode 100644 index 000000000..7add7fec3 --- /dev/null +++ b/db/migrate/20150129093938_add_versions.rb @@ -0,0 +1,11 @@ +class AddVersions < ActiveRecord::Migration + def change + if ActiveRecord::Base.connection.table_exists? 'versions' + rename_table :versions, :depricated_versions + end + + create_table :versions do |t| + t.text :depricated_table_but_somehow_paper_trail_tests_fails_without_it + end + end +end diff --git a/db/schema.rb b/db/schema.rb index f156b4fb8..1fe0c1647 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,8 +11,12 @@ # # It's strongly recommended that you check this file into your version control system. +<<<<<<< HEAD ActiveRecord::Schema.define(version: 20150130085458) do +======= +ActiveRecord::Schema.define(version: 20150129114042) do +>>>>>>> Logging added for most models # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -127,6 +131,10 @@ ActiveRecord::Schema.define(version: 20150130085458) do t.string "digest" end + create_table "depricated_versions", force: :cascade do |t| + t.datetime "created_at" + end + create_table "dnskeys", force: :cascade do |t| t.integer "domain_id" t.integer "flags" @@ -538,14 +546,11 @@ ActiveRecord::Schema.define(version: 20150130085458) do t.string "billing_address" t.datetime "created_at" t.datetime "updated_at" -<<<<<<< HEAD t.string "phone" t.string "email" t.string "billing_email" -======= t.integer "creator_id" t.integer "updater_id" ->>>>>>> Added pure PaperTrail stack end create_table "reserved_domains", force: :cascade do |t| @@ -587,6 +592,10 @@ ActiveRecord::Schema.define(version: 20150130085458) do t.integer "updater_id" end + create_table "versions", force: :cascade do |t| + t.text "depricated_table_but_somehow_paper_trail_tests_fails_without_it" + end + create_table "zonefile_settings", force: :cascade do |t| t.string "origin" t.integer "ttl" diff --git a/lib/generators/version/USAGE b/lib/generators/version/USAGE new file mode 100644 index 000000000..6a75545c5 --- /dev/null +++ b/lib/generators/version/USAGE @@ -0,0 +1 @@ +Will generate custom PaperTrail version model diff --git a/lib/generators/version/templates/version.rb.erb b/lib/generators/version/templates/version.rb.erb new file mode 100644 index 000000000..336b3a5c0 --- /dev/null +++ b/lib/generators/version/templates/version.rb.erb @@ -0,0 +1,4 @@ +class <%= class_name %>Version < PaperTrail::Version + self.table_name = :log_<%= file_name.tableize %> + self.sequence_name = :log_<%= file_name.tableize %>_id_seq +end diff --git a/lib/generators/version/version_generator.rb b/lib/generators/version/version_generator.rb new file mode 100644 index 000000000..343f88068 --- /dev/null +++ b/lib/generators/version/version_generator.rb @@ -0,0 +1,11 @@ +class VersionGenerator < Rails::Generators::NamedBase + source_root File.expand_path("../templates", __FILE__) + + def create_version_file + template "version.rb.erb", "app/models/version/#{file_name}_version.rb" + end + + def class_name + file_name.camelize + end +end diff --git a/spec/models/address_spec.rb b/spec/models/address_spec.rb index b1d06154a..d72c3e031 100644 --- a/spec/models/address_spec.rb +++ b/spec/models/address_spec.rb @@ -3,10 +3,55 @@ require 'rails_helper' describe Address do it { should belong_to(:contact) } it { should belong_to(:country) } + + context 'about class' do + it 'should have versioning enabled?' do + Address.paper_trail_enabled_for_model?.should == true + end + + it 'should have custom log prexied table name for versions table' do + AddressVersion.table_name.should == 'log_addresses' + end + end + + context 'with invalid attribute' do + before :all do + @address = Address.new + end + + it 'should not be valid' do + @address.valid? + @address.errors.full_messages.should match_array([ + ]) + end + + it 'should not have any versions' do + @address.versions.should == [] + end + end + + context 'with valid attributes' do + before :all do + @address = Fabricate(:address) + end + + it 'should be valid' do + @address.valid? + @address.errors.full_messages.should match_array([]) + end + + it 'should not have one version' do + with_versioning do + @address.versions.should == [] + @address.zip = 'New zip' + @address.save + @address.versions.size.should == 1 + end + end + end end describe Address, '.extract_params' do - it 'returns params hash' do Fabricate(:country, iso: 'EE') ph = { postalInfo: { name: 'fred', addr: { cc: 'EE', city: 'Village', street: 'street1' } } } diff --git a/spec/models/contact_disclosure_spec.rb b/spec/models/contact_disclosure_spec.rb index ad5d37d49..bae95eb55 100644 --- a/spec/models/contact_disclosure_spec.rb +++ b/spec/models/contact_disclosure_spec.rb @@ -2,6 +2,54 @@ require 'rails_helper' describe ContactDisclosure do it { should belong_to(:contact) } + + context 'about class' do + it 'should have versioning enabled?' do + Country.paper_trail_enabled_for_model?.should == true + end + + it 'should have custom log prexied table name for versions table' do + CountryVersion.table_name.should == 'log_countries' + end + end + + context 'with invalid attribute' do + before :all do + @contact_disclosure = Country.new + end + + it 'should not be valid' do + @contact_disclosure.valid? + @contact_disclosure.errors.full_messages.should match_array([ + "Name is missing" + ]) + end + + it 'should not have any versions' do + @contact_disclosure.versions.should == [] + end + end + + context 'with valid attributes' do + before :all do + @contact_disclosure = Fabricate(:contact_disclosure) + end + + it 'should be valid' do + @contact_disclosure.valid? + @contact_disclosure.errors.full_messages.should match_array([]) + end + + it 'should not have one version' do + with_versioning do + @contact_disclosure.versions.should == [] + @contact_disclosure.name = 'New name' + @contact_disclosure.save + @contact_disclosure.versions.size.should == 1 + end + end + end + end describe '.extract_attributes' do diff --git a/spec/models/country_spec.rb b/spec/models/country_spec.rb new file mode 100644 index 000000000..09a54d2f6 --- /dev/null +++ b/spec/models/country_spec.rb @@ -0,0 +1,54 @@ +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 + end + + it 'should have custom log prexied table name for versions table' do + CountryVersion.table_name.should == 'log_countries' + end + end + + context 'with invalid attribute' do + before :all do + @country = Country.new + end + + it 'should not be valid' do + @country.valid? + @country.errors.full_messages.should match_array([ + "Name is missing" + ]) + end + + it 'should not have any versions' do + @country.versions.should == [] + end + end + + context 'with valid attributes' do + before :all do + @country = Fabricate(:country) + end + + it 'should be valid' do + @country.valid? + @country.errors.full_messages.should match_array([]) + end + + it 'should not have one version' do + with_versioning do + @country.versions.should == [] + @country.name = 'New name' + @country.save + @country.versions.size.should == 1 + end + end + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 56547bfc4..8ee505490 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -26,8 +26,8 @@ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } ActiveRecord::Migration.maintain_test_schema! RSpec.configure do |config| - config.filter_run focus: true - config.run_all_when_everything_filtered = true + # config.filter_run focus: true + # config.run_all_when_everything_filtered = true # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false