From 9cc765b22b935532782824285977e95f2b4edd41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Geuken?= Date: Tue, 28 Jul 2015 13:46:11 +0200 Subject: [PATCH] [webui] Fix test failure caused by broken validations --- src/api/app/mixins/has_relationships.rb | 4 +-- src/api/app/models/relationship.rb | 37 +++++++++++++++---------- src/api/test/unit/package_test.rb | 1 + 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/api/app/mixins/has_relationships.rb b/src/api/app/mixins/has_relationships.rb index 22cbc0e9436..776d38f2e91 100644 --- a/src/api/app/mixins/has_relationships.rb +++ b/src/api/app/mixins/has_relationships.rb @@ -204,12 +204,12 @@ def update_generic_relationships(xmlhash) pcache[role.title] = :keep else #new role - record = self.relationships.build(role: role) + record = self.relationships.new(role: role) @updater.set_item(record, item) pcache[role.title] = :new end else - record = self.relationships.build(role: role) + record = self.relationships.new(role: role) @updater.set_item(record, item) cache[id] = { role.title => :new } end diff --git a/src/api/app/models/relationship.rb b/src/api/app/models/relationship.rb index 162ee34a072..93a8e6b0000 100644 --- a/src/api/app/models/relationship.rb +++ b/src/api/app/models/relationship.rb @@ -12,22 +12,29 @@ class Relationship < ActiveRecord::Base validates :role, presence: true validate :check_global_role - validates_uniqueness_of :project_id, :scope => :role_id - validates :project_id, uniqueness: { scope: [:role_id, :group_id] } - validates :project_id, uniqueness: { scope: [:role_id, :user_id] } - validates :package_id, uniqueness: { scope: [:role_id, :group_id] } - validates :package_id, uniqueness: { scope: [:role_id, :user_id] } - - validates :package, presence: true, unless: 'project_id.present?' - validates :package, absence: true, if: 'project_id.present?' - - validates :project, presence: true, unless: 'package_id.present?' - - validates :user, presence: true, unless: 'group_id.present?' - validates :user, absence: true, if: 'group_id.present?' - - validates :group, presence: true, unless: 'user_id.present?' + validates_uniqueness_of :project_id, { + scope: [:role_id, :group_id, :user_id], allow_nil: true, + message: "Project has non unique id" + } + validates_uniqueness_of :package_id, { + scope: [:role_id, :group_id, :user_id], allow_nil: true, + message: "Package has non unique id" + } + + validates :package, presence: { + message: "Neither package nor project exists" + }, unless: 'project.present?' + validates :package, absence: { + message: "Package and project can not exist at the same time" + }, if: 'project.present?' + + validates :user, presence: { + message: "Neither user nor group exists" + }, unless: 'group.present?' + validates :user, absence: { + message: "User and group can not exist at the same time" + }, if: 'group.present?' def check_global_role return unless self.role && self.role.global diff --git a/src/api/test/unit/package_test.rb b/src/api/test/unit/package_test.rb index f35630b29f6..b3b69a330fe 100644 --- a/src/api/test/unit/package_test.rb +++ b/src/api/test/unit/package_test.rb @@ -202,6 +202,7 @@ def test_add_user test "names are case sensitive" do np = @package.project.packages.new(name: 'testpack') xh = Xmlhash.parse(@package.to_axml) + np.save! np.update_from_xml(xh) assert_equal np.name, 'testpack' assert np.id > 0