You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.4 KiB
134 lines
3.4 KiB
# frozen_string_literal: true |
|
|
|
require 'rails_helper' |
|
|
|
RSpec.describe 'Admin::Announcements' do |
|
include ActionView::RecordIdentifier |
|
|
|
describe 'Viewing announcements' do |
|
it 'can view a list of existing announcements' do |
|
announcement = Fabricate :announcement, text: 'Test Announcement' |
|
sign_in admin_user |
|
visit admin_announcements_path |
|
|
|
within css_id(announcement) do |
|
expect(page) |
|
.to have_content(announcement.text) |
|
end |
|
end |
|
end |
|
|
|
describe 'Creating announcements' do |
|
it 'create a new announcement' do |
|
sign_in admin_user |
|
visit new_admin_announcement_path |
|
|
|
fill_in text_label, |
|
with: 'Announcement text' |
|
|
|
expect { submit_form } |
|
.to change(Announcement, :count).by(1) |
|
expect(page) |
|
.to have_content(I18n.t('admin.announcements.published_msg')) |
|
end |
|
end |
|
|
|
describe 'Updating announcements' do |
|
it 'updates an existing announcement' do |
|
announcement = Fabricate :announcement, text: 'Test Announcement' |
|
sign_in admin_user |
|
visit admin_announcements_path |
|
|
|
within css_id(announcement) do |
|
click_on announcement.text |
|
end |
|
|
|
fill_in text_label, |
|
with: 'Announcement text' |
|
save_changes |
|
|
|
expect(page) |
|
.to have_content(I18n.t('admin.announcements.updated_msg')) |
|
end |
|
end |
|
|
|
describe 'Deleting announcements' do |
|
it 'deletes an existing announcement' do |
|
announcement = Fabricate :announcement, text: 'Test Announcement' |
|
sign_in admin_user |
|
visit admin_announcements_path |
|
|
|
expect { delete_announcement(announcement) } |
|
.to change(Announcement, :count).by(-1) |
|
|
|
expect(page) |
|
.to have_content(I18n.t('admin.announcements.destroyed_msg')) |
|
end |
|
end |
|
|
|
describe 'Publishing announcements' do |
|
it 'publishes an existing announcement' do |
|
announcement = Fabricate :announcement, published: false, scheduled_at: 10.days.from_now |
|
sign_in admin_user |
|
visit admin_announcements_path |
|
|
|
expect { publish_announcement(announcement) } |
|
.to change { announcement.reload.published? }.to(true) |
|
|
|
expect(page) |
|
.to have_content(I18n.t('admin.announcements.published_msg')) |
|
end |
|
|
|
it 'unpublishes an existing announcement' do |
|
announcement = Fabricate :announcement, published: true |
|
sign_in admin_user |
|
visit admin_announcements_path |
|
|
|
expect { unpublish_announcement(announcement) } |
|
.to change { announcement.reload.published? }.to(false) |
|
|
|
expect(page) |
|
.to have_content(I18n.t('admin.announcements.unpublished_msg')) |
|
end |
|
end |
|
|
|
private |
|
|
|
def css_id(record) |
|
"##{dom_id(record)}" # TODO: Extract to system spec helper? |
|
end |
|
|
|
def publish_announcement(announcement) |
|
within css_id(announcement) do |
|
click_on I18n.t('admin.announcements.publish') |
|
end |
|
end |
|
|
|
def unpublish_announcement(announcement) |
|
within css_id(announcement) do |
|
click_on I18n.t('admin.announcements.unpublish') |
|
end |
|
end |
|
|
|
def delete_announcement(announcement) |
|
within css_id(announcement) do |
|
click_on I18n.t('generic.delete') |
|
end |
|
end |
|
|
|
def save_changes |
|
click_on I18n.t('generic.save_changes') |
|
end |
|
|
|
def submit_form |
|
click_on I18n.t('admin.announcements.new.create') |
|
end |
|
|
|
def text_label |
|
I18n.t('simple_form.labels.announcement.text') |
|
end |
|
|
|
def admin_user |
|
Fabricate(:user, role: UserRole.find_by(name: 'Admin')) |
|
end |
|
end
|
|
|