Convert admin/invites controller specs to system specs (#32450)
				
					
				
			This commit is contained in:
		
							parent
							
								
									9e8f099d38
								
							
						
					
					
						commit
						c40cd79c4d
					
				| @ -1,4 +1,4 @@ | |||||||
| %tr | %tr{ id: dom_id(invite) } | ||||||
|   %td |   %td | ||||||
|     .input-copy |     .input-copy | ||||||
|       .input-copy__wrapper |       .input-copy__wrapper | ||||||
|  | |||||||
| @ -1,59 +0,0 @@ | |||||||
| # frozen_string_literal: true |  | ||||||
| 
 |  | ||||||
| require 'rails_helper' |  | ||||||
| 
 |  | ||||||
| RSpec.describe Admin::InvitesController do |  | ||||||
|   render_views |  | ||||||
| 
 |  | ||||||
|   let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } |  | ||||||
| 
 |  | ||||||
|   before do |  | ||||||
|     sign_in user, scope: :user |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe 'GET #index' do |  | ||||||
|     subject { get :index, params: { available: true } } |  | ||||||
| 
 |  | ||||||
|     let!(:invite) { Fabricate(:invite) } |  | ||||||
| 
 |  | ||||||
|     it 'renders index page' do |  | ||||||
|       expect(subject).to render_template :index |  | ||||||
|       expect(response.body) |  | ||||||
|         .to include(invite.code) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe 'POST #create' do |  | ||||||
|     subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } } |  | ||||||
| 
 |  | ||||||
|     it 'succeeds to create a invite' do |  | ||||||
|       expect { subject }.to change(Invite, :count).by(1) |  | ||||||
|       expect(subject).to redirect_to admin_invites_path |  | ||||||
|       expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10) |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe 'DELETE #destroy' do |  | ||||||
|     subject { delete :destroy, params: { id: invite.id } } |  | ||||||
| 
 |  | ||||||
|     let!(:invite) { Fabricate(:invite, expires_at: nil) } |  | ||||||
| 
 |  | ||||||
|     it 'expires invite' do |  | ||||||
|       expect(subject).to redirect_to admin_invites_path |  | ||||||
|       expect(invite.reload).to be_expired |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   describe 'POST #deactivate_all' do |  | ||||||
|     before { Fabricate(:invite, expires_at: nil) } |  | ||||||
| 
 |  | ||||||
|     it 'expires all invites, then redirects to admin_invites_path' do |  | ||||||
|       expect { post :deactivate_all } |  | ||||||
|         .to change { Invite.exists?(expires_at: nil) } |  | ||||||
|         .from(true) |  | ||||||
|         .to(false) |  | ||||||
| 
 |  | ||||||
|       expect(response).to redirect_to admin_invites_path |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| end |  | ||||||
							
								
								
									
										63
									
								
								spec/system/admin/invites_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								spec/system/admin/invites_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | RSpec.describe 'Admin Invites' do | ||||||
|  |   describe 'Invite interaction' do | ||||||
|  |     let!(:invite) { Fabricate(:invite, expires_at: nil) } | ||||||
|  | 
 | ||||||
|  |     let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } | ||||||
|  | 
 | ||||||
|  |     before { sign_in user } | ||||||
|  | 
 | ||||||
|  |     it 'allows invite listing and creation' do | ||||||
|  |       visit admin_invites_path | ||||||
|  | 
 | ||||||
|  |       expect(page) | ||||||
|  |         .to have_title(I18n.t('admin.invites.title')) | ||||||
|  |       for_invite(invite) do | ||||||
|  |         expect(find('input').value) | ||||||
|  |           .to include(invite.code) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       select I18n.t('invites.max_uses', count: 10), from: max_use_field | ||||||
|  | 
 | ||||||
|  |       expect { generate_invite } | ||||||
|  |         .to change(Invite, :count).by(1) | ||||||
|  |       expect(user.invites.last) | ||||||
|  |         .to have_attributes(max_uses: 10) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it 'allows invite expiration' do | ||||||
|  |       visit admin_invites_path | ||||||
|  | 
 | ||||||
|  |       for_invite(invite) do | ||||||
|  |         expect { expire_invite } | ||||||
|  |           .to change { invite.reload.expired? }.from(false).to(true) | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it 'allows invite deactivation' do | ||||||
|  |       visit admin_invites_path | ||||||
|  | 
 | ||||||
|  |       expect { click_on I18n.t('admin.invites.deactivate_all') } | ||||||
|  |         .to change { Invite.exists?(expires_at: nil) }.from(true).to(false) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def for_invite(invite, &block) | ||||||
|  |       within("#invite_#{invite.id}", &block) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def expire_invite | ||||||
|  |       click_on I18n.t('invites.delete') | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def generate_invite | ||||||
|  |       click_on I18n.t('invites.generate') | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def max_use_field | ||||||
|  |       I18n.t('simple_form.labels.defaults.max_uses') | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user