mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 18:30:26 -06:00
4ea21fa2d0
This change both speeds up specs (less strings to allocate) and helps catch cases where methods in Discourse are mutating inputs. Overall we will be migrating everything to use #frozen_string_literal: true it will take a while, but this is the first and safest move in this direction
86 lines
2.3 KiB
Ruby
86 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe DestroyTask do
|
|
|
|
describe 'destroy topics' do
|
|
let!(:c) { Fabricate(:category) }
|
|
let!(:t) { Fabricate(:topic, category: c) }
|
|
let!(:p) { Fabricate(:post, topic: t) }
|
|
let!(:c2) { Fabricate(:category) }
|
|
let!(:t2) { Fabricate(:topic, category: c2) }
|
|
let!(:p2) { Fabricate(:post, topic: t2) }
|
|
let!(:sc) { Fabricate(:category, parent_category: c) }
|
|
let!(:t3) { Fabricate(:topic, category: sc) }
|
|
let!(:p3) { Fabricate(:post, topic: t3) }
|
|
|
|
it 'destroys all topics in a category' do
|
|
expect { DestroyTask.destroy_topics(c.slug) }
|
|
.to change { Topic.where(category_id: c.id).count }.by (-1)
|
|
end
|
|
|
|
it 'destroys all topics in a sub category' do
|
|
expect { DestroyTask.destroy_topics(sc.slug, c.slug) }
|
|
.to change { Topic.where(category_id: sc.id).count }.by(-1)
|
|
end
|
|
|
|
it "doesn't destroy system topics" do
|
|
DestroyTask.destroy_topics(c2.slug)
|
|
expect(Topic.where(category_id: c2.id).count).to eq 1
|
|
end
|
|
|
|
it 'destroys topics in all categories' do
|
|
DestroyTask.destroy_topics_all_categories
|
|
expect(Post.where(topic_id: [t.id, t2.id, t3.id]).count).to eq 0
|
|
end
|
|
end
|
|
|
|
describe 'private messages' do
|
|
let!(:pm) { Fabricate(:private_message_post) }
|
|
let!(:pm2) { Fabricate(:private_message_post) }
|
|
|
|
it 'destroys all private messages' do
|
|
DestroyTask.destroy_private_messages
|
|
expect(Topic.where(archetype: "private_message").count).to eq 0
|
|
end
|
|
end
|
|
|
|
describe 'groups' do
|
|
let!(:g) { Fabricate(:group) }
|
|
let!(:g2) { Fabricate(:group) }
|
|
|
|
it 'destroys all groups' do
|
|
DestroyTask.destroy_groups
|
|
expect(Group.where(automatic: false).count).to eq 0
|
|
end
|
|
|
|
it "doesn't destroy default groups" do
|
|
before_count = Group.count
|
|
DestroyTask.destroy_groups
|
|
expect(Group.count).to eq before_count - 2
|
|
end
|
|
end
|
|
|
|
describe 'users' do
|
|
it 'destroys all non-admin users' do
|
|
before_count = User.count
|
|
|
|
Fabricate(:user)
|
|
Fabricate(:user)
|
|
Fabricate(:admin)
|
|
|
|
DestroyTask.destroy_users
|
|
expect(User.where(admin: false).count).to eq 0
|
|
# admin does not get detroyed
|
|
expect(User.count).to eq before_count + 1
|
|
end
|
|
end
|
|
|
|
describe 'stats' do
|
|
it 'destroys all site stats' do
|
|
DestroyTask.destroy_stats
|
|
end
|
|
end
|
|
end
|