diff options
author | Thibaut Girka <thib@sitedethib.com> | 2018-05-11 18:12:42 +0200 |
---|---|---|
committer | Thibaut Girka <thib@sitedethib.com> | 2018-05-11 18:12:42 +0200 |
commit | 45fce0e496727cd1579c630c22592638341f78c6 (patch) | |
tree | ff72ae5b3482e4df7885e1e5a38c982529fd11c4 /spec/controllers/invites_controller_spec.rb | |
parent | 34142ab29c33104793afe3199f102d84b83b9b57 (diff) | |
parent | 352bae8c3ef2aca41de4aacb85d5e036a1d2bace (diff) |
Merge branch 'master' into glitch-soc/merge
Conflicts: app/controllers/invites_controller.rb app/serializers/initial_state_serializer.rb config/locales/ko.yml
Diffstat (limited to 'spec/controllers/invites_controller_spec.rb')
-rw-r--r-- | spec/controllers/invites_controller_spec.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb new file mode 100644 index 000000000..c5c6cb651 --- /dev/null +++ b/spec/controllers/invites_controller_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +describe InvitesController do + render_views + + before do + sign_in user + end + + describe 'GET #index' do + subject { get :index } + + let!(:invite) { Fabricate(:invite, user: user) } + + context 'when user is a staff' do + let(:user) { Fabricate(:user, moderator: true, admin: false) } + + it 'renders index page' do + expect(subject).to render_template :index + expect(assigns(:invites)).to include invite + expect(assigns(:invites).count).to eq 1 + end + end + + context 'when user is not a staff' do + let(:user) { Fabricate(:user, moderator: false, admin: false) } + + it 'returns 403' do + expect(subject).to have_http_status 403 + end + end + end + + describe 'POST #create' do + subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } } + + context 'when user is an admin' do + let(:user) { Fabricate(:user, moderator: false, admin: true) } + + it 'succeeds to create a invite' do + expect{ subject }.to change { Invite.count }.by(1) + expect(subject).to redirect_to invites_path + expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10) + end + end + + context 'when user is not an admin' do + let(:user) { Fabricate(:user, moderator: true, admin: false) } + + it 'returns 403' do + expect(subject).to have_http_status 403 + end + end + end + + describe 'DELETE #create' do + subject { delete :destroy, params: { id: invite.id } } + + let!(:invite) { Fabricate(:invite, user: user, expires_at: nil) } + let(:user) { Fabricate(:user, moderator: false, admin: true) } + + it 'expires invite' do + expect(subject).to redirect_to invites_path + expect(invite.reload).to be_expired + end + end +end |