discourse/spec/system/admin_backups_spec.rb
Martin Brennan 1446596089
UX: Apply admin interface guidelines to Backups page ()
This commit converts the Backups page in the admin interface
to follow our new admin interface guidelines.

As part of this work, I've also made `AdminPageHeader` and `AdminPageSubheader`
components that can be reused on any admin page for consistency, that handle
the title and action buttons and also breadcrumbs.

Also renamed `AdminPluginFilteredSiteSettings` to `AdminFilteredSiteSettings` since
it can be used generally to show a subset of filtered site settings, not only
settings for a plugin. Not sure if it's ideal to have to define a new route for this
for every config area, but not sure how else to do it right now.
2024-08-20 09:59:43 +10:00

84 lines
2.5 KiB
Ruby

#frozen_string_literal: true
describe "Admin Backups Page", type: :system do
fab!(:current_user) { Fabricate(:admin) }
let(:backups_page) { PageObjects::Pages::AdminBackups.new }
let(:dialog) { PageObjects::Components::Dialog.new }
let(:settings_page) { PageObjects::Pages::AdminSiteSettings.new }
let(:root_directory) { setup_local_backups }
def create_backups
create_local_backup_file(
root_directory: root_directory,
db_name: "default",
filename: "b.tar.gz",
last_modified: "2024-07-13T15:10:00Z",
size_in_bytes: 10,
)
create_local_backup_file(
root_directory: root_directory,
db_name: "default",
filename: "old.tar.gz",
last_modified: "2024-06-01T13:10:00Z",
size_in_bytes: 5,
)
end
before do
sign_in(current_user)
create_backups
BackupRestore::LocalBackupStore.stubs(:base_directory).returns(
root_directory + "/" + RailsMultisite::ConnectionManagement.current_db,
)
end
after { teardown_local_backups(root_directory: root_directory) }
it "shows a list of backups" do
backups_page.visit_page
expect(backups_page).to have_backup_listed("b.tar.gz")
expect(backups_page).to have_backup_listed("old.tar.gz")
end
it "can download a backup, which sends an email" do
backups_page.visit_page
backups_page.download_backup("b.tar.gz")
expect(page).to have_content(I18n.t("admin_js.admin.backups.operations.download.alert"))
expect_job_enqueued(
job: :download_backup_email,
args: {
user_id: current_user.id,
backup_file_path: Discourse.base_url + "/admin/backups/b.tar.gz",
},
)
end
it "can delete a backup" do
backups_page.visit_page
backups_page.delete_backup("b.tar.gz")
dialog.click_yes
expect(backups_page).to have_no_backup_listed("b.tar.gz")
end
it "can restore a backup" do
backups_page.visit_page
backups_page.expand_backup_row_menu("b.tar.gz")
expect(backups_page).to have_css(backups_page.row_button_selector("restore"))
end
it "can toggle read-only mode" do
backups_page.visit_page
backups_page.toggle_read_only
dialog.click_yes
expect(page).to have_content(I18n.t("js.read_only_mode.enabled"))
backups_page.toggle_read_only
expect(page).to have_no_content(I18n.t("js.read_only_mode.enabled"))
end
it "can see backup site settings" do
backups_page.visit_page
backups_page.click_tab("settings")
expect(settings_page).to have_setting("enable_backups")
end
end