diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index a236073c0895087c0ed0bb773f170a9143f42489..cf8d25d2476f77d85858e615c3f4942d095a1d62 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -6,9 +6,6 @@ FactoryBot/InlineAssociation: - 'ee/spec/factories/merge_request_blocks.rb' - 'ee/spec/factories/vulnerabilities/feedback.rb' - 'spec/factories/atlassian_identities.rb' - - 'spec/factories/design_management/design_at_version.rb' - - 'spec/factories/design_management/designs.rb' - - 'spec/factories/design_management/versions.rb' - 'spec/factories/events.rb' - 'spec/factories/git_wiki_commit_details.rb' - 'spec/factories/gitaly/commit.rb' diff --git a/app/graphql/resolvers/design_management/design_at_version_resolver.rb b/app/graphql/resolvers/design_management/design_at_version_resolver.rb index b0da43abd547d61daeb9aabc4e92b2582041c540..1b69efebe4e93cadecd64b179a7f9a078924d563 100644 --- a/app/graphql/resolvers/design_management/design_at_version_resolver.rb +++ b/app/graphql/resolvers/design_management/design_at_version_resolver.rb @@ -38,7 +38,7 @@ def self.single # that the DesignAtVersion as found by its ID does in fact belong # to this issue. def consistent?(dav) - issue.nil? || (dav&.design&.issue_id == issue.id) + issue.nil? || (dav.present? && dav.design&.issue_id == issue.id) end def issue diff --git a/app/models/design_management/version.rb b/app/models/design_management/version.rb index 55c9084caf274fb287f47c363754a7383da90144..49aec8b972043c223e5e7b3041b50bee80924aa2 100644 --- a/app/models/design_management/version.rb +++ b/app/models/design_management/version.rb @@ -43,10 +43,7 @@ def sentry_extra_data validates :sha, presence: true validates :sha, uniqueness: { case_sensitive: false, scope: :issue_id } validates :author, presence: true - # We are not validating the issue object as it incurs an extra query to fetch - # the record from the DB. Instead, we rely on the foreign key constraint to - # ensure referential integrity. - validates :issue_id, presence: true, unless: :importing? + validates :issue, presence: true, unless: :importing? sha_attribute :sha diff --git a/spec/factories/design_management/design_at_version.rb b/spec/factories/design_management/design_at_version.rb index b73df71595c3720d7f540ace28d695433a7984d4..3d85269ee27ac90e30cce69cb0eb3eea356cab27 100644 --- a/spec/factories/design_management/design_at_version.rb +++ b/spec/factories/design_management/design_at_version.rb @@ -9,13 +9,13 @@ version { nil } transient do - issue { design&.issue || version&.issue || create(:issue) } + issue { design&.issue || version&.issue || association(:issue) } end initialize_with do attrs = attributes.dup - attrs[:design] ||= create(:design, issue: issue) - attrs[:version] ||= create(:design_version, issue: issue) + attrs[:design] ||= association(:design, issue: issue) + attrs[:version] ||= association(:design_version, issue: issue) new(attrs) end diff --git a/spec/factories/design_management/designs.rb b/spec/factories/design_management/designs.rb index 38d0545483c129dfe4847b9702150f3426cb1b6b..c58763791cc2072121e7c28647217b328e7291da 100644 --- a/spec/factories/design_management/designs.rb +++ b/spec/factories/design_management/designs.rb @@ -2,8 +2,8 @@ FactoryBot.define do factory :design, class: 'DesignManagement::Design' do - issue { create(:issue) } - project { issue&.project || create(:project) } + issue { association(:issue) } + project { issue&.project || association(:project) } sequence(:filename) { |n| "homescreen-#{n}.jpg" } transient do diff --git a/spec/factories/design_management/versions.rb b/spec/factories/design_management/versions.rb index a5c0e7076e914d2d7c5a379e4370299be1d07e53..0233a3b567d6fb2f913f54e4ac644e08468ea386 100644 --- a/spec/factories/design_management/versions.rb +++ b/spec/factories/design_management/versions.rb @@ -3,8 +3,8 @@ FactoryBot.define do factory :design_version, class: 'DesignManagement::Version' do sha - issue { designs.first&.issue || create(:issue) } - author { issue&.author || create(:user) } + issue { designs.first&.issue || association(:issue) } + author { issue&.author || association(:user) } transient do designs_count { 1 } diff --git a/spec/models/design_management/design_at_version_spec.rb b/spec/models/design_management/design_at_version_spec.rb index 220de80a52aa89bf14ece3ee520a3536d12b108c..a7cf6a9652bf0a9883d839b3f8c9c36a427ebcd6 100644 --- a/spec/models/design_management/design_at_version_spec.rb +++ b/spec/models/design_management/design_at_version_spec.rb @@ -185,7 +185,7 @@ end describe 'validations' do - subject(:design_at_version) { build(:design_at_version) } + subject(:design_at_version) { build_stubbed(:design_at_version) } it { is_expected.to be_valid } diff --git a/spec/models/design_management/version_spec.rb b/spec/models/design_management/version_spec.rb index cd52f4129dca88a6b6f6b664a753cf4ffd5fc982..e004ad024bc432f22df6fe3b7456ff331060410a 100644 --- a/spec/models/design_management/version_spec.rb +++ b/spec/models/design_management/version_spec.rb @@ -31,7 +31,7 @@ it { is_expected.to validate_presence_of(:author) } it { is_expected.to validate_presence_of(:sha) } it { is_expected.to validate_presence_of(:designs) } - it { is_expected.to validate_presence_of(:issue_id) } + it { is_expected.to validate_presence_of(:issue) } it { is_expected.to validate_uniqueness_of(:sha).scoped_to(:issue_id).case_insensitive } end