Move new controller specs to reqeusts folder.

This commit is contained in:
Guo Xiang Tan 2017-08-24 12:01:11 +09:00
parent 68b8acbcfa
commit 8779490ce4
12 changed files with 169 additions and 161 deletions

View File

@ -1,116 +0,0 @@
require 'rails_helper'
RSpec.describe "Managing a topic's status update", type: :request do
let(:topic) { Fabricate(:topic) }
let(:user) { Fabricate(:user) }
context 'when a user is not logged in' do
it 'should return the right response' do
expect do
post "/t/#{topic.id}/timer.json",
time: '24',
status_type: TopicTimer.types[1]
end.to raise_error(Discourse::NotLoggedIn)
end
end
context 'when does not have permission' do
it 'should return the right response' do
sign_in(user)
post "/t/#{topic.id}/timer.json",
time: '24',
status_type: TopicTimer.types[1]
expect(response.status).to eq(403)
expect(JSON.parse(response.body)["error_type"]).to eq('invalid_access')
end
end
context 'when logged in as an admin' do
let(:admin) { Fabricate(:admin) }
before do
sign_in(admin)
end
it 'should be able to create a topic status update' do
time = 24
post "/t/#{topic.id}/timer.json",
time: 24,
status_type: TopicTimer.types[1]
expect(response).to be_success
topic_status_update = TopicTimer.last
expect(topic_status_update.topic).to eq(topic)
expect(topic_status_update.execute_at)
.to be_within(1.second).of(24.hours.from_now)
json = JSON.parse(response.body)
expect(DateTime.parse(json['execute_at']))
.to be_within(1.seconds).of(DateTime.parse(topic_status_update.execute_at.to_s))
expect(json['duration']).to eq(topic_status_update.duration)
expect(json['closed']).to eq(topic.reload.closed)
end
it 'should be able to delete a topic status update' do
Fabricate(:topic_timer, topic: topic)
post "/t/#{topic.id}/timer.json",
time: nil,
status_type: TopicTimer.types[1]
expect(response).to be_success
expect(topic.reload.public_topic_timer).to eq(nil)
json = JSON.parse(response.body)
expect(json['execute_at']).to eq(nil)
expect(json['duration']).to eq(nil)
expect(json['closed']).to eq(topic.closed)
end
describe 'publishing topic to category in the future' do
it 'should be able to create the topic status update' do
SiteSetting.queue_jobs = true
post "/t/#{topic.id}/timer.json",
time: 24,
status_type: TopicTimer.types[3],
category_id: topic.category_id
expect(response).to be_success
topic_status_update = TopicTimer.last
expect(topic_status_update.topic).to eq(topic)
expect(topic_status_update.execute_at)
.to be_within(1.second).of(24.hours.from_now)
expect(topic_status_update.status_type)
.to eq(TopicTimer.types[:publish_to_category])
json = JSON.parse(response.body)
expect(json['category_id']).to eq(topic.category_id)
end
end
describe 'invalid status type' do
it 'should raise the right error' do
expect do
post "/t/#{topic.id}/timer.json",
time: 10,
status_type: 'something'
end.to raise_error(Discourse::InvalidParameters)
end
end
end
end

View File

@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Admin::AdminController" do RSpec.describe Admin::AdminController do
it "should return the right response if user isn't a staff" do it "should return the right response if user isn't a staff" do
expect do expect do
get "/admin", api_key: 'asdiasiduga' get "/admin", api_key: 'asdiasiduga'

View File

@ -1,13 +1,13 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Managing Backups" do RSpec.describe Admin::BackupsController do
let(:admin) { Fabricate(:admin) } let(:admin) { Fabricate(:admin) }
before do before do
sign_in(admin) sign_in(admin)
end end
describe 'rolling back a restore' do describe '#rollback' do
it 'should rollback the restore' do it 'should rollback the restore' do
BackupRestore.expects(:rollback!) BackupRestore.expects(:rollback!)
@ -22,7 +22,7 @@ RSpec.describe "Managing Backups" do
end end
end end
describe 'cancelling a backup' do describe '#cancel' do
it "should cancel an backup" do it "should cancel an backup" do
BackupRestore.expects(:cancel!) BackupRestore.expects(:cancel!)

View File

