Skip to content

Commit

Permalink
[#76864570] data consistency report with database foreign keys
Browse files Browse the repository at this point in the history
Squashed commit of the following:

commit 439afbf
Author: Franco Sellitto <franco.sellitto@zhdk.ch>
Date:   Mon Sep 15 12:15:26 2014 +0200

    introducing database foreign keys
  • Loading branch information
Franco Sellitto committed Sep 15, 2014
1 parent 3cb4b3e commit 1e1f0e3
Show file tree
Hide file tree
Showing 13 changed files with 4,221 additions and 3,869 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ gem 'factory_girl', '~> 4.1', group: [:test, :development]
gem 'factory_girl_rails', '~> 4.1', group: [:test, :development]
gem 'faker', '1.3.0', group: [:test, :development] # NOTE '~> 1.4' doesn't work beacause "I18n::InvalidLocale" error, see note for config.i18n in config/application.rb
gem 'font-awesome-rails', '~> 3.2.1' # NOTE in order to upgrade to '~> 4.0', use .fa css class instead of .icon
gem 'foreigner', '~> 1.6'
gem 'geocoder', '~> 1.1'
gem 'gettext_i18n_rails', '~> 1.0'
gem 'guard-jasmine', '~> 1.19', group: [:test, :development]
Expand Down
9 changes: 6 additions & 3 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ GEM
compass-rails (1.1.7)
compass (>= 0.12.2)
sprockets (<= 2.11.0)
cucumber (1.3.17)
cucumber (1.3.16)
builder (>= 2.1.2)
diff-lcs (>= 1.1.3)
gherkin (~> 2.12)
Expand Down Expand Up @@ -140,9 +140,11 @@ GEM
ffi (1.9.3)
font-awesome-rails (3.2.1.3)
railties (>= 3.2, < 5.0)
foreigner (1.6.1)
activerecord (>= 3.0.0)
formatador (0.2.5)
fssm (0.2.10)
geocoder (1.2.5)
geocoder (1.2.4)
gettext_i18n_rails (1.1.0)
fast_gettext (>= 0.9.0)
gherkin (2.12.2)
Expand Down Expand Up @@ -178,7 +180,7 @@ GEM
open4 (~> 1.0)
launchy (2.4.2)
addressable (~> 2.3)
libv8 (3.16.14.7)
libv8 (3.16.14.5)
listen (2.7.9)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
Expand Down Expand Up @@ -364,6 +366,7 @@ DEPENDENCIES
factory_girl_rails (~> 4.1)
faker (= 1.3.0)
font-awesome-rails (~> 3.2.1)
foreigner (~> 1.6)
geocoder (~> 1.1)
gettext_i18n_rails (~> 1.0)
guard-jasmine (~> 1.19)
Expand Down
4 changes: 2 additions & 2 deletions cider-ci/tasks/cucumber_scenarios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
cucumber:
body: bundle exec cucumber -p default -f json -o log/cucumber_report.json features/administration/database.feature:12
DEFAULT_BROWSER=firefox
- name: Check empty columns - features/administration/database.feature:17
- name: Check empty columns - features/administration/database.feature:21
auto_trials: 2
scripts:
cucumber:
body: bundle exec cucumber -p default -f json -o log/cucumber_report.json features/administration/database.feature:17
body: bundle exec cucumber -p default -f json -o log/cucumber_report.json features/administration/database.feature:21
DEFAULT_BROWSER=firefox
- name: Verwalten-Bereich sperren - features/administration/wartungsmodus.feature:12
auto_trials: 2
Expand Down
74 changes: 74 additions & 0 deletions db/migrate/20140903105715_foreign_keys.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
class ForeignKeys < ActiveRecord::Migration
def change

begin

add_foreign_key(:access_rights, :inventory_pools, dependent: :delete)
add_foreign_key(:access_rights, :users)
add_foreign_key(:accessories, :models, dependent: :delete)
add_foreign_key(:attachments, :models, dependent: :delete)
add_foreign_key(:contract_lines, :items)
add_foreign_key(:contract_lines, :models)
add_foreign_key(:contract_lines, :options)
add_foreign_key(:contract_lines, :purposes)
add_foreign_key(:contract_lines, :contracts, dependent: :delete)
add_foreign_key(:contract_lines, :users, column: 'returned_to_user_id')
add_foreign_key(:contracts, :inventory_pools)
add_foreign_key(:contracts, :users)
add_foreign_key(:contracts, :users, column: 'delegated_user_id')
add_foreign_key(:contracts, :users, column: 'handed_over_by_user_id')
add_foreign_key(:database_authentications, :users, dependent: :delete)
add_foreign_key(:groups, :inventory_pools)
add_foreign_key(:histories, :users)
add_foreign_key(:holidays, :inventory_pools, dependent: :delete)
add_foreign_key(:inventory_pools, :addresses)
add_foreign_key(:items, :inventory_pools)
add_foreign_key(:items, :inventory_pools, column: 'owner_id')
add_foreign_key(:items, :items, column: 'parent_id', dependent: :nullify)
add_foreign_key(:items, :locations)
add_foreign_key(:items, :models)
add_foreign_key(:items, :suppliers)
add_foreign_key(:locations, :buildings)
add_foreign_key(:model_group_links, :model_groups, column: 'ancestor_id', dependent: :delete)
add_foreign_key(:model_group_links, :model_groups, column: 'descendant_id', dependent: :delete)
add_foreign_key(:model_links, :model_groups, dependent: :delete)
add_foreign_key(:model_links, :models, dependent: :delete)
add_foreign_key(:notifications, :users, dependent: :delete)
add_foreign_key(:options, :inventory_pools)
add_foreign_key(:partitions, :groups)
add_foreign_key(:partitions, :inventory_pools)
add_foreign_key(:partitions, :models, dependent: :delete)
add_foreign_key(:properties, :models, dependent: :delete)
add_foreign_key(:users, :authentication_systems)
add_foreign_key(:users, :languages)
add_foreign_key(:users, :users, column: 'delegator_user_id')
add_foreign_key(:workdays, :inventory_pools, dependent: :delete)

# join tables
add_foreign_key(:accessories_inventory_pools, :accessories)
add_foreign_key(:accessories_inventory_pools, :inventory_pools)
add_foreign_key(:delegations_users, :users)
add_foreign_key(:delegations_users, :users, column: 'delegation_id')
add_foreign_key(:groups_users, :groups)
add_foreign_key(:groups_users, :users)
add_foreign_key(:inventory_pools_model_groups, :inventory_pools)
add_foreign_key(:inventory_pools_model_groups, :model_groups)
add_foreign_key(:models_compatibles, :models)
add_foreign_key(:models_compatibles, :models, column: 'compatible_id')

rescue

puts %Q(
*************************************************************************************
Error: the database has inconsistency issues caused by dead references.
Please visit the consistency report at the following url: /admin/database/consistency
After solving the issues, run again: rake db:migrate
*************************************************************************************
)

raise

end

end
end
4 changes: 4 additions & 0 deletions features/administration/database.feature
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ Feature: Database
Scenario: Check data consistency
When I visit "/admin/database/consistency"
Then all is correct
When a database admin deletes some referenced records directly on the database
Then the delete is prevented
When I visit "/admin/database/consistency"
Then all is correct

@personas
Scenario: Check empty columns
Expand Down

0 comments on commit 1e1f0e3

Please sign in to comment.