diff --git a/.github/workflows/minitest.yml b/.github/workflows/minitest.yml index 9d3968f08..a7a28ed34 100644 --- a/.github/workflows/minitest.yml +++ b/.github/workflows/minitest.yml @@ -26,6 +26,9 @@ jobs: - name: Setup Postgres id: setup-postgres uses: alphagov/govuk-infrastructure/.github/actions/setup-postgres@main + with: + POSTGRES_IMAGE_TAG: 16 + POSTGRES_DB: publisher_test - name: Setup Redis uses: alphagov/govuk-infrastructure/.github/actions/setup-redis@main @@ -57,10 +60,13 @@ jobs: - name: Initialize database env: RAILS_ENV: test + TEST_DATABASE_URL: ${{ steps.setup-postgres.outputs.db-url }} run: bundle exec rails db:setup - name: Run Minitest env: RAILS_ENV: test + TEST_DATABASE_URL: ${{ steps.setup-postgres.outputs.db-url }} + TEST_MONGODB_URI: mongodb://localhost:27017/publisher_test GOVUK_CONTENT_SCHEMAS_PATH: vendor/publishing-api/content_schemas run: bundle exec rake test diff --git a/Gemfile b/Gemfile index b2b919c34..243dbe6da 100644 --- a/Gemfile +++ b/Gemfile @@ -32,6 +32,7 @@ gem "mongoid-sadstory" gem "mousetrap-rails" gem "nested_form", git: "https://github.com/alphagov/nested_form.git", branch: "add-wrapper-class" gem "null_logger" +gem "pg" gem "plek" gem "prometheus-client" gem "rails_autolink" @@ -41,20 +42,17 @@ gem "sentry-sidekiq" gem "sidekiq", "< 8" # Disables Sidekiq 7 beta opt-in. gem "sprockets-rails" gem "state_machines" +gem "state_machines-activerecord" gem "state_machines-mongoid" gem "strip_attributes" gem "terser" gem "whenever", require: false -# postgres dependencies -gem "pg" -gem "state_machines-activerecord" -gem "database_cleaner-active_record" - group :test do gem "capybara-select-2" gem "ci_reporter_minitest" gem "climate_control" + gem "database_cleaner-active_record" gem "database_cleaner-mongoid" gem "factory_bot_rails" gem "govuk_schemas" diff --git a/app/helpers/publications_helper.rb b/app/helpers/publications_helper.rb index 1fca9d6b3..16ca6862e 100644 --- a/app/helpers/publications_helper.rb +++ b/app/helpers/publications_helper.rb @@ -15,7 +15,7 @@ def content_tagger_url(edition) end def enabled_users_select_options - options = User.enabled.order_by([%i[name asc]]).collect { |u| [u.name, u.id] } + options = User.enabled.order([:name]).collect { |u| [u.name, u.id] } options.unshift(["", ""]) end end diff --git a/app/helpers/tabbed_nav_helper.rb b/app/helpers/tabbed_nav_helper.rb index 08c8e965b..5713f7990 100644 --- a/app/helpers/tabbed_nav_helper.rb +++ b/app/helpers/tabbed_nav_helper.rb @@ -84,7 +84,7 @@ def available_assignee_items(edition) items << { value: "none", text: "None" } items << :or end - User.enabled.order_by([%i[name asc]]).each do |user| + User.enabled.order([:name]).each do |user| items << { value: user.id, text: user.name } unless user.name == edition.assignee || !user.has_editor_permissions?(edition) end items diff --git a/app/lib/govuk_content_models/action_processors/assign_processor.rb b/app/lib/govuk_content_models/action_processors/assign_processor.rb index b74f0ca32..c930c5d07 100644 --- a/app/lib/govuk_content_models/action_processors/assign_processor.rb +++ b/app/lib/govuk_content_models/action_processors/assign_processor.rb @@ -2,8 +2,10 @@ module GovukContentModels module ActionProcessors class AssignProcessor < BaseProcessor def process - edition.set(assigned_to_id: action_attributes[:recipient_id]) + # rubocop:disable Rails/SaveBang + edition.update(assigned_to_id: action_attributes[:recipient_id]) edition.reload + # rubocop:enable Rails/SaveBang end end end diff --git a/app/lib/tagging/tagging_update_form.rb b/app/lib/tagging/tagging_update_form.rb index d55b7aa68..5ba3c363e 100644 --- a/app/lib/tagging/tagging_update_form.rb +++ b/app/lib/tagging/tagging_update_form.rb @@ -6,7 +6,7 @@ class TaggingUpdateForm validate :ordered_related_items_paths_exist def self.build_from_publishing_api(content_id, locale) - link_set = LinkSet.find(content_id, locale) + link_set = Tagging::LinkSet.find(content_id, locale) new( content_id:, diff --git a/app/models/action.rb b/app/models/action.rb index d2dd37529..de53aba8e 100644 --- a/app/models/action.rb +++ b/app/models/action.rb @@ -30,8 +30,13 @@ class Action embedded_in :edition - belongs_to :recipient, class_name: "User", optional: true - belongs_to :requester, class_name: "User", optional: true + # Temp-to-be-brought-back + # Currently we are using recipient_id & requester_id as a field to store the id's + # to bypass the issue of having a belongs_to between a postgres table and a mongo table + # we will most likely bring back the belongs_to relationship once we move action table to postgres. + + # belongs_to :recipient, class_name: "User", optional: true + # belongs_to :requester, class_name: "User", optional: true field :approver_id, type: Integer field :approved, type: DateTime @@ -43,6 +48,12 @@ class Action field :customised_message, type: String field :created_at, type: DateTime, default: -> { Time.zone.now } + # Temp-to-be-removed + # This will be removed once we move action table to postgres, this temporarily + # allows to support the belongs to relation between action and user + field :recipient_id, type: BSON::ObjectId + field :requester_id, type: BSON::ObjectId + def container_class_name(edition) edition.container.class.name.underscore.humanize end @@ -65,4 +76,27 @@ def is_fact_check_request? # SEND_FACT_CHECK is now a state - in older publications it isn't [SEND_FACT_CHECK, "fact_check_requested"].include?(request_type) end + + # Temp-to-be-removed + # The method below are getters and setters for assigned_to that allows us to set the requester & requester_id and get recipient & recipient_id. + # We are unable to use [belongs_to :recipient, class_name: "User", optional: true & belongs_to :requester, class_name: "User", optional: true] as the User table is + # in postgres and using a combination of setter and getter methods with a recipient_id & requester_id field + # to be able to achieve congruent result as having a belongs to while we are moving other table to postgres + def recipient + User.find(recipient_id) if recipient_id + end + + def requester + User.find(requester_id) if requester_id + rescue StandardError + nil + end + + def recipient=(user) + self.recipient_id = user.id + end + + def requester=(user) + self.requester_id = user.id + end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 000000000..10a4cba84 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + self.abstract_class = true +end diff --git a/app/models/artefact.rb b/app/models/artefact.rb index 8c0465bba..063598c9d 100644 --- a/app/models/artefact.rb +++ b/app/models/artefact.rb @@ -216,6 +216,12 @@ def record_action(action_type, options = {}) attributes[:user] = user if user attributes[:task_performed_by] = task_name if task_name + # Temp-to-be-removed + # This will be removed once we move artefact table to postgres, currently record_action + # when called with options contains the user object attributes that is supported by belongs to + # the below code allows to use the user id foreign key instead as we are temporarily not using belongs to + # relationship between artefact and user + add_user_id_and_delete_user_key(attributes) new_action = actions.build(attributes) # Mongoid will not fire creation callbacks on embedded documents, so we # need to trigger this manually. There is a `cascade_callbacks` option on @@ -225,6 +231,13 @@ def record_action(action_type, options = {}) end end + def add_user_id_and_delete_user_key(attributes) + if attributes[:user] + attributes[:user_id] = attributes[:user].id + attributes.delete(:user) + end + end + def archived? state == "archived" end diff --git a/app/models/artefact_action.rb b/app/models/artefact_action.rb index df18f8adc..533bce5fd 100644 --- a/app/models/artefact_action.rb +++ b/app/models/artefact_action.rb @@ -6,12 +6,27 @@ class ArtefactAction field "snapshot", type: Hash field "task_performed_by", type: String + # Temp-to-be-removed + # This will be removed once we move artefact_action table to postgres, this temporarily + # allows to support the belongs_to relation between artefact_action and user + field "user_id", type: BSON::ObjectId + embedded_in :artefact # Ideally we would like to use the UID field here, since that will be the # same across all applications, but Mongoid doesn't yet support using a # custom primary key on a related field - belongs_to :user, optional: true + + # Temp-to-be-brought-back + # Currently we are using user_id as a field to store the user_id + # to bypass the issue of having a belongs_to between a postgres table and a mongo table + # we will most likely bring back the belongs_to relationship once we move artefact_action table to postgres. + + # belongs_to :user, optional: true + + def user + User.find(user_id) if user_id + end # Not validating presence of a user just yet, since there may be some # circumstances where we can't reliably determine the user. As an example diff --git a/app/models/edition.rb b/app/models/edition.rb index fe571ad09..92e21d487 100644 --- a/app/models/edition.rb +++ b/app/models/edition.rb @@ -33,11 +33,21 @@ class ResurrectionError < RuntimeError field :change_note, type: String field :review_requested_at, type: DateTime + # Temp-to-be-removed + # This will be removed once we move edition table to postgres, this temporarily + # allows to support the belongs_to relation between edition and user + field :assigned_to_id, type: BSON::ObjectId + field :auth_bypass_id, type: String, default: -> { SecureRandom.uuid } field :owning_org_content_ids, type: Array, default: [] - belongs_to :assigned_to, class_name: "User", optional: true + # Temp-to-be-brought-back + # Currently we are using assigned_to_id as a field to store the assigned_to_id + # to bypass the issue of having a belongs_to between a postgres table and a mongo table + # we will most likely bring back the belongs_to relationship once we move edition table to postgres. + + # belongs_to :assigned_to, class_name: "User", optional: true embeds_many :link_check_reports @@ -521,6 +531,24 @@ def is_accessible_to?(user) owning_org_content_ids.include?(user.organisation_content_id) end + # Temp-to-be-removed + # The method below are getters and setters for assigned_to that allows us to set the assigned_to_id and get assigned_to. + # We are unable to use belongs_to :assigned_to, class_name: "User as the User table is + # in postgres and using a combination of setter and getter methods with a assigned_to_id field + # to be able to achieve congruent result as having a belongs to while we are moving other table to postgres + + def assigned_to_id=(id) + self[:assigned_to_id] = id + end + + def assigned_to=(user) + self[:assigned_to_id] = user.id + end + + def assigned_to + User.find(assigned_to_id) if assigned_to_id + end + private def base_field_keys diff --git a/app/models/user.rb b/app/models/user.rb index 81a0666f3..2e82b1fac 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,40 +3,11 @@ require "gds-sso/user" require_dependency "safe_html" -class User - include Mongoid::Document - include Mongoid::Timestamps +class User < ApplicationRecord include GDS::SSO::User - # Let an app configure the symbolized collection name to use, - # e.g. set a constant in an initializer. - if defined?(USER_COLLECTION_NAME) - store_in collection: USER_COLLECTION_NAME.to_sym - else - store_in collection: :users - end - - field "name", type: String - field "uid", type: String - field "version", type: Integer - field "email", type: String - field "permissions", type: Array, default: [] - field "remotely_signed_out", type: Boolean, default: false - field "organisation_slug", type: String - field "disabled", type: Boolean, default: false - field "organisation_content_id", type: String - - index({ uid: 1 }, unique: true) - index disabled: 1 - - scope :alphabetized, -> { order_by(name: :asc) } - scope :enabled, - lambda { - any_of( - { :disabled.exists => false }, - { :disabled.in => [false, nil] }, - ) - } + scope :alphabetized, -> { order(name: :asc) } + scope :enabled, -> { where("disabled IS NULL OR disabled = ?", false) } def to_s name || email || "" diff --git a/app/models/workflow.rb b/app/models/workflow.rb index 7504e007a..6c09be1f7 100644 --- a/app/models/workflow.rb +++ b/app/models/workflow.rb @@ -12,7 +12,18 @@ class CannotDeletePublishedPublication < RuntimeError; end after_create :notify_siblings_of_new_edition field :state, type: String, default: "draft" - belongs_to :assigned_to, class_name: "User", optional: true + + # Temp-to-be-removed + # This will be removed once we move workflow module to support postgres models, this temporarily + # allows to support the belongs_to relation between workflow and user + field :assigned_to_id, type: BSON::ObjectId + + # Temp-to-be-brought-back + # Currently we are using assigned_to_id as a field to store the assigned_to_id + # to bypass the issue of having a belongs_to between a postgres table and a mongo table + # we will most likely bring back the belongs_to relationship once we move workflow to support postgres. + + # belongs_to :assigned_to, class_name: "User", optional: true state_machine initial: :draft do after_transition on: :request_amendments do |edition, _transition| @@ -191,6 +202,17 @@ def important_note action if action.try(:request_type) == Action::IMPORTANT_NOTE end + # Temp-to-be-removed + # The method below are getters and setters for assigned_to that allows us to set the assigned_to_id and get assigned_to. + # We are unable to use belongs_to :assigned_to, class_name: "User as the User table is + # in postgres and using a combination of setter and getter methods with a assigned_to_id field + # to be able to achieve congruent result as having a belongs to while we are moving other table to postgres + delegate :assigned_to_id=, to: self + + def assigned_to + User.find(assigned_to_id) if assigned_to_id + end + private def notify_siblings_of_published_edition diff --git a/app/presenters/filtered_editions_presenter.rb b/app/presenters/filtered_editions_presenter.rb index e87b025fc..fad72db9c 100644 --- a/app/presenters/filtered_editions_presenter.rb +++ b/app/presenters/filtered_editions_presenter.rb @@ -129,9 +129,9 @@ def apply_assigned_to_filter(editions) editions = editions.assigned_to(nil) else begin - assigned_user = User.find(assigned_to_filter) + assigned_user = User.find(assigned_to_filter) if assigned_to_filter.present? editions = editions.assigned_to(assigned_user) if assigned_user - rescue Mongoid::Errors::DocumentNotFound + rescue ActiveRecord::RecordNotFound Rails.logger.warn "An attempt was made to filter by an unknown user ID: '#{assigned_to_filter}'" end end diff --git a/app/views/legacy_editions/_reviewer_field.html.erb b/app/views/legacy_editions/_reviewer_field.html.erb index 390dcae1d..7d82746fe 100644 --- a/app/views/legacy_editions/_reviewer_field.html.erb +++ b/app/views/legacy_editions/_reviewer_field.html.erb @@ -1,3 +1,3 @@ <%= form_group(f, :reviewer, label: "Reviewer") do %> - <%= f.select :reviewer, User.enabled.order_by([[:name, :asc]]).collect{ |p| [p.name, p.name] }, { :include_blank => true }, { :class => "form-control input-md-3", :disabled => @resource.locked_for_edits?, "data-module" => "assignee-select"} %> + <%= f.select :reviewer, User.enabled.order([:name]).collect{ |p| [p.name, p.name] }, { :include_blank => true }, { :class => "form-control input-md-3", :disabled => @resource.locked_for_edits?, "data-module" => "assignee-select"} %> <% end %> diff --git a/config/application.rb b/config/application.rb index 64d79e477..9e0dd3d35 100644 --- a/config/application.rb +++ b/config/application.rb @@ -3,6 +3,7 @@ require "rails" # Pick the frameworks you want: require "active_model/railtie" +require "active_record/railtie" require "active_job/railtie" require "action_controller/railtie" require "action_mailer/railtie" @@ -67,7 +68,7 @@ class Application < Rails::Application } config.generators do |g| - g.orm :mongoid + g.orm :active_record g.template_engine :erb # this could be :haml or whatever g.test_framework :test_unit, fixture: false # this could be :rpsec or whatever end diff --git a/config/database.yml b/config/database.yml index aa9fc33ca..dc534671a 100644 --- a/config/database.yml +++ b/config/database.yml @@ -7,34 +7,23 @@ default: &default development: <<: *default - database: publisher_development - username: publisher - password: publisher clients: default: - uri: <%= "postgresql://postgres@postgres-13/publisher" %> + uri: <%= ENV['DATABASE_URL'] || "postgresql://postgres@postgres-16/publisher" %> options: -# use_activesupport_time_zone: true -# belongs_to_required_by_default: false -test: +test: &test <<: *default - clients: - default: - uri: <%= "postgresql://postgres@postgres-13/publisher" %> - options: - read: - mode: :primary - max_pool_size: 1 - options: -# use_activesupport_time_zone: true -# belongs_to_required_by_default: false + database: publisher_test + username: publisher + password: publisher + url: <%= ENV["TEST_DATABASE_URL"] %> # set these environment variables on your prod server production: clients: default: - uri: <%= ENV['MONGODB_URI'] %> + uri: <%= ENV['DATABASE_URL'] %> options: # use_activesupport_time_zone: true # belongs_to_required_by_default: false \ No newline at end of file diff --git a/db/migrate/20250212162143_create_user.rb b/db/migrate/20250212162143_create_user.rb new file mode 100644 index 000000000..67ce08f62 --- /dev/null +++ b/db/migrate/20250212162143_create_user.rb @@ -0,0 +1,17 @@ +class CreateUser < ActiveRecord::Migration[7.1] + def change + create_table :users do |t| + t.string :name + t.string :email + t.string :uid + t.string :organisation_slug + t.string :organisation_content_id + t.string :app_name + t.string :permissions, array: true, default: [] + t.boolean :remotely_signed_out, default: false + t.boolean :disabled, default: false + t.timestamps + t.index :disabled + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 000000000..a2a28821b --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,32 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema[7.1].define(version: 2025_02_12_162143) do + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "users", force: :cascade do |t| + t.string "name" + t.string "email" + t.string "uid" + t.string "organisation_slug" + t.string "organisation_content_id" + t.string "app_name" + t.string "permissions", default: [], array: true + t.boolean "remotely_signed_out", default: false + t.boolean "disabled", default: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["disabled"], name: "index_users_on_disabled" + end + +end diff --git a/db/seeds/user.rb b/db/seeds/user.rb index 119c58da3..29dc30d02 100644 --- a/db/seeds/user.rb +++ b/db/seeds/user.rb @@ -1,10 +1,8 @@ if User.where(name: "Test user").blank? gds_organisation_id = "af07d5a5-df63-4ddc-9383-6a666845ebe9" - user_id = SecureRandom.uuid User.create!( name: "Test user", - uid: user_id, permissions: %w[signin govuk_editor skip_review], organisation_content_id: gds_organisation_id, ) diff --git a/test/functional/event_mailer_test.rb b/test/functional/event_mailer_test.rb index 972e584d7..de246711a 100644 --- a/test/functional/event_mailer_test.rb +++ b/test/functional/event_mailer_test.rb @@ -17,6 +17,7 @@ def fact_check_email def action_email(action_name) guide = FactoryBot.create(:guide_edition, title: "Test Guide 2") requester = User.new(name: "Testing Person") + requester.save! action = guide.actions.create!(request_type: action_name, requester:) EventMailer.any_action(action, ["fake@not-a-real-email-address"]) end diff --git a/test/functional/event_notifications_test.rb b/test/functional/event_notifications_test.rb index 35b01cb98..7bb5c1349 100644 --- a/test/functional/event_notifications_test.rb +++ b/test/functional/event_notifications_test.rb @@ -11,6 +11,7 @@ def fact_check_email def action_email(action) guide = FactoryBot.create(:guide_edition, title: "Test Guide 2") requester = User.new(name: "Testing Person") + requester.save! action = guide.actions.create!(request_type: action, requester:) EventNotifierService.any_action(action) end diff --git a/test/legacy_integration_test_helper.rb b/test/legacy_integration_test_helper.rb index 5820d1069..0e9967907 100644 --- a/test/legacy_integration_test_helper.rb +++ b/test/legacy_integration_test_helper.rb @@ -10,11 +10,15 @@ class LegacyIntegrationTest < ActionDispatch::IntegrationTest include Warden::Test::Helpers setup do + DatabaseCleaner[:mongoid].start + DatabaseCleaner.start test_strategy = Flipflop::FeatureSet.current.test! test_strategy.switch!(:design_system_edit, false) end teardown do + DatabaseCleaner[:mongoid].clean + DatabaseCleaner.clean Capybara.reset_sessions! # Forget the (simulated) browser state Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver GDS::SSO.test_user = nil diff --git a/test/models/user_test.rb b/test/models/user_test.rb index f0ddeb71e..62ea48c1d 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -75,7 +75,7 @@ def setup test "should return enabled users" do disabled = FactoryBot.create(:user, disabled: true) - FactoryBot.create(:user).unset(:disabled) + FactoryBot.create(:user, disabled: false) FactoryBot.create(:user, disabled: false) FactoryBot.create(:user, disabled: nil) diff --git a/test/test_helper.rb b/test/test_helper.rb index 759020e18..f6c374abc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,5 +1,4 @@ ENV["RAILS_ENV"] = "test" - # Must go at top of file require "simplecov" SimpleCov.start @@ -10,6 +9,7 @@ require "minitest/autorun" require "mocha/minitest" require "database_cleaner/mongoid" +require "database_cleaner/active_record" require "webmock/minitest" require "gds_api/test_helpers/publishing_api" require "support/tag_test_helpers" @@ -27,8 +27,11 @@ WebMock.disable_net_connect!(allow_localhost: true) -DatabaseCleaner.strategy = :deletion +DatabaseCleaner[:mongoid].strategy = :deletion # initial clean +DatabaseCleaner[:mongoid].clean +DatabaseCleaner.allow_remote_database_url = true +DatabaseCleaner.strategy = :deletion DatabaseCleaner.clean Rails.application.load_tasks if Rake::Task.tasks.empty? @@ -46,16 +49,18 @@ class ActiveSupport::TestCase include WebMock::API include GovukSchemas::AssertMatchers - def clean_db - DatabaseCleaner.clean - end - set_callback :teardown, :after, :clean_db - setup do + DatabaseCleaner[:mongoid].start + DatabaseCleaner.start Sidekiq::Testing.inline! stub_any_publishing_api_call end + teardown do + DatabaseCleaner[:mongoid].clean + DatabaseCleaner.clean + end + def without_metadata_denormalisation(*klasses, &_block) klasses.each { |klass| klass.any_instance.stubs(:denormalise_metadata).returns(true) } result = yield diff --git a/test/unit/helpers/admin/publications_table_helper_test.rb b/test/unit/helpers/admin/publications_table_helper_test.rb index 44be3f879..011cb8a26 100644 --- a/test/unit/helpers/admin/publications_table_helper_test.rb +++ b/test/unit/helpers/admin/publications_table_helper_test.rb @@ -176,11 +176,12 @@ class PublicationsTableHelperTest < ActionView::TestCase should "return a form for claiming a review when an edition assigned to another user is in review and has not been claimed and the current user may do so" do current_user = FactoryBot.create(:user, name: "David Cameron", permissions: %w[govuk_editor]) + another_user = FactoryBot.create(:user, name: "Another User", permissions: %w[govuk_editor]) edition = FactoryBot.create( :edition, state: "in_review", review_requested_at: "2024-07-12", - assigned_to_id: "66911dbf2c88ee0001d8af62", + assigned_to_id: another_user.id, ) assert_includes reviewer(edition, current_user), '' @@ -188,11 +189,12 @@ class PublicationsTableHelperTest < ActionView::TestCase should "return nil when an edition assigned to another user is in review and has not been claimed and the current user may not do so" do current_user = FactoryBot.create(:user, name: "Gordon Brown") + another_user = FactoryBot.create(:user, name: "Another User") edition = FactoryBot.create( :edition, state: "in_review", review_requested_at: "2024-07-12", - assigned_to_id: "66911dbf2c88ee0001d8af62", + assigned_to_id: another_user.id, ) assert_nil reviewer(edition, current_user) diff --git a/test/unit/presenters/filtered_editions_presenter_test.rb b/test/unit/presenters/filtered_editions_presenter_test.rb index 1f2f4da82..80e60917d 100644 --- a/test/unit/presenters/filtered_editions_presenter_test.rb +++ b/test/unit/presenters/filtered_editions_presenter_test.rb @@ -84,7 +84,8 @@ def a_gds_user should "filter by 'assigned to'" do anna = FactoryBot.create(:user, name: "Anna") - assigned_to_anna = FactoryBot.create(:guide_edition, assigned_to: anna.id) + # reference: note_for_postgres_migration + assigned_to_anna = FactoryBot.create(:guide_edition, assigned_to_id: anna.id) FactoryBot.create(:guide_edition) filtered_editions = FilteredEditionsPresenter.new(a_gds_user, assigned_to_filter: anna.id).editions @@ -94,7 +95,8 @@ def a_gds_user should "filter by 'not assigned'" do anna = FactoryBot.create(:user, name: "Anna") - FactoryBot.create(:guide_edition, assigned_to: anna.id) + # reference: note_for_postgres_migration + FactoryBot.create(:guide_edition, assigned_to_id: anna.id) not_assigned = FactoryBot.create(:guide_edition) filtered_editions = FilteredEditionsPresenter.new(a_gds_user, assigned_to_filter: "nobody").editions @@ -104,7 +106,8 @@ def a_gds_user should "ignore invalid 'assigned to'" do anna = FactoryBot.create(:user, name: "Anna") - FactoryBot.create(:guide_edition, assigned_to: anna.id) + # reference: note_for_postgres_migration + FactoryBot.create(:guide_edition, assigned_to_id: anna.id) FactoryBot.create(:guide_edition) filtered_editions = @@ -288,4 +291,11 @@ def a_gds_user assert_not_includes users.map { |user| user[:text] }, disabled_user.name end end + + def note_for_postgres_migration + # Temp-to-be-brought-back: + # Currently we are using assigned_to_id as a field to store the assigned_to_id + # to bypass the issue of having a belongs_to between a postgres table and a mongo table + # we will most likely bring back the belongs_to relationship once we move edition table to postgres. + end end