docbrown/spec/system/admin/admin_awards_badges_spec.rb
Julianna Tetreault c18b0f1ba1
Manage Badges in /admin/badges (#9721) [deploy]
* Add CRUD actions for badge management to Internal::Badges::Controller

* Update sytling of badges index view in index.html.erb
  -Uses a table to display all badges
  -Links to the badge edit page from the badge title
  -Displays a badges slug, title, and badge_image
  -Adds an Award Badge button to the index view

* Adds an edit view, edit.html.erb, for badges
  -Gives the ability to edit a badge title and/or slug
  -Adds an Update Badge button to the left of the view
  -Adds a Back to All Badges button to the right of the view
  -Displays the badge image in the edit form

* Adjusts the path names in #award_badges in Internal::Badges::Controller

* Adds CRUD actions to the Internal::Badges::Controller and needed routes

* Add a description field to the edit.html.erb for badge management

* Add #award to Internal::Badges::Controller with matching view and routes
  -Adds an #award method that sets @badge for #award_badges
  -Adds an award.html.erb view for awarding badges
  -Adds an award path for awarding badges
  -Removes unnecessary code from controller, routes, and views

* Adds image upload functionality to the edit view for badges

* Ensure that usernames are downcased when awarding badges
  -Chains downcase to usernames in #award_badges in
   Internal::Badges::Controller

* Move badge-related views from old Internal folder to the correct Admin folder

Change routes and paths from /internal to /admin

* Refactor badge_params in Admin::Badges::Controller

* Add additional tests around awarding and updating badges in /admin/badge_achievements

* Add a create view to /admin/badges
  -Adds new and create actions to Admin::Badges::Controller
  -Adds a create view for creating badges at new.html.erb
  -Adds a Create Badge button to the index view
  -Moves the Award Badges button to the bottom of the index view

* Add a test around creating badges and clean up existing specs in badges_spec.rb

Adjust path in admin_awards_badges_spec.rb to be correct path

* Adjust routes from /badges/award_badges to /badges/badge_achievements/award_badges

Update paths in admin/badge-related specs

* Adjust paths in badges_spec.rb to be admin_badge_achievements_award_badges_path

* Adjust button styling for Award Badge

* Adjust paths back to /admin/badges in badges_spec.rb

* Add clarification around usernames when awarding badges

* Mark test in black_box_spec.rb as pending due to Travis failure

* Change wording used around usernames and @ symbols in award.html.erb
2020-08-13 08:54:51 -06:00

56 lines
1.6 KiB
Ruby

require "rails_helper"
RSpec.describe "Admin awards badges", type: :system do
let(:admin) { create(:user, :super_admin) }
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:badges) { Badge.pluck(:title) }
def award_two_badges
find(:xpath, "//option[contains(text(), \"#{badges.last}\")]").select_option
fill_in "usernames", with: "#{user.username}, #{user2.username}"
fill_in "message_markdown", with: "He who controls the spice controls the universe."
click_on "Award Badges"
end
def award_no_badges
fill_in "usernames", with: "#{user.username}, #{user2.username}"
fill_in "message_markdown", with: "He who controls the spice controls the universe."
click_on "Award Badges"
end
before do
create_list :badge, 5
sign_in admin
visit "/admin/badge_achievements/award_badges"
end
it "loads the view" do
expect(page).to have_content("Badges")
end
it "lists the badges" do
badges.each do |badge|
expect(page).to have_content(badge)
end
end
it "awards badges" do
expect do
sidekiq_perform_enqueued_jobs { award_two_badges }
end.to change { user.badges.count }.by(1).and change { user2.badges.count }.by(1)
expect(page).to have_content("Badges are being rewarded. The task will finish shortly")
visit "/#{user.username}/"
expect(page).to have_link(href: "/badge/#{Badge.last.slug}")
end
it "does not award badges if no badge is selected", js: true do
expect do
sidekiq_perform_enqueued_jobs { award_no_badges }
end.to change { user.badges.count }.by(0)
expect(page).to have_content("Please choose a badge to award")
end
end