123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # frozen_string_literal: true
- require 'rails_helper'
- describe Settings::ApplicationsController do
- render_views
- let!(:user) { Fabricate(:user) }
- let!(:app) { Fabricate(:application, owner: user) }
- before do
- sign_in user, scope: :user
- end
- describe 'GET #index' do
- before do
- Fabricate(:application)
- get :index
- end
- it 'returns http success with private cache control headers', :aggregate_failures do
- expect(response).to have_http_status(200)
- expect(response.headers['Cache-Control']).to include('private, no-store')
- end
- end
- describe 'GET #show' do
- it 'returns http success' do
- get :show, params: { id: app.id }
- expect(response).to have_http_status(200)
- expect(assigns[:application]).to eql(app)
- end
- it 'returns 404 if you dont own app' do
- app.update!(owner: nil)
- get :show, params: { id: app.id }
- expect(response).to have_http_status 404
- end
- end
- describe 'GET #new' do
- it 'returns http success' do
- get :new
- expect(response).to have_http_status(200)
- end
- end
- describe 'POST #create' do
- context 'when success (passed scopes as a String)' do
- subject do
- post :create, params: {
- doorkeeper_application: {
- name: 'My New App',
- redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
- website: 'http://google.com',
- scopes: 'read write follow',
- },
- }
- end
- it 'creates an entry in the database', :aggregate_failures do
- expect { subject }.to change(Doorkeeper::Application, :count)
- expect(response).to redirect_to(settings_applications_path)
- end
- end
- context 'when success (passed scopes as an Array)' do
- subject do
- post :create, params: {
- doorkeeper_application: {
- name: 'My New App',
- redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
- website: 'http://google.com',
- scopes: %w(read write follow),
- },
- }
- end
- it 'creates an entry in the database', :aggregate_failures do
- expect { subject }.to change(Doorkeeper::Application, :count)
- expect(response).to redirect_to(settings_applications_path)
- end
- end
- context 'with failure request' do
- before do
- post :create, params: {
- doorkeeper_application: {
- name: '',
- redirect_uri: '',
- website: '',
- scopes: [],
- },
- }
- end
- it 'returns http success and renders form', :aggregate_failures do
- expect(response).to have_http_status(200)
- expect(response).to render_template(:new)
- end
- end
- end
- describe 'PATCH #update' do
- context 'when success' do
- subject do
- patch :update, params: {
- id: app.id,
- doorkeeper_application: opts,
- }
- response
- end
- let(:opts) do
- {
- website: 'https://foo.bar/',
- }
- end
- it 'updates existing application' do
- subject
- expect(app.reload.website).to eql(opts[:website])
- expect(response).to redirect_to(settings_application_path(app))
- end
- end
- context 'with failure request' do
- before do
- patch :update, params: {
- id: app.id,
- doorkeeper_application: {
- name: '',
- redirect_uri: '',
- website: '',
- scopes: [],
- },
- }
- end
- it 'returns http success and renders form', :aggregate_failures do
- expect(response).to have_http_status(200)
- expect(response).to render_template(:show)
- end
- end
- end
- describe 'destroy' do
- before do
- post :destroy, params: { id: app.id }
- end
- it 'redirects back to applications page and removes the app' do
- expect(response).to redirect_to(settings_applications_path)
- expect(Doorkeeper::Application.find_by(id: app.id)).to be_nil
- end
- end
- describe 'regenerate' do
- let(:token) { user.token_for_app(app) }
- it 'creates new token' do
- expect(token).to_not be_nil
- post :regenerate, params: { id: app.id }
- expect(user.token_for_app(app)).to_not eql(token)
- end
- end
- end
|