diff --git a/src/api/app/components/bs_request_state_badge_component.rb b/src/api/app/components/bs_request_state_badge_component.rb index 4bea93b3ecf..beb8fe6579a 100644 --- a/src/api/app/components/bs_request_state_badge_component.rb +++ b/src/api/app/components/bs_request_state_badge_component.rb @@ -18,15 +18,15 @@ def call def decode_state_color case state - when :review, :new + when 'review', 'new' 'secondary' - when :declined + when 'declined' 'danger' - when :superseded + when 'superseded' 'warning' - when :accepted + when 'accepted' 'success' - when :revoked + when 'revoked' 'dismissed' else 'dark' @@ -37,13 +37,13 @@ def decode_state_color def decode_state_icon case state - when :new + when 'new' 'code-branch' - when :review, :declined, :revoked + when 'review', 'declined', 'revoked' 'code-pull-request' - when :superseded + when 'superseded' 'code-compare' - when :accepted + when 'accepted' 'code-merge' else 'code-fork' diff --git a/src/api/app/components/request_decision_component.rb b/src/api/app/components/request_decision_component.rb index 4fbfcde7560..2bb0b599670 100644 --- a/src/api/app/components/request_decision_component.rb +++ b/src/api/app/components/request_decision_component.rb @@ -22,7 +22,7 @@ def single_action_request end def confirmation - if @bs_request.state == :review + if @bs_request.status == :review { confirm: "Accept this request, despite the open reviews?\n\n#{@package_maintainers_hint}" } else { confirm: 'Accept this request? This will commit the changes to the target!' } diff --git a/src/api/app/components/watched_items_list_component.html.haml b/src/api/app/components/watched_items_list_component.html.haml index a2f410c65ef..5cd2cbafa12 100644 --- a/src/api/app/components/watched_items_list_component.html.haml +++ b/src/api/app/components/watched_items_list_component.html.haml @@ -38,7 +38,7 @@ - name = "##{item.number} #{helpers.request_type_of_action(item)}" .d-flex.flex-row.flex-wrap.align-items-baseline.collapsible-tooltip-parent = link_to(request_show_path(item.number), class: 'text-word-break-all') do - = render BsRequestStateBadgeComponent.new(state: item.state) + = render BsRequestStateBadgeComponent.new(state: item.status) = name %i.fa.fa-question-circle.px-2.collapsible-tooltip{ title: 'Click to keep it open' } = link_to('#', class: 'ms-auto', diff --git a/src/api/app/controllers/concerns/webui/requests_filter.rb b/src/api/app/controllers/concerns/webui/requests_filter.rb index 5cdea018def..33c46d6ec81 100644 --- a/src/api/app/controllers/concerns/webui/requests_filter.rb +++ b/src/api/app/controllers/concerns/webui/requests_filter.rb @@ -26,7 +26,7 @@ def filter_requests def filter_states @selected_filter['states'] = params[:states] if params[:states]&.compact_blank.present? - @bs_requests = @bs_requests.where(state: @selected_filter['states']) + @bs_requests = @bs_requests.where(status: @selected_filter['states']) end def filter_action_types diff --git a/src/api/app/controllers/webui/package_controller.rb b/src/api/app/controllers/webui/package_controller.rb index c5a2c758d89..d3380e46dd2 100644 --- a/src/api/app/controllers/webui/package_controller.rb +++ b/src/api/app/controllers/webui/package_controller.rb @@ -478,7 +478,7 @@ def find_last_declined_bs_request return if last_req.blank? - last_req.bs_request if bs_request.state == :declined + last_req.bs_request if bs_request.status == :declined end def get_diff(project, package, options = {}) diff --git a/src/api/app/controllers/webui/projects/pulse_controller.rb b/src/api/app/controllers/webui/projects/pulse_controller.rb index 4d7df21feda..8ca028ec763 100644 --- a/src/api/app/controllers/webui/projects/pulse_controller.rb +++ b/src/api/app/controllers/webui/projects/pulse_controller.rb @@ -11,7 +11,7 @@ def show pulse = @project.project_log_entries.where(datetime: @date_range).order(datetime: :asc) requests = @project.target_of_bs_requests.where(updated_at: @date_range).order(updated_at: :desc) - requests_by_state = requests.group(:state).count.sort_by { |_, v| -v }.to_h + requests_by_state = requests.group(:status).count.sort_by { |_, v| -v }.to_h requests_by_percentage = requests_by_state.each_with_object({}) do |(k, v), hash| hash[k] = (v * 100.0 / requests_by_state.values.sum).round.to_s end diff --git a/src/api/app/controllers/webui/projects/status_controller.rb b/src/api/app/controllers/webui/projects/status_controller.rb index e56fe04ec6e..2fc869fe79d 100644 --- a/src/api/app/controllers/webui/projects/status_controller.rb +++ b/src/api/app/controllers/webui/projects/status_controller.rb @@ -178,9 +178,9 @@ def status_filter_packages def status_gather_requests # we do not filter requests for project because we need devel projects too later on and as long as the # number of open requests is limited this is the easiest solution - raw_requests = BsRequest.order(:number).where(state: %i[new review declined]).joins(:bs_request_actions) + raw_requests = BsRequest.order(:number).where(status: %i[new review declined]).joins(:bs_request_actions) .where(bs_request_actions: { type: %w[submit delete] }).pluck('bs_requests.number', - 'bs_requests.state', + 'bs_requests.status', 'bs_request_actions.target_project', 'bs_request_actions.target_package') diff --git a/src/api/app/controllers/webui/request_controller.rb b/src/api/app/controllers/webui/request_controller.rb index fb57805d051..4e960dabdcf 100644 --- a/src/api/app/controllers/webui/request_controller.rb +++ b/src/api/app/controllers/webui/request_controller.rb @@ -56,7 +56,7 @@ def show @is_author = @bs_request.creator == User.possibly_nobody.login @is_target_maintainer = @bs_request.target_maintainer?(User.session) - @can_handle_request = @bs_request.state.in?(%i[new review declined]) && (@is_target_maintainer || @is_author) + @can_handle_request = @bs_request.status.in?(%w[new review declined]) && (@is_target_maintainer || @is_author) @history = @bs_request.history_elements.includes(:user) @@ -82,7 +82,7 @@ def show reviews = @bs_request.reviews.where(state: 'new') user = User.session # might be nil @my_open_reviews = reviews.select { |review| review.matches_user?(user) }.reject(&:staging_project?) - @can_add_reviews = @bs_request.state.in?(%i[new review]) && (@is_author || @is_target_maintainer || @my_open_reviews.present?) + @can_add_reviews = @bs_request.status.in?(%w[new review]) && (@is_author || @is_target_maintainer || @my_open_reviews.present?) respond_to do |format| format.html diff --git a/src/api/app/helpers/webui/maintenance_incident_helper.rb b/src/api/app/helpers/webui/maintenance_incident_helper.rb index a579726404f..7ae6edced15 100644 --- a/src/api/app/helpers/webui/maintenance_incident_helper.rb +++ b/src/api/app/helpers/webui/maintenance_incident_helper.rb @@ -108,7 +108,7 @@ def outgoing_request_links(requests) safe_join( [ link_to(request_show_path(request['number'])) do - tag.i(nil, class: "fas fa-flag pe-1 request-flag-#{request['state']}", title: "Release request in state '#{request['state']}'") + tag.i(nil, class: "fas fa-flag pe-1 request-flag-#{request['status']}", title: "Release request in state '#{request['status']}'") end, # rubocop:disable Rails/OutputSafety TimeComponent.new(time: request.created_at).human_time.html_safe diff --git a/src/api/app/jobs/project_create_auto_cleanup_requests_job.rb b/src/api/app/jobs/project_create_auto_cleanup_requests_job.rb index 941c40cae17..2bb0d992fa4 100644 --- a/src/api/app/jobs/project_create_auto_cleanup_requests_job.rb +++ b/src/api/app/jobs/project_create_auto_cleanup_requests_job.rb @@ -93,7 +93,7 @@ def open_requests_count(project_name) end def relation - BsRequest.where(state: %i[new review declined]) + BsRequest.where(status: %i[new review declined]) .joins(:bs_request_actions) end end diff --git a/src/api/app/models/bs_request.rb b/src/api/app/models/bs_request.rb index 0f6ef15f6ef..1ce7ecaee2f 100644 --- a/src/api/app/models/bs_request.rb +++ b/src/api/app/models/bs_request.rb @@ -29,7 +29,7 @@ class BsRequest < ApplicationRecord enum :status, VALID_REQUEST_STATES, instance_methods: false, scopes: false, validate: true - scope :to_accept_by_time, -> { where(state: %w[new review]).where(accept_at: ...Time.now) } + scope :to_accept_by_time, -> { where(status: %w[new review]).where(accept_at: ...Time.now) } scope :with_action_types, lambda { |types| includes(:bs_request_actions).where(bs_request_actions: { type: types }).distinct @@ -51,7 +51,7 @@ class BsRequest < ApplicationRecord ) } - scope :obsolete, -> { where(state: OBSOLETE_STATES) } + scope :obsolete, -> { where(status: OBSOLETE_STATES) } has_many :bs_request_actions, dependent: :destroy has_many :reviews, dependent: :delete_all @@ -245,7 +245,7 @@ def self.sourcediff_has_shown_attribute?(sourcediff) def as_json(*) super(except: %i[state comment commenter]).tap do |request_hash| request_hash['superseded_by_id'] = superseded_by if has_attribute?(:superseded_by) - request_hash['state'] = state.to_s if has_attribute?(:state) + request_hash['state'] = status if has_attribute?(:status) request_hash['request_type'] = bs_request_actions.first.type request_hash['package'] = bs_request_actions.first.target_package request_hash['project'] = bs_request_actions.first.target_project @@ -370,7 +370,7 @@ def render_xml(opts = {}) r.priority(priority) unless priority == 'moderate' # state element - attributes = { name: state, who: commenter, when: updated_when.strftime('%Y-%m-%dT%H:%M:%S'), created: created_at.strftime('%Y-%m-%dT%H:%M:%S') } + attributes = { name: status, who: commenter, when: updated_when.strftime('%Y-%m-%dT%H:%M:%S'), created: created_at.strftime('%Y-%m-%dT%H:%M:%S') } attributes[:superseded_by] = superseded_by if superseded_by attributes[:approver] = approver if approver r.state(attributes) do |s| @@ -776,20 +776,20 @@ def setincident(incident) end def send_state_change - return unless state_changed? + return unless status_changed? # new->review && review->new are not worth an event - it's just spam return unless conclusive? options = event_parameters # measure duration unless superseding a final state, like revoked -> superseded - options[:duration] = (updated_at - created_at).to_i if FINAL_REQUEST_STATES.exclude?(state_was.to_sym) && FINAL_REQUEST_STATES.include?(state) + options[:duration] = (updated_at - created_at).to_i if FINAL_REQUEST_STATES.exclude?(status_was.to_sym) && FINAL_REQUEST_STATES.include?(status.to_sym) Event::RequestStatechange.create(options) end def accept_staged_request - return if staging_project_id.nil? || state.to_sym != :accepted + return if staging_project_id.nil? || status.to_sym != :accepted accepted_package = bs_request_actions.map(&:target_package) staging_project.packages.where(name: accepted_package).destroy_all @@ -800,13 +800,13 @@ def event_parameters params = { id: id, number: number, description: description, - state: state, + state: status, when: updated_when.strftime('%Y-%m-%dT%H:%M:%S'), comment: comment, author: creator, namespace: namespace } - params[:oldstate] = state_was if state_changed? + params[:oldstate] = status_was if status_changed? params[:who] = commenter if commenter.present? # Use a nested data structure to support multiple actions in one request @@ -845,10 +845,10 @@ def maintenance_release_request? def auto_accept # do not run for processed requests. Ignoring review on purpose since this # must also work when people do not react anymore - return unless %i[new review].include?(state) + return unless %i[new review].include?(status.to_sym) # use approve mechanic in case you want to wait for reviews - return if approver && state == :review + return if approver && status.to_sym == :review return unless accept_at || approver @@ -989,7 +989,7 @@ def staged_request? def can_be_reopened? (reviews.accepted.size + reviews.opened.size + reviews.declined.size).positive? && # Declined is not really a final state, since the request can always be reopened... - (BsRequest::FINAL_REQUEST_STATES.exclude?(state) || state == :declined) + (BsRequest::FINAL_REQUEST_STATES.exclude?(status.to_sym) || status.to_sym == :declined) end # Collects the embargo_date from all actions and returns... @@ -1023,7 +1023,7 @@ def reviews_reasons # returns true if we have reached a state that we can't get out anymore def conclusive? - FINAL_REQUEST_STATES.include?(state) + FINAL_REQUEST_STATES.include?(status.to_sym) end # [DEPRECATED] TODO: drop this after request_workflow_redesign beta is rolled_out diff --git a/src/api/app/models/bs_request/find_for/query.rb b/src/api/app/models/bs_request/find_for/query.rb index 8cea7472864..29deec6ca2e 100644 --- a/src/api/app/models/bs_request/find_for/query.rb +++ b/src/api/app/models/bs_request/find_for/query.rb @@ -6,7 +6,7 @@ def all @relation = @relation.where(creator: creator) if creator.present? @relation = @relation.from_project_names(@parameters['project_name']).or(@relation.to_project_names(@parameters['project_name'])) if @parameters['project_name'].present? @relation = @relation.with_action_types(types) if types.present? - @relation = @relation.where(state: states) if states.present? + @relation = @relation.where(status: states) if states.present? @relation = @relation.where(priority: priorities) if priorities.present? @relation = @relation.from_project(source_project_name) if source_project_name.present? @relation = @relation.joins(:reviews).where('reviews.by_user IN (?) OR reviews.by_group IN (?)', reviewers, reviewers) if reviewers.present? diff --git a/src/api/app/models/bs_request_permission_check.rb b/src/api/app/models/bs_request_permission_check.rb index f74a7b91f75..b91347a936a 100644 --- a/src/api/app/models/bs_request_permission_check.rb +++ b/src/api/app/models/bs_request_permission_check.rb @@ -18,7 +18,7 @@ def initialize(request, options) end def cmd_addreview_permissions(permissions_granted) - raise ReviewChangeStateNoPermission, 'The request is not in state new or review' unless req.state.in?(%i[review new]) + raise ReviewChangeStateNoPermission, 'The request is not in state new or review' unless req.status.in?(%w[review new]) req.bs_request_actions.each do |action| set_permissions_for_action(action) @@ -27,7 +27,7 @@ def cmd_addreview_permissions(permissions_granted) end def cmd_setpriority_permissions - raise SetPriorityNoPermission, 'The request is not in state new or review' unless req.state.in?(%i[review new]) + raise SetPriorityNoPermission, 'The request is not in state new or review' unless req.status.in?(%w[review new]) return if req.creator == User.session!.login @@ -40,7 +40,7 @@ def cmd_setpriority_permissions end def cmd_setincident_permissions - raise ReviewChangeStateNoPermission, 'The request is not in state new or review' unless req.state.in?(%i[review new]) + raise ReviewChangeStateNoPermission, 'The request is not in state new or review' unless req.status.in?(%w[review new]) req.bs_request_actions.each do |action| set_permissions_for_action(action) @@ -68,7 +68,7 @@ def cmd_changereviewstate_permissions # Admin always ... return true if User.admin_session? - raise ReviewChangeStateNoPermission, 'The request is neither in state review nor new' unless req.state.in?(%i[review new]) + raise ReviewChangeStateNoPermission, 'The request is neither in state review nor new' unless req.status.in?(%w[review new]) raise ReviewNotSpecified, 'The review must specified via by_user, by_group or by_project(by_package) argument.' unless by_user || by_group || by_package || by_project raise ReviewChangeStateNoPermission, "review state change is not permitted for #{User.session!.login}" if by_user && User.session! != by_user raise ReviewChangeStateNoPermission, "review state change for group #{by_group.title} is not permitted for #{User.session!.login}" if by_group && !User.session!.in_group?(by_group) @@ -85,7 +85,7 @@ def cmd_changereviewstate_permissions def cmd_changestate_permissions # We do not support to revert changes from accepted requests (yet) - raise PostRequestNoPermission, 'change state from an accepted state is not allowed.' if req.state == :accepted + raise PostRequestNoPermission, 'change state from an accepted state is not allowed.' if req.status.to_sym == :accepted # need to check for accept permissions accept_check = opts[:newstate] == 'accepted' @@ -98,15 +98,15 @@ def cmd_changestate_permissions end # Do not accept to skip the review, except force argument is given if accept_check - if req.state == :review + if req.status.to_sym == :review raise PostRequestNoPermission, 'Request is in review state. You may use the force parameter to ignore this.' unless opts[:force] - elsif req.state != :new + elsif req.status.to_sym != :new raise PostRequestNoPermission, 'Request is not in new state. You may reopen it by setting it to new.' end end # do not allow direct switches from a final state to another one to avoid races and double actions. # request needs to get reopened first. - raise PostRequestNoPermission, "set state to #{opts[:newstate]} from a final state is not allowed." if req.state.in?(%i[accepted superseded revoked]) && opts[:newstate].in?(%w[accepted declined superseded revoked]) + raise PostRequestNoPermission, "set state to #{opts[:newstate]} from a final state is not allowed." if req.status.in?(%w[accepted superseded revoked]) && opts[:newstate].in?(%w[accepted declined superseded revoked]) raise PostRequestMissingParameter, "Supersed a request requires a 'superseded_by' parameter with the request id." if opts[:newstate] == 'superseded' && !opts[:superseded_by] @@ -133,7 +133,7 @@ def cmd_changestate_permissions # NOTE: Staging managers should be able to repoen a request to unstage a declined request. # The reason behind `user_is_staging_manager`, is that we need to manage reviews to send # the request to the staging backlog. - (req.state == :declined && opts[:newstate].in?(%w[new review]) && (req.commenter == User.session!.login || user_is_staging_manager)) + (req.status.to_sym == :declined && opts[:newstate].in?(%w[new review]) && (req.commenter == User.session!.login || user_is_staging_manager)) # permission and validation check for each action inside req.bs_request_actions.each do |action| diff --git a/src/api/app/models/concerns/staging_project.rb b/src/api/app/models/concerns/staging_project.rb index 1b43931213b..c70c7d75a4b 100644 --- a/src/api/app/models/concerns/staging_project.rb +++ b/src/api/app/models/concerns/staging_project.rb @@ -82,7 +82,7 @@ def classified_requests requests = (requests_to_review | staged_requests.includes(:not_accepted_reviews, :bs_request_actions)).map do |request| { number: request.number, - state: request.state, + status: request.status, package: request.first_target_package, request_type: request.bs_request_actions.first.type, missing_reviews: missing_reviews_for_classified_requests(request, request.not_accepted_reviews) @@ -99,7 +99,7 @@ def untracked_requests # The requests to review are requests which are not related to the staging project (unless they are also staged). # They simply need a review from the maintainers of the staging project. def requests_to_review - @requests_to_review ||= BsRequest.joins(:bs_request_actions).left_outer_joins(:reviews).where(state: :review, reviews: { by_project: name, state: :new }) + @requests_to_review ||= BsRequest.joins(:bs_request_actions).left_outer_joins(:reviews).where(status: :review, reviews: { by_project: name, state: :new }) end def building_repositories @@ -271,7 +271,7 @@ def extract_missing_reviews(request, review) end def request_weight(request) - weight = if request[:state].in?(BsRequest::OBSOLETE_STATES) # obsolete + weight = if request[:status].in?(BsRequest::OBSOLETE_STATES) # obsolete '0' elsif request[:missing_reviews].present? # in review '1' diff --git a/src/api/app/models/project.rb b/src/api/app/models/project.rb index 3d76aa1b21d..4846839e52a 100644 --- a/src/api/app/models/project.rb +++ b/src/api/app/models/project.rb @@ -1152,24 +1152,24 @@ def open_requests BsRequest.where(id: BsRequestAction.bs_request_ids_by_source_projects(name)).or( BsRequest.where(id: Review.bs_request_ids_of_involved_projects(id)) ) - ).where(state: :review).distinct.pluck(:number) + ).where(status: 'review').distinct.pluck(:number) targets = BsRequest.joins(:bs_request_actions) .to_project(name) .or(BsRequest.from_project(name)) - .where(state: :new) + .where(status: 'new') .pluck(:number) incidents = BsRequest.to_project(name) .or(BsRequest.from_project(name)) - .where(state: :new) + .where(status: 'new') .with_action_types(:maintenance_incident) .pluck(:number) maintenance_release = if maintenance? BsRequest.to_project("#{name}:%") .or(BsRequest.from_project("#{name}:%")) - .where(state: :new) + .where(status: 'new') .with_action_types(:maintenance_release) .pluck(:number) else diff --git a/src/api/app/models/staging/staged_requests.rb b/src/api/app/models/staging/staged_requests.rb index eda84963d2a..e8a00d2a4f3 100644 --- a/src/api/app/models/staging/staged_requests.rb +++ b/src/api/app/models/staging/staged_requests.rb @@ -38,7 +38,7 @@ def destroy package_name: request.first_target_package ) - add_review_for_unstaged_request(request, staging_project) if request.state.in?(%i[new review declined]) + add_review_for_unstaged_request(request, staging_project) if request.status.in?(%w[new review declined]) staging_project.staged_requests.delete(request) end @@ -117,7 +117,7 @@ def add_review_for_staged_request(request) def add_review_for_unstaged_request(request, staging_project) # request.addreview / request.change_review_state would also change the state of a declined request, avoid this. - if request.state == :declined + if request.status == 'declined' request.reviews.create!(by_group: staging_workflow.managers_group.title, reason: "Being evaluated by group \"#{staging_workflow.managers_group}\"") staging_project_review = request.reviews.find_by!(by_project: staging_project.name) staging_project_review.update!(state: :accepted, reason: "Unstaged from project \"#{staging_project.name}\"") diff --git a/src/api/app/models/staging/workflow.rb b/src/api/app/models/staging/workflow.rb index 5709b1d717f..a431bd402c9 100644 --- a/src/api/app/models/staging/workflow.rb +++ b/src/api/app/models/staging/workflow.rb @@ -18,7 +18,7 @@ def without_staged_requests has_many :target_of_bs_requests, through: :project, foreign_key: 'staging_workflow_id' do def stageable(managers_group_title = nil) managers_group_title ||= proxy_association.owner.managers_group.try(:title) - includes(:reviews).where(state: :review, staging_project_id: nil, reviews: { state: :new, by_group: managers_group_title }) + includes(:reviews).where(status: :review, staging_project_id: nil, reviews: { state: :new, by_group: managers_group_title }) end end @@ -41,7 +41,7 @@ def unassigned_requests end def ready_requests - target_of_bs_requests.where(state: :new).where.not(id: excluded_requests) + target_of_bs_requests.where(status: :new).where.not(id: excluded_requests) end def write_to_backend diff --git a/src/api/app/models/user.rb b/src/api/app/models/user.rb index 1a19d5b0698..4da425f2cef 100644 --- a/src/api/app/models/user.rb +++ b/src/api/app/models/user.rb @@ -644,19 +644,19 @@ def involved_reviews(search = nil) BsRequest.where(reviews: { group: groups }) ) ) - ).joins(:bs_request_actions).left_outer_joins(:reviews).where(state: :review, reviews: { state: :new }).where.not(creator: login).distinct + ).joins(:bs_request_actions).left_outer_joins(:reviews).where(status: 'review', reviews: { state: :new }).where.not(creator: login).distinct search.present? ? result.do_search(search) : result end # list requests involving this user def declined_requests(search = nil) - result = requests_created.where(state: :declined) + result = requests_created.where(status: 'declined') search.present? ? result.do_search(search) : result end # list incoming requests involving this user - def incoming_requests(search = nil, states: [:new]) - result = BsRequest.where(state: states).and( + def incoming_requests(search = nil, states: ['new']) + result = BsRequest.where(status: states).and( BsRequest.where(id: BsRequestAction.bs_request_ids_of_involved_projects(involved_projects.pluck(:id))).or( BsRequest.where(id: BsRequestAction.bs_request_ids_of_involved_packages(involved_packages.pluck(:id))) ) diff --git a/src/api/app/models/workflow/step/submit_request.rb b/src/api/app/models/workflow/step/submit_request.rb index 7d40d84d755..eb819e7b1fc 100644 --- a/src/api/app/models/workflow/step/submit_request.rb +++ b/src/api/app/models/workflow/step/submit_request.rb @@ -42,7 +42,7 @@ def submit_package @bs_request.save! Workflows::ScmEventSubscriptionCreator.new(token, workflow_run, @bs_request).call - SCMStatusReporter.new(event_payload: { number: @bs_request.number, state: @bs_request.state }, + SCMStatusReporter.new(event_payload: { number: @bs_request.number, state: @bs_request.status }, event_subscription_payload: workflow_run.payload, scm_token: @token.scm_token, workflow_run: workflow_run, @@ -62,7 +62,7 @@ def supersede_previous_and_submit_request request.change_state(newstate: 'superseded', reason: "Superseded by request #{new_submit_request.number}", superseded_by: new_submit_request.number) - (@request_numbers_and_state_for_artifacts[request.state.to_s] ||= []) << request.number + (@request_numbers_and_state_for_artifacts[request.status.to_s] ||= []) << request.number end end diff --git a/src/api/app/policies/bs_request_policy.rb b/src/api/app/policies/bs_request_policy.rb index 8efa7d43a10..3d6e89a5a91 100644 --- a/src/api/app/policies/bs_request_policy.rb +++ b/src/api/app/policies/bs_request_policy.rb @@ -13,7 +13,7 @@ def update_labels? end def handle_request? - return false if %i[new review declined].exclude?(record.state) + return false if %w[new review declined].exclude?(record.status) author? || record.target_maintainer?(user) || record.source_maintainer?(user) end @@ -21,11 +21,11 @@ def handle_request? def add_reviews? is_target_maintainer = record.target_maintainer?(user) has_open_reviews = record.reviews.where(state: 'new').any? { |review| review.matches_user?(user) } - record.state.in?(%i[new review]) && (author? || is_target_maintainer || has_open_reviews.present?) + record.status.in?(%w[new review]) && (author? || is_target_maintainer || has_open_reviews.present?) end def revoke_request? - return false if %i[new review declined].exclude?(record.state) + return false if %w[new review declined].exclude?(record.status) author? || record.source_maintainer?(user) end @@ -41,11 +41,11 @@ def decline_request? end def accept_request? - record.state.in?(%i[new review]) && record.target_maintainer?(user) + record.status.in?(%w[new review]) && record.target_maintainer?(user) end def reopen_request? - record.state == :declined + record.status == 'declined' end def forward_request? diff --git a/src/api/app/views/staging/shared/_requests.xml.builder b/src/api/app/views/staging/shared/_requests.xml.builder index 302c1dbc136..43426e57d38 100644 --- a/src/api/app/views/staging/shared/_requests.xml.builder +++ b/src/api/app/views/staging/shared/_requests.xml.builder @@ -2,7 +2,7 @@ requests.each do |bs_request| builder.request(id: bs_request.number, type: bs_request.bs_request_actions.first.action_type, creator: bs_request.creator, - state: bs_request.state, + state: bs_request.status, package: bs_request.first_target_package, superseded_by: bs_request.superseded_by, updated: bs_request.updated_at.xmlschema) diff --git a/src/api/app/views/webui/projects/pulse/_pulse_list_requests.html.haml b/src/api/app/views/webui/projects/pulse/_pulse_list_requests.html.haml index 617310ce235..a5efbb859b1 100644 --- a/src/api/app/views/webui/projects/pulse/_pulse_list_requests.html.haml +++ b/src/api/app/views/webui/projects/pulse/_pulse_list_requests.html.haml @@ -1,7 +1,7 @@ .row - requests.take(30).each do |request| %dt.col-12.col-md-2.col-lg-1 - = render BsRequestStateBadgeComponent.new(state: request.state, css_class: 'mb-auto') + = render BsRequestStateBadgeComponent.new(state: request.status, css_class: 'mb-auto') %dd.col-12.col-md-10.col-lg-11 = link_to(request_show_path(request.number), title: request.description) do = request.number diff --git a/src/api/app/views/webui/request/_request_header.html.haml b/src/api/app/views/webui/request/_request_header.html.haml index b7dd88e41d7..0ab5fbacf65 100644 --- a/src/api/app/views/webui/request/_request_header.html.haml +++ b/src/api/app/views/webui/request/_request_header.html.haml @@ -1,5 +1,5 @@ -# TODO: replace by helper -- badge_state = BsRequestStateBadgeComponent.new(state: bs_request.state, css_class: 'ms-2') +- badge_state = BsRequestStateBadgeComponent.new(state: bs_request.status, css_class: 'ms-2') .card-title.d-flex.justify-content-between.mb-2.pt-4.px-4 %h3 diff --git a/src/api/app/views/webui/request/_show_overview.html.haml b/src/api/app/views/webui/request/_show_overview.html.haml index 8ace4e016d6..1b2f9eb3d45 100644 --- a/src/api/app/views/webui/request/_show_overview.html.haml +++ b/src/api/app/views/webui/request/_show_overview.html.haml @@ -2,7 +2,7 @@ Request #{bs_request.number} %small = render BsRequestPriorityBadgeComponent.new(priority: bs_request.priority, css_class: 'ms-1', overview: true) - = render BsRequestStateBadgeComponent.new(state: bs_request.state, css_class: 'ms-1') + = render BsRequestStateBadgeComponent.new(state: bs_request.status, css_class: 'ms-1') - if User.session .d-inline.ms-2#watchlist-icon-wrapper = render WatchlistIconComponent.new(user: User.session, diff --git a/src/api/app/views/webui/request/_show_side_links.html.haml b/src/api/app/views/webui/request/_show_side_links.html.haml index 4dac7909ab9..e01d1cbe858 100644 --- a/src/api/app/views/webui/request/_show_side_links.html.haml +++ b/src/api/app/views/webui/request/_show_side_links.html.haml @@ -7,7 +7,7 @@ %li %i.fas.fa-info-circle.text-info In state - = link_to(bs_request.state, { anchor: 'request-history' }, style: "color: #{request_state_color(bs_request.state.to_s)};") + = link_to(bs_request.status, { anchor: 'request-history' }, style: "color: #{request_state_color(bs_request.status.to_s)};") - unless package_maintainers.empty? %li %i.fas.fa-info-circle.text-info @@ -26,7 +26,7 @@ - if bs_request.accept_at.present? %li %i.fas.fa-exclamation-circle.text-danger - - if BsRequest::FINAL_REQUEST_STATES.include?(bs_request.state) + - if BsRequest::FINAL_REQUEST_STATES.include?(bs_request.status.to_sym) Auto-accept was set to %span{ title: "#{I18n.l bs_request.accept_at}" } = succeed '.' do diff --git a/src/api/app/views/webui/request/show.html.haml b/src/api/app/views/webui/request/show.html.haml index 1f5d365b7b6..c677de620e4 100644 --- a/src/api/app/views/webui/request/show.html.haml +++ b/src/api/app/views/webui/request/show.html.haml @@ -1,5 +1,5 @@ :ruby - content_for(:meta_title, "Request #{@bs_request.number} (#{@bs_request.state})") + content_for(:meta_title, "Request #{@bs_request.number} (#{@bs_request.status})") content_for(:meta_description, @bs_request.description) content_for(:meta_image, gravatar_url(User.find_by_login(@bs_request.creator).email)) @pagetitle = "Request #{@bs_request.number}" diff --git a/src/api/app/views/webui/shared/bs_requests/_request_item.html.haml b/src/api/app/views/webui/shared/bs_requests/_request_item.html.haml index eadcb2d08f2..705586a0b4e 100644 --- a/src/api/app/views/webui/shared/bs_requests/_request_item.html.haml +++ b/src/api/app/views/webui/shared/bs_requests/_request_item.html.haml @@ -15,7 +15,7 @@ = bs_request.bs_request_actions.first.type.humanize.titleize Request ##{bs_request.number} = render BsRequestPriorityBadgeComponent.new(priority: bs_request.priority, css_class: 'mb-auto mx-2') - = render BsRequestStateBadgeComponent.new(state: bs_request.state, css_class: 'mb-auto') + = render BsRequestStateBadgeComponent.new(state: bs_request.status, css_class: 'mb-auto') - if Flipper.enabled?(:labels, User.session) && bs_request.labels .mb-1 = render partial: 'webui/shared/label', collection: bs_request.labels, as: :label diff --git a/src/api/app/views/webui/shared/bs_requests/_requests_filter.html.haml b/src/api/app/views/webui/shared/bs_requests/_requests_filter.html.haml index 781c64cb7d2..4862f4ab49b 100644 --- a/src/api/app/views/webui/shared/bs_requests/_requests_filter.html.haml +++ b/src/api/app/views/webui/shared/bs_requests/_requests_filter.html.haml @@ -25,7 +25,7 @@ .selected-content.small.ms-1 .px-4.pb-2.accordion-collapse.collapse.show#request-filter-state - BsRequest::VALID_REQUEST_STATES.each do |state| - = render partial: 'webui/shared/check_box', locals: { label: render(BsRequestStateBadgeComponent.new(state: state)), + = render partial: 'webui/shared/check_box', locals: { label: render(BsRequestStateBadgeComponent.new(state: state.to_s)), key: "states[#{state}]", name: 'states[]', value: state, checked: selected_filter[:states]&.include?(state.to_s) } diff --git a/src/api/app/views/webui/users/notifications/_notification.html.haml b/src/api/app/views/webui/users/notifications/_notification.html.haml index f0e8834e024..a43aa380826 100644 --- a/src/api/app/views/webui/users/notifications/_notification.html.haml +++ b/src/api/app/views/webui/users/notifications/_notification.html.haml @@ -17,7 +17,7 @@ %small.text-nowrap = render TimeComponent.new(time: notification.created_at) - if notification.notifiable_type == 'BsRequest' - = render BsRequestStateBadgeComponent.new(state: notification.notifiable.state) + = render BsRequestStateBadgeComponent.new(state: notification.notifiable.status) - elsif notification.notifiable_type == 'WorkflowRun' = render WorkflowRunStatusBadgeComponent.new(status: notification.notifiable.status, css_class: 'ms-1') - elsif notification.notifiable_type == 'Report' && count_of_additional_reports_for_reportable(notification) >= 1 diff --git a/src/api/app/views/webui/users/notifications/_notification_filter.html.haml b/src/api/app/views/webui/users/notifications/_notification_filter.html.haml index b19d99f5654..76da497a2a5 100644 --- a/src/api/app/views/webui/users/notifications/_notification_filter.html.haml +++ b/src/api/app/views/webui/users/notifications/_notification_filter.html.haml @@ -103,7 +103,7 @@ checked: selected_filter[:kind]&.include?('outgoing_requests') } - BsRequest::VALID_REQUEST_STATES.each do |request_state| .dropdown-item-text - = render partial: 'webui/shared/check_box', locals: { label: render(BsRequestStateBadgeComponent.new(state: request_state)), + = render partial: 'webui/shared/check_box', locals: { label: render(BsRequestStateBadgeComponent.new(state: request_state.to_s)), key: "request_state[#{request_state}]", name: 'request_state[]', value: request_state, checked: selected_filter[:request_state]&.include?(request_state.to_s) } diff --git a/src/api/config/brakeman.ignore b/src/api/config/brakeman.ignore index 3d466222f80..6b17a73d575 100644 --- a/src/api/config/brakeman.ignore +++ b/src/api/config/brakeman.ignore @@ -828,6 +828,50 @@ ], "note": "" }, + { + "warning_type": "Cross-Site Scripting", + "warning_code": 2, + "fingerprint": "c91b196a3c702b30eea3f7814ba9b43d86b1571dab639e3463db2168d6837fee", + "check_name": "CrossSiteScripting", + "message": "Unescaped model attribute", + "file": "app/views/webui/request/_request_header.html.haml", + "line": 32, + "link": "https://brakemanscanner.org/docs/warning_types/cross_site_scripting", + "code": "::Haml::AttributeBuilder.build_class(true, \"text-nowrap\", \"text-bg-#{BsRequestStateBadgeComponent.new(:state => BsRequest.find_by!(:number => params[:number]).status, :css_class => \"ms-2\").decode_state_color}\")", + "render_path": [ + { + "type": "controller", + "class": "Webui::RequestController", + "method": "beta_show", + "line": 50, + "file": "app/controllers/webui/request_controller.rb", + "rendered": { + "name": "webui/request/beta_show", + "file": "app/views/webui/request/beta_show.html.haml" + } + }, + { + "type": "template", + "name": "webui/request/beta_show", + "line": 11, + "file": "app/views/webui/request/beta_show.html.haml", + "rendered": { + "name": "webui/request/_request_header", + "file": "app/views/webui/request/_request_header.html.haml" + } + } + ], + "location": { + "type": "template", + "template": "webui/request/_request_header" + }, + "user_input": "BsRequest.find_by!(:number => params[:number]).status", + "confidence": "Weak", + "cwe_id": [ + 79 + ], + "note": "" + }, { "warning_type": "Cross-Site Scripting", "warning_code": 2, @@ -928,50 +972,6 @@ ], "note": "" }, - { - "warning_type": "Cross-Site Scripting", - "warning_code": 2, - "fingerprint": "e3619f234f977eb7c864ec9a7528d0a8571e50a570ece0db9e189e66c3816176", - "check_name": "CrossSiteScripting", - "message": "Unescaped model attribute", - "file": "app/views/webui/request/_request_header.html.haml", - "line": 32, - "link": "https://brakemanscanner.org/docs/warning_types/cross_site_scripting", - "code": "::Haml::AttributeBuilder.build_class(true, \"text-nowrap\", \"text-bg-#{BsRequestStateBadgeComponent.new(:state => BsRequest.find_by!(:number => params[:number]).state, :css_class => \"ms-2\").decode_state_color}\")", - "render_path": [ - { - "type": "controller", - "class": "Webui::RequestController", - "method": "beta_show", - "line": 50, - "file": "app/controllers/webui/request_controller.rb", - "rendered": { - "name": "webui/request/beta_show", - "file": "app/views/webui/request/beta_show.html.haml" - } - }, - { - "type": "template", - "name": "webui/request/beta_show", - "line": 11, - "file": "app/views/webui/request/beta_show.html.haml", - "rendered": { - "name": "webui/request/_request_header", - "file": "app/views/webui/request/_request_header.html.haml" - } - } - ], - "location": { - "type": "template", - "template": "webui/request/_request_header" - }, - "user_input": "BsRequest.find_by!(:number => params[:number]).state", - "confidence": "Weak", - "cwe_id": [ - 79 - ], - "note": "" - }, { "warning_type": "Cross-Site Scripting", "warning_code": 2, diff --git a/src/api/lib/tasks/dev/rake_support.rb b/src/api/lib/tasks/dev/rake_support.rb index ae383495ace..2e32c9dcbce 100644 --- a/src/api/lib/tasks/dev/rake_support.rb +++ b/src/api/lib/tasks/dev/rake_support.rb @@ -31,6 +31,7 @@ def self.request_for_staging(staging_project, maintainer_project, suffix) request = create( :bs_request_with_submit_action, state: :new, + status: :new, creator: requester, target_package: target_package, source_package: source_package, diff --git a/src/api/lib/tasks/dev/requests.rake b/src/api/lib/tasks/dev/requests.rake index 5a13ac83f22..8eeedd61f02 100644 --- a/src/api/lib/tasks/dev/requests.rake +++ b/src/api/lib/tasks/dev/requests.rake @@ -322,7 +322,8 @@ namespace :dev do bs_request: { description: "Bs request ##{req['id']}", creator: alias_for_login(req['creator']), - state: req['state']['name'] + state: req['state']['name'], + status: req['state']['name'] }, bs_request_actions: { target_project: 'openSUSE:Factory', diff --git a/src/api/lib/xpath_engine.rb b/src/api/lib/xpath_engine.rb index 26b3d1e12ab..ebf799faa86 100644 --- a/src/api/lib/xpath_engine.rb +++ b/src/api/lib/xpath_engine.rb @@ -198,7 +198,7 @@ def initialize 'requests' => { '@id' => { cpart: 'bs_requests.number' }, '@creator' => { cpart: 'bs_requests.creator' }, - 'state/@name' => { cpart: 'bs_requests.state' }, + 'state/@name' => { cpart: 'bs_requests.status' }, 'state/@who' => { cpart: 'bs_requests.commenter' }, 'state/@when' => { cpart: 'bs_requests.updated_at' }, 'action/@type' => { cpart: 'a.type', diff --git a/src/api/spec/controllers/webui/groups/bs_requests_controller_spec.rb b/src/api/spec/controllers/webui/groups/bs_requests_controller_spec.rb index c993b62cdc4..9143038157b 100644 --- a/src/api/spec/controllers/webui/groups/bs_requests_controller_spec.rb +++ b/src/api/spec/controllers/webui/groups/bs_requests_controller_spec.rb @@ -72,8 +72,10 @@ before do login user bs_request.state = :review + bs_request.status = :review bs_request.save another_bs_request.state = :review + another_bs_request.status = :review another_bs_request.save get :index, params: params end diff --git a/src/api/spec/controllers/webui/request_controller_spec.rb b/src/api/spec/controllers/webui/request_controller_spec.rb index 291b992edbf..0545a4a07c5 100644 --- a/src/api/spec/controllers/webui/request_controller_spec.rb +++ b/src/api/spec/controllers/webui/request_controller_spec.rb @@ -242,12 +242,12 @@ end it 'with invalid transition' do - request_with_review.update(state: 'declined') + request_with_review.update(status: 'declined') post :modify_review, params: { comment: 'yeah', review_id: request_with_review.reviews.first, new_state: 'Approve' } expect(flash[:error]).to eq('Not permitted to change review state: The request is neither in state review nor new') - expect(request_with_review.reload.state).to eq(:declined) + expect(request_with_review.reload.status).to eq('declined') end end end diff --git a/src/api/spec/db/data/regenerate_notifications_spec.rb b/src/api/spec/db/data/regenerate_notifications_spec.rb deleted file mode 100644 index 876f96e830e..00000000000 --- a/src/api/spec/db/data/regenerate_notifications_spec.rb +++ /dev/null @@ -1,200 +0,0 @@ -require Rails.root.join('db/data/20200326221616_regenerate_notifications.rb') - -RSpec.describe RegenerateNotifications, type: :migration do - describe 'up' do - subject { RegenerateNotifications.new.up } - - let(:owner) { create(:confirmed_user, login: 'bob') } - let(:requester) { create(:confirmed_user, login: 'ann') } - let(:project) { create(:project, name: 'bob_project', maintainer: [owner]) } - let(:package) { create(:package, name: 'bob_package', project: project) } - let(:another_package) { create(:package) } - - let!(:new_bs_request) do - create(:bs_request_with_submit_action, - state: :new, - creator: requester, - target_project: project, - target_package: package, - source_package: another_package) - end - let!(:declined_bs_request) do - bs_request_to_decline = - create(:bs_request_with_submit_action, - state: :new, - creator: requester, - target_project: project, - target_package: package, - source_package: another_package, - created_at: 3.days.ago, - updated_at: 2.days.ago) - bs_request_to_decline.update(state: 'declined') - bs_request_to_decline - end - let!(:old_declined_bs_request) do - bs_request_to_decline = - create(:bs_request_with_submit_action, - state: :new, - creator: requester, - target_project: project, - target_package: package, - source_package: another_package, - created_at: 101.days.ago) - bs_request_to_decline.update(state: 'declined') - bs_request_to_decline - end - let!(:revoked_bs_request) { create(:bs_request, type: 'maintenance_release', state: :revoked) } # This shouldn't regenerate notification - - before do - owner.regenerate_rss_secret - end - - context 'for RequestCreate Notifications' do - let!(:rss_subscription) { create(:event_subscription_request_created, receiver_role: 'target_maintainer', user: owner, channel: :rss) } - let!(:web_subscription) { create(:event_subscription_request_created, receiver_role: 'target_maintainer', user: owner, channel: :web) } - - before do - subject - end - - it 'creates a RequestCreate Notification' do - expect(Notification.where(event_type: 'Event::RequestCreate').count).to eq(1) - notification = Notification.find_by(event_type: 'Event::RequestCreate') - - # Checks the Notification's attributes have correct values: - expect(notification.event_payload['number']).to eq(new_bs_request.number) - expect(notification.notifiable).to eq(new_bs_request) - # Timestamps compared with .to_s because they have different precision and the values differ slightly. - expect(notification.created_at.to_s).to eq(new_bs_request.updated_when.to_s) - expect(notification.title).to eq("Request #{new_bs_request.number} created by #{requester} (submit #{project}/#{package})") - expect(notification).to be_web - expect(notification).to be_rss - end - end - - context 'for RequestStatechange Notifications' do - let!(:subscription) { create(:event_subscription_request_statechange, receiver_role: 'target_maintainer', user: owner, channel: :rss) } - - before do - subject - end - - it 'creates a RequestStatechange Notification' do - expect(Notification.where(event_type: 'Event::RequestStatechange').count).to eq(1) - notification = Notification.find_by(event_type: 'Event::RequestStatechange') - - # Checks the Notification's attributes have correct values: - expect(notification.event_payload['number']).to eq(declined_bs_request.number) - expect(notification.notifiable).to eq(declined_bs_request) - expect(notification.title).to eq("Request #{declined_bs_request.number} changed from new to declined (submit #{project}/#{package})") - expect(notification.created_at.to_s).to eq(declined_bs_request.updated_when.to_s) - expect(notification.bs_request_oldstate).to eq('new') - end - end - - context 'for ReviewWanted Notifications' do - let!(:review_request) do # The type, submit, shouldn't matter - create(:bs_request_with_submit_action, - state: :review, - creator: requester, - target_project: project, - target_package: package, - source_package: another_package, - updated_at: 15.days.ago) - end - let!(:accepted_review) { create(:review, bs_request: review_request, by_user: owner, state: :accepted) } - - context 'with review by user' do - let!(:subscription) { create(:event_subscription_review_wanted, receiver_role: 'reviewer', user: owner, channel: :rss) } - let!(:review) { create(:review, bs_request: review_request, by_user: owner, state: :new, updated_at: 10.days.ago) } - - before do - subject - end - - it 'creates a ReviewWanted Notification of type Request' do - expect(Notification.where(event_type: 'Event::ReviewWanted').count).to eq(1) - notification = Notification.find_by(event_type: 'Event::ReviewWanted') - - # Checks the Notification's attributes have correct values: - expect(notification.event_payload['number']).to eq(review_request.number) - expect(notification.notifiable).to eq(review_request) - expect(notification.created_at.to_s).to eq(review.updated_at.to_s) - expect(notification.title).to eq("Request #{review_request.number} requires review (submit #{project}/#{package})") - end - end - - context 'with review by project and by package' do - let(:reviewer1) { create(:confirmed_user, login: 'reviewer_1') } - let(:package2) { create(:package, name: 'package_2') } - let!(:relationship) { create(:relationship_package_user, user: reviewer1, package: package2) } - let!(:web_subscription) { create(:event_subscription_review_wanted, receiver_role: 'reviewer', user: reviewer1, channel: :web) } - let!(:rss_subscription) { create(:event_subscription_review_wanted, receiver_role: 'reviewer', user: reviewer1, channel: :rss) } - let!(:review_by_package) { create(:review, bs_request: review_request, by_project: package2.project, by_package: package2, state: :new) } - - before do - subject - end - - it 'creates a ReviewWanted Notification of type Request' do - expect(Notification.where(event_type: 'Event::ReviewWanted').count).to eq(1) - notification = Notification.find_by(event_type: 'Event::ReviewWanted') - - # Checks the Notification's attributes have correct values: - expect(notification.event_payload['number']).to eq(review_request.number) - expect(notification.notifiable).to eq(review_request) - expect(notification.title).to eq("Request #{review_request.number} requires review (submit #{project}/#{package})") - expect(notification).to be_web - expect(notification).not_to be_rss - end - end - end - - context 'for CommentForRequest Notifications' do - let!(:subscription) { create(:event_subscription_comment_for_request, receiver_role: 'target_maintainer', user: owner, channel: :rss) } - let!(:old_comment_for_request) { create(:comment_request, commentable: new_bs_request, user: requester, created_at: 4.weeks.ago) } - let!(:comment_for_request) { create(:comment_request, commentable: new_bs_request, user: requester, updated_at: 1.week.ago) } - let!(:comment_for_project) { create(:comment_project, commentable: project, user: requester) } # Shouldn't regenerate notification - let!(:comment_for_package) { create(:comment_package, commentable: package, user: requester) } # Shouldn't regenerate notification - - before do - subject - end - - it 'creates a CommentForRequest Notification' do - expect(Notification.where(notifiable_type: 'Comment').count).to eq(1) - notification = Notification.find_by(notifiable_type: 'Comment') - - # Checks the Notification's attributes have correct values: - expect(notification.event_type).to eq('Event::CommentForRequest') - expect(notification.event_payload['number']).to eq(new_bs_request.number) - expect(notification.notifiable).to eq(comment_for_request) - expect(notification.created_at.to_s).to eq(comment_for_request.updated_at.to_s) - expect(notification.title).to eq("Request #{new_bs_request.number} commented by #{requester} (submit #{project}/#{package})") - end - end - - context 'when running the job after running the data migration' do - let!(:subscription) { create(:event_subscription_comment_for_request, receiver_role: 'target_maintainer', user: owner, channel: :rss) } - let!(:comment_for_request) { create(:comment_request, commentable: new_bs_request, user: requester, body: 'bla') } - let(:events) { Event::Base.where(eventtype: 'Event::CommentForRequest') } - let(:comment_notifications) { Notification.where(notifiable_type: 'Comment') } - - before do - subject - end - - it 'creates only one CommentForRequest Notification' do - expect(comment_notifications.count).to eq(1) - expect(events.count).to eq(1) - expect(events.last.mails_sent).to be_falsey - - # we run this to ensure the job doesn't duplicate notifications - SendEventEmailsJob.new.perform - expect(events.last.mails_sent).to be_truthy - expect(comment_notifications.count).to eq(1) - expect(events.last.payload['id']).to eq(comment_notifications.last.notifiable_id) - end - end - end -end diff --git a/src/api/spec/features/webui/requests_spec.rb b/src/api/spec/features/webui/requests_spec.rb index f0ddf0e70bc..7b609196f2d 100644 --- a/src/api/spec/features/webui/requests_spec.rb +++ b/src/api/spec/features/webui/requests_spec.rb @@ -75,7 +75,7 @@ expect(page).to have_text("#{submitter.realname} (#{submitter.login}) wants the group #{roleaddition_group} to get the role bugowner for project #{target_project}") expect(page).to have_css('#description-text', text: 'I can fix bugs too.') expect(page).to have_text('In state new') - expect(BsRequest.where(description: 'I can fix bugs too.', state: 'new').count).to be(1) + expect(BsRequest.where(description: 'I can fix bugs too.', status: 'new').count).to be(1) end it 'can be accepted' do @@ -116,7 +116,7 @@ "for package #{target_project} / #{target_package}") expect(page).to have_css('#description-text', text: 'I can produce bugs too.') expect(page).to have_text('In state new') - expect(BsRequest.where(description: 'I can produce bugs too.', state: 'new').count).to be(1) + expect(BsRequest.where(description: 'I can produce bugs too.', status: 'new').count).to be(1) end it 'can be accepted' do @@ -145,7 +145,7 @@ expect(page).to have_text("#{submitter.realname} (#{submitter.login}) wants to get the role bugowner for project #{target_project}") expect(page).to have_css('#description-text', text: 'I can fix bugs too.') expect(page).to have_text('In state new') - expect(BsRequest.where(description: 'I can fix bugs too.', state: 'new').count).to be(1) + expect(BsRequest.where(description: 'I can fix bugs too.', status: 'new').count).to be(1) end it 'can be accepted' do @@ -184,7 +184,7 @@ "for package #{target_project} / #{target_package}") expect(page).to have_css('#description-text', text: 'I can produce bugs too.') expect(page).to have_text('In state new') - expect(BsRequest.where(description: 'I can produce bugs too.', state: 'new').count).to be(1) + expect(BsRequest.where(description: 'I can produce bugs too.', status: 'new').count).to be(1) end it 'can be accepted' do @@ -227,7 +227,7 @@ end expect(page).to have_text('Ok for the project') expect(Review.first.state).to eq(:accepted) - expect(BsRequest.first.state).to eq(:new) + expect(BsRequest.first.status).to eq('new') end end @@ -329,7 +329,7 @@ end it 'when request is in a final state' do - bs_request.update(state: :accepted) + bs_request.update(status: 'accepted') visit request_show_path(bs_request) expect(page).to have_text("Auto-accept was set to #{I18n.l(bs_request.accept_at, format: :only_date)}.") end @@ -369,7 +369,7 @@ describe 'for a request with a deleted target project' do let!(:delete_bs_request) do - create(:delete_bs_request, target_project: target_project, description: 'a long text - ' * 200, creator: submitter, state: :accepted) + create(:delete_bs_request, target_project: target_project, description: 'a long text - ' * 200, creator: submitter, state: 'accepted') end before do diff --git a/src/api/spec/models/bs_request_spec.rb b/src/api/spec/models/bs_request_spec.rb index 794dc7fb504..fb28bdb5cac 100644 --- a/src/api/spec/models/bs_request_spec.rb +++ b/src/api/spec/models/bs_request_spec.rb @@ -471,7 +471,7 @@ subject { request.auto_accept } before do - request.update(state: :declined) + request.update(status: 'declined') subject end @@ -667,7 +667,7 @@ 'description' => submit_request.description, 'project' => 'target_project', 'package' => 'target_package', - 'state' => 'new', + 'status' => 'new', 'request_type' => 'submit', 'priority' => 'moderate', 'created_at' => submit_request.created_at.as_json, diff --git a/src/api/spec/models/project/staging_project_spec.rb b/src/api/spec/models/project/staging_project_spec.rb index 6b9a8f90b24..1ee5f9c764d 100644 --- a/src/api/spec/models/project/staging_project_spec.rb +++ b/src/api/spec/models/project/staging_project_spec.rb @@ -93,7 +93,7 @@ context 'when request got revoked' do before do - submit_request.update(state: 'revoked') + submit_request.update(status: 'revoked') end it { expect(staging_project.overall_state).to eq(:unacceptable) } diff --git a/src/api/spec/models/user_requests_spec.rb b/src/api/spec/models/user_requests_spec.rb index d052714d7d4..6ab302101ae 100644 --- a/src/api/spec/models/user_requests_spec.rb +++ b/src/api/spec/models/user_requests_spec.rb @@ -273,7 +273,7 @@ end it 'does not include requests in any other state expect new' do - maintained_request.state = :review + maintained_request.status = 'review' maintained_request.save expect(subject).not_to include(maintained_request) end diff --git a/src/api/spec/models/workflow/step/submit_request_step_spec.rb b/src/api/spec/models/workflow/step/submit_request_step_spec.rb index d5456477a53..10857456ece 100644 --- a/src/api/spec/models/workflow/step/submit_request_step_spec.rb +++ b/src/api/spec/models/workflow/step/submit_request_step_spec.rb @@ -75,7 +75,7 @@ expect do subject.call bs_request.reload - end.to(change(bs_request, :state).from(:new).to(:revoked)) + end.to(change(bs_request, :status).from('new').to('revoked')) expect { subject.call }.not_to change(BsRequest, :count) end end diff --git a/src/api/test/fixtures/bs_requests.yml b/src/api/test/fixtures/bs_requests.yml index e2632e60ce3..ccba44ba17e 100644 --- a/src/api/test/fixtures/bs_requests.yml +++ b/src/api/test/fixtures/bs_requests.yml @@ -3,7 +3,7 @@ bs_requests_1000: number: 1000 description: want to see their reaction creator: tom - state: review + status: review commenter: tom created_at: 2013-09-09 19:15:16.000000000 Z updated_at: 2013-09-09 19:15:16.000000000 Z @@ -12,7 +12,7 @@ missing_projects: number: 2 description: '' creator: tom - state: new + status: new commenter: tom created_at: 2012-09-02 13:08:02.000000000 Z updated_at: 2012-09-02 13:08:02.000000000 Z @@ -21,7 +21,7 @@ missing_source_project: number: 1 description: '' creator: tom - state: new + status: new commenter: tom created_at: 2012-09-01 13:08:02.000000000 Z updated_at: 2012-09-01 13:08:02.000000000 Z @@ -30,7 +30,7 @@ missing_target_project: number: 3 description: '' creator: tom - state: new + status: new commenter: tom created_at: 2012-09-03 13:08:02.000000000 Z updated_at: 2012-09-03 13:08:02.000000000 Z @@ -39,7 +39,7 @@ multiple_test: number: 10 description: multiple test creator: tom - state: review + status: review commenter: tom created_at: 2013-09-09 19:20:44.000000000 Z updated_at: 2013-09-09 19:20:44.000000000 Z @@ -48,7 +48,7 @@ submit_from_home_project: number: 4 description: test home project shortening creator: Iggy - state: review + status: review comment: another group review commenter: king created_at: 2012-09-04 13:08:02.000000000 Z @@ -58,7 +58,7 @@ submit_from_home_project_new: number: 5 description: test open requests for My:Maintenance creator: Iggy - state: new + status: new comment: A new request commenter: king created_at: 2012-09-04 13:08:02.000000000 Z @@ -68,7 +68,7 @@ submit_from_home_project_maintenance_incident: number: 6 description: test open requests creator: Iggy - state: new + status: new comment: A new maintenance incident commenter: king created_at: 2012-08-04 13:08:02.000000000 Z @@ -78,7 +78,7 @@ submit_from_home_project_maintenance_release: number: 7 description: test open requests creator: Iggy - state: new + status: new comment: A new maintenance release commenter: king created_at: 2012-08-04 13:08:02.000000000 Z