# == Schema Information # # Table name: users # # id :integer not null, primary key # created_at :datetime # updated_at :datetime # remember_created_at :datetime # admin :boolean default(FALSE) # dagschotel_id :integer # avatar_file_name :string # avatar_content_type :string # avatar_file_size :integer # avatar_updated_at :datetime # orders_count :integer default(0) # koelkast :boolean default(FALSE) # name :string # private :boolean default(FALSE) # frecency :integer default(0), not null # quickpay_hidden :boolean # # quickpay_user GET /users/:id/quickpay(.:format) users#quickpay # edit_dagschotel_user GET /users/:id/dagschotel/edit(.:format) users#edit_dagschotel # edit_user GET /users/:id/edit(.:format) users#edit # user GET /users/:id(.:format) users#show # PATCH /users/:id(.:format) users#update # PUT /users/:id(.:format) users#update # describe UsersController, type: :controller do before :each do @user = create :user sign_in @user end ########## # SHOW # ########## describe 'GET show' do before :each do get :show, id: @user end it 'should be successful' do expect(response).to have_http_status(200) end it 'should render the user' do expect(response).to render_template(:show) end it 'should load the correct user' do expect(assigns(:user)).to eq(@user) end end ############ # UPDATE # ############ describe 'PUT update' do it 'should load the correct user' do put :update, id: @user, user: attributes_for(:user) expect(assigns(:user)).to eq(@user) end context 'successful' do it 'should update privacy' do new_private = !(@user.private) put :update, id: @user, user: { private: new_private } expect(@user.reload.private).to be new_private expect(flash[:success]).to be_present end it 'should update dagschotel' do product = create :product put :update, id: @user, user: { dagschotel_id: product.id } expect(@user.reload.dagschotel).to eq(product) end it 'should accept real images' do file = fixture_file_upload('files/real-image.png', 'image/png') put :update, id: @user, user: { avatar: file } expect(flash[:success]).to be_present end end context 'danger zone' do it 'should warn for NOPs' do put :update, id: @user, user: {} expect(flash[:notice]).to be_present end it 'should not accept unreal images' do file = fixture_file_upload('files/unreal-image.svg', 'image/svg+xml') put :update, id: @user, user: { avatar: file } expect(flash[:error]).to be_present end end end ##################### # EDIT_DAGSCHOTEL # ##################### describe 'GET edit_dagschotel' do it 'should be successful' do expect(response).to have_http_status(200) end it 'should render the page' do get :edit_dagschotel, id: @user expect(response).to render_template(:edit_dagschotel) end end ############## # QUICKPAY # ############## describe 'GET quickpay' do describe 'successful' do before :each do balance = 12345 stub_request(:get, /.*/).to_return(status: 200, body: JSON.dump({ balance: balance })) @dagschotel = create :product, stock: 20 @user.update_attribute(:dagschotel, @dagschotel) end it 'should be successful' do expect(response).to have_http_status(200) end it 'should make an order' do expect{ get :quickpay, id: @user }.to change{ @user.reload.orders_count }.by(1) end describe 'order' do before :each do get :quickpay, id: @user @order = @user.orders.last end it 'should contain 1 orderitem' do expect(@order.order_items.size).to eq 1 end it 'should have an orderitem with count 1' do expect(@order.order_items.first.count).to eq 1 end it 'should contain an orderitem for @dagschotel' do expect(@order.order_items.first.product).to eq @dagschotel end end end # Some weird redirects happen here and I don't know what mock thing is # setting them up. # describe 'failed' do # before :each do # @dagschotel = create :product, stock: 0 # @user.update_attribute(:dagschotel, @dagschotel) # end # it 'should fail' do # xhr :get, :quickpay, id: @user # $stderr.puts response.body # expect(response).to have_http_status(422) # end # it 'should not make an order' do # expect{ # get :quickpay, id: @user # }.to_not change{ @user.reload.orders_count } # end # end end end