From 53e43f127b5dc409f18ece9fc775ae7ec78b6cd8 Mon Sep 17 00:00:00 2001 From: Olaoluwa Oluro Date: Tue, 15 Apr 2025 13:47:33 +0100 Subject: [PATCH] Add not NULL constraint to fork_networks --- .rubocop_todo/rspec/feature_category.yml | 1 - app/models/fork_network.rb | 2 +- ..._not_null_to_fork_networks_organization_id.rb | 15 +++++++++++++++ db/schema_migrations/20250415124320 | 1 + db/structure.sql | 2 +- ...fill_organization_id_on_fork_networks_spec.rb | 16 ++++++++++++++++ spec/models/fork_network_spec.rb | 8 ++++++-- 7 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb create mode 100644 db/schema_migrations/20250415124320 diff --git a/.rubocop_todo/rspec/feature_category.yml b/.rubocop_todo/rspec/feature_category.yml index 024b0d8c858028..217ef323ee3d2b 100644 --- a/.rubocop_todo/rspec/feature_category.yml +++ b/.rubocop_todo/rspec/feature_category.yml @@ -3198,7 +3198,6 @@ RSpec/FeatureCategory: - 'spec/models/event_collection_spec.rb' - 'spec/models/external_issue_spec.rb' - 'spec/models/fork_network_member_spec.rb' - - 'spec/models/fork_network_spec.rb' - 'spec/models/generic_commit_status_spec.rb' - 'spec/models/gpg_key_spec.rb' - 'spec/models/gpg_key_subkey_spec.rb' diff --git a/app/models/fork_network.rb b/app/models/fork_network.rb index d40cba138ba235..70d5bb25774cab 100644 --- a/app/models/fork_network.rb +++ b/app/models/fork_network.rb @@ -2,7 +2,7 @@ class ForkNetwork < ApplicationRecord belongs_to :root_project, class_name: 'Project' - belongs_to :organization, class_name: 'Organizations::Organization', optional: true + belongs_to :organization, class_name: 'Organizations::Organization' has_many :fork_network_members has_many :projects, through: :fork_network_members diff --git a/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb b/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb new file mode 100644 index 00000000000000..d8138ad66fadcd --- /dev/null +++ b/db/migrate/20250415124320_add_not_null_to_fork_networks_organization_id.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class AddNotNullToForkNetworksOrganizationId < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + + milestone '18.0' + + def up + change_column_null :fork_networks, :organization_id, false + end + + def down + change_column_null :fork_networks, :organization_id, true + end +end diff --git a/db/schema_migrations/20250415124320 b/db/schema_migrations/20250415124320 new file mode 100644 index 00000000000000..f08f67131abe61 --- /dev/null +++ b/db/schema_migrations/20250415124320 @@ -0,0 +1 @@ +9f7be8572dc499518d406e34e9c288c8b0814ffa7e64eb6f4b2ebf00ce2e2f81 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 9569d7557e80c4..9393178588105e 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -14588,7 +14588,7 @@ CREATE TABLE fork_networks ( id bigint NOT NULL, root_project_id bigint, deleted_root_project_name character varying, - organization_id bigint + organization_id bigint NOT NULL ); CREATE SEQUENCE fork_networks_id_seq diff --git a/spec/lib/gitlab/background_migration/backfill_organization_id_on_fork_networks_spec.rb b/spec/lib/gitlab/background_migration/backfill_organization_id_on_fork_networks_spec.rb index 6391413324f671..7581588377c772 100644 --- a/spec/lib/gitlab/background_migration/backfill_organization_id_on_fork_networks_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_organization_id_on_fork_networks_spec.rb @@ -41,8 +41,24 @@ } end + let(:connection) { ActiveRecord::Base.connection } + subject(:perform_migration) { described_class.new(**args).perform } + around do |example| + connection.transaction do + connection.execute(<<~SQL) + ALTER TABLE fork_networks ALTER COLUMN organization_id DROP NOT NULL; + SQL + + example.run + + connection.execute(<<~SQL) + ALTER TABLE fork_networks ALTER COLUMN organization_id SET NOT NULL; + SQL + end + end + context 'when root project exists' do let(:fork_network) { fork_networks_table.create!(root_project_id: project.id) } diff --git a/spec/models/fork_network_spec.rb b/spec/models/fork_network_spec.rb index f2ec0ccb4fd93c..6b7484262cb43e 100644 --- a/spec/models/fork_network_spec.rb +++ b/spec/models/fork_network_spec.rb @@ -2,13 +2,17 @@ require 'spec_helper' -RSpec.describe ForkNetwork do +RSpec.describe ForkNetwork, feature_category: :source_code_management do include ProjectForksHelper + describe "validations" do + it { is_expected.to belong_to(:organization) } + end + describe '#add_root_as_member' do it 'adds the root project as a member when creating a new root network' do project = create(:project) - fork_network = described_class.create!(root_project: project) + fork_network = described_class.create!(root_project: project, organization_id: project.organization_id) expect(fork_network.projects).to include(project) end -- GitLab