@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Managing custom emojis" do RSpec.describe Admin::EmojisController do
let(:admin) { Fabricate(:admin) } let(:admin) { Fabricate(:admin) }
let(:upload) { Fabricate(:upload) } let(:upload) { Fabricate(:upload) }
@ -8,12 +8,14 @@ RSpec.describe "Managing custom emojis" do
sign_in(admin) sign_in(admin)
end end
describe "creating a custom emoji" do describe "#create" do
describe 'when upload is invalid' do describe 'when upload is invalid' do
it 'should publish the right error' do it 'should publish the right error' do
message = MessageBus.track_publish do message = MessageBus.track_publish do
post("/admin/customize/emojis.json", name: 'test', post("/admin/customize/emojis.json",
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/fake.jpg")) name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/fake.jpg")
)
end.find { |m| m.channel == "/uploads/emoji" } end.find { |m| m.channel == "/uploads/emoji" }
expect(message.channel).to eq("/uploads/emoji") expect(message.channel).to eq("/uploads/emoji")
@ -26,8 +28,10 @@ RSpec.describe "Managing custom emojis" do
CustomEmoji.create!(name: 'test', upload: upload) CustomEmoji.create!(name: 'test', upload: upload)
message = MessageBus.track_publish do message = MessageBus.track_publish do
post("/admin/customize/emojis.json", name: 'test', post("/admin/customize/emojis.json",
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")) name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
)
end.find { |m| m.channel == "/uploads/emoji" } end.find { |m| m.channel == "/uploads/emoji" }
expect(message.channel).to eq("/uploads/emoji") expect(message.channel).to eq("/uploads/emoji")
@ -42,8 +46,10 @@ RSpec.describe "Managing custom emojis" do
Emoji.expects(:clear_cache) Emoji.expects(:clear_cache)
message = MessageBus.track_publish do message = MessageBus.track_publish do
post("/admin/customize/emojis.json", name: 'test', post("/admin/customize/emojis.json",
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")) name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
)
end.find { |m| m.channel == "/uploads/emoji" } end.find { |m| m.channel == "/uploads/emoji" }
custom_emoji = CustomEmoji.last custom_emoji = CustomEmoji.last
@ -57,7 +63,7 @@ RSpec.describe "Managing custom emojis" do
end end
end end
describe 'deleting a custom emoji' do describe '#destroy' do
it 'should allow an admin to delete a custom emoji' do it 'should allow an admin to delete a custom emoji' do
custom_emoji = CustomEmoji.create!(name: 'test', upload: upload) custom_emoji = CustomEmoji.create!(name: 'test', upload: upload)
Emoji.clear_cache Emoji.clear_cache

View File

@ -1,15 +1,15 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Managing flags as an admin" do RSpec.describe Admin::FlagsController do
let(:admin) { Fabricate(:admin) } let(:admin) { Fabricate(:admin) }
let(:post) { Fabricate(:post) } let(:post_1) { Fabricate(:post) }
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
before do before do
sign_in(admin) sign_in(admin)
end end
context 'viewing flags' do context '#index' do
it 'should return the right response when nothing is flagged' do it 'should return the right response when nothing is flagged' do
get '/admin/flags.json' get '/admin/flags.json'
@ -21,7 +21,7 @@ RSpec.describe "Managing flags as an admin" do
end end
it 'should return the right response' do it 'should return the right response' do
PostAction.act(user, post, PostActionType.types[:spam]) PostAction.act(user, post_1, PostActionType.types[:spam])
get '/admin/flags.json' get '/admin/flags.json'
@ -33,13 +33,13 @@ RSpec.describe "Managing flags as an admin" do
end end
end end
context 'agreeing with a flag' do context '#agree' do
it 'should work' do it 'should work' do
SiteSetting.allow_user_locale = true SiteSetting.allow_user_locale = true
post_action = PostAction.act(user, post, PostActionType.types[:spam], message: 'bad') post_action = PostAction.act(user, post_1, PostActionType.types[:spam], message: 'bad')
admin.update!(locale: 'ja') admin.update!(locale: 'ja')
xhr :post, "/admin/flags/agree/#{post.id}" post "/admin/flags/agree/#{post_1.id}.json"
expect(response).to be_success expect(response).to be_success
@ -47,9 +47,9 @@ RSpec.describe "Managing flags as an admin" do
expect(post_action.agreed_by_id).to eq(admin.id) expect(post_action.agreed_by_id).to eq(admin.id)
post = Post.offset(1).last post_1 = Post.offset(1).last
expect(post.raw).to eq(I18n.with_locale(:en) { I18n.t('flags_dispositions.agreed') }) expect(post_1.raw).to eq(I18n.with_locale(:en) { I18n.t('flags_dispositions.agreed') })
end end
end end
end end

View File

@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Managing groups as an admin" do RSpec.describe Admin::GroupsController do
let(:admin) { Fabricate(:admin) } let(:admin) { Fabricate(:admin) }
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
let(:group) { Fabricate(:group) } let(:group) { Fabricate(:group) }
@ -9,7 +9,7 @@ RSpec.describe "Managing groups as an admin" do
sign_in(admin) sign_in(admin)
end end
describe 'creating a new group' do describe '#create' do
it 'should work' do it 'should work' do
post "/admin/groups.json", group: { post "/admin/groups.json", group: {
name: 'testing', name: 'testing',
@ -30,7 +30,7 @@ RSpec.describe "Managing groups as an admin" do
end end
end end
describe 'adding a new owner' do describe '#add_owners' do
it 'should work' do it 'should work' do
put "/admin/groups/#{group.id}/owners.json", group: { put "/admin/groups/#{group.id}/owners.json", group: {
usernames: [user.username, admin.username].join(",") usernames: [user.username, admin.username].join(",")

View File

@ -1,10 +1,10 @@
require 'rails_helper' require 'rails_helper'
describe "Groups" do describe GroupsController do
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
let(:group) { Fabricate(:group, users: [user]) } let(:group) { Fabricate(:group, users: [user]) }
describe 'viewing groups' do describe '#index' do
let!(:staff_group) do let!(:staff_group) do
Fabricate(:group, name: '0000', visibility_level: Group.visibility_levels[:staff]) Fabricate(:group, name: '0000', visibility_level: Group.visibility_levels[:staff])
end end
@ -57,7 +57,7 @@ describe "Groups" do
end end
end end
describe "checking if a group can be mentioned" do describe '#mentionable' do
it "should return the right response" do it "should return the right response" do
sign_in(user) sign_in(user)
group.update_attributes!(name: 'test') group.update_attributes!(name: 'test')
@ -79,7 +79,7 @@ describe "Groups" do
end end
end end
describe "group can be updated" do describe '#update' do
let(:group) do let(:group) do
Fabricate(:group, Fabricate(:group,
name: 'test', name: 'test',
@ -103,7 +103,7 @@ describe "Groups" do
group.update!(allow_membership_requests: false) group.update!(allow_membership_requests: false)
expect do expect do
xhr :put, "/groups/#{group.id}", group: { put "/groups/#{group.id}.json", group: {
flair_bg_color: 'FFF', flair_bg_color: 'FFF',
flair_color: 'BBB', flair_color: 'BBB',
flair_url: 'fa-adjust', flair_url: 'fa-adjust',
@ -138,7 +138,7 @@ describe "Groups" do
end end
it 'should be able to update the group' do it 'should be able to update the group' do
xhr :put, "/groups/#{group.id}", group: { flair_color: 'BBB' } put "/groups/#{group.id}.json", group: { flair_color: 'BBB' }
expect(response).to be_success expect(response).to be_success
expect(group.reload.flair_color).to eq('BBB') expect(group.reload.flair_color).to eq('BBB')
@ -149,14 +149,14 @@ describe "Groups" do
it 'should not be able to update the group' do it 'should not be able to update the group' do
sign_in(user) sign_in(user)
xhr :put, "/groups/#{group.id}", group: { name: 'testing' } put "/groups/#{group.id}.json", group: { name: 'testing' }
expect(response.status).to eq(403) expect(response.status).to eq(403)
end end
end end
end end
describe 'members' do describe '#members' do
let(:user1) do let(:user1) do
Fabricate(:user, Fabricate(:user,
last_seen_at: Time.zone.now, last_seen_at: Time.zone.now,
@ -220,7 +220,7 @@ describe "Groups" do
end end
end end
describe "membership edit permissions" do describe "edit" do
let(:group) { Fabricate(:group) } let(:group) { Fabricate(:group) }
context 'when user is not signed in' do context 'when user is not signed in' do
@ -287,7 +287,7 @@ describe "Groups" do
sign_in(admin) sign_in(admin)
end end
context 'adding members' do context 'add_members' do
it "can make incremental adds" do it "can make incremental adds" do
user2 = Fabricate(:user) user2 = Fabricate(:user)
@ -394,7 +394,7 @@ describe "Groups" do
end end
end end
context 'removing members' do context '#remove_member' do
it "cannot remove members from automatic groups" do it "cannot remove members from automatic groups" do
group.update!(automatic: true) group.update!(automatic: true)
@ -555,7 +555,7 @@ describe "Groups" do
end end
end end
describe "requesting membership for a group" do describe '#request_membership' do
let(:new_user) { Fabricate(:user) } let(:new_user) { Fabricate(:user) }
it 'requires the user to log in' do it 'requires the user to log in' do
@ -602,7 +602,7 @@ describe "Groups" do
end end
end end
describe 'search for groups' do describe '#search ' do
let(:hidden_group) do let(:hidden_group) do
Fabricate(:group, Fabricate(:group,
visibility_level: Group.visibility_levels[:owners], visibility_level: Group.visibility_levels[:owners],

View File

@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "OmniAuth Callbacks" do RSpec.describe Users::OmniauthCallbacksController do
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
before do before do

View File

@ -1,7 +1,7 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'Safe mode' do RSpec.describe SafeModeController do
describe 'entering safe mode' do describe 'enter' do
context 'when no params are given' do context 'when no params are given' do
it 'should redirect back to safe mode page' do it 'should redirect back to safe mode page' do
post '/safe-mode' post '/safe-mode'

View File

@ -1,11 +1,11 @@
require 'rails_helper' require 'rails_helper'
describe "Tags" do describe TagsController do
before do before do
SiteSetting.tagging_enabled = true SiteSetting.tagging_enabled = true
end end
describe "checking tag hashtags" do describe '#check_hashtag' do
let(:tag) { Fabricate(:tag, name: 'test') } let(:tag) { Fabricate(:tag, name: 'test') }
it "should return the right response" do it "should return the right response" do

View File

@ -0,0 +1,118 @@
require 'rails_helper'
RSpec.describe TopicsController do
let(:topic) { Fabricate(:topic) }
let(:user) { Fabricate(:user) }
describe '#timer' do
context 'when a user is not logged in' do
it 'should return the right response' do
expect do
post "/t/#{topic.id}/timer.json",
time: '24',
status_type: TopicTimer.types[1]
end.to raise_error(Discourse::NotLoggedIn)
end
end
context 'when does not have permission' do
it 'should return the right response' do
sign_in(user)
post "/t/#{topic.id}/timer.json",
time: '24',
status_type: TopicTimer.types[1]
expect(response.status).to eq(403)
expect(JSON.parse(response.body)["error_type"]).to eq('invalid_access')
end
end
context 'when logged in as an admin' do
let(:admin) { Fabricate(:admin) }
before do
sign_in(admin)
end
it 'should be able to create a topic status update' do
time = 24
post "/t/#{topic.id}/timer.json",
time: 24,
status_type: TopicTimer.types[1]
expect(response).to be_success
topic_status_update = TopicTimer.last
expect(topic_status_update.topic).to eq(topic)
expect(topic_status_update.execute_at)
.to be_within(1.second).of(24.hours.from_now)
json = JSON.parse(response.body)
expect(DateTime.parse(json['execute_at']))
.to be_within(1.seconds).of(DateTime.parse(topic_status_update.execute_at.to_s))
expect(json['duration']).to eq(topic_status_update.duration)
expect(json['closed']).to eq(topic.reload.closed)
end
it 'should be able to delete a topic status update' do
Fabricate(:topic_timer, topic: topic)
post "/t/#{topic.id}/timer.json",
time: nil,
status_type: TopicTimer.types[1]
expect(response).to be_success
expect(topic.reload.public_topic_timer).to eq(nil)
json = JSON.parse(response.body)
expect(json['execute_at']).to eq(nil)
expect(json['duration']).to eq(nil)
expect(json['closed']).to eq(topic.closed)
end
describe 'publishing topic to category in the future' do
it 'should be able to create the topic status update' do
SiteSetting.queue_jobs = true
post "/t/#{topic.id}/timer.json",
time: 24,
status_type: TopicTimer.types[3],
category_id: topic.category_id
expect(response).to be_success
topic_status_update = TopicTimer.last
expect(topic_status_update.topic).to eq(topic)
expect(topic_status_update.execute_at)
.to be_within(1.second).of(24.hours.from_now)
expect(topic_status_update.status_type)
.to eq(TopicTimer.types[:publish_to_category])
json = JSON.parse(response.body)
expect(json['category_id']).to eq(topic.category_id)
end
end
describe 'invalid status type' do
it 'should raise the right error' do
expect do
post "/t/#{topic.id}/timer.json",
time: 10,
status_type: 'something'
end.to raise_error(Discourse::InvalidParameters)
end
end
end
end
end

View File

@ -1,9 +1,9 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe "Users" do RSpec.describe UsersController do
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
describe "viewing a user" do describe '#show' do
it "should be able to view a user" do it "should be able to view a user" do
get "/u/#{user.username}" get "/u/#{user.username}"