mirror of https://github.com/mastodon/mastodon
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.4 KiB
Ruby
135 lines
3.4 KiB
Ruby
4 months ago
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'rails_helper'
|
||
|
|
||
|
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
|