You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/spec/requests/api_missing_endpoints_spec.rb

103 lines
4.1 KiB

# frozen_string_literal: true
describe 'Additional API Endpoints' do
let(:account) { create(:account, :with_testing_account) }
let(:author) { create(:user, account:) }
let(:token) { author.access_token.token }
describe 'GET /api/user' do
it 'returns the current user' do
get '/api/user', headers: { 'x-auth-token': token }
expect(response).to have_http_status(:ok)
expect(response.parsed_body['id']).to eq(author.id)
expect(response.parsed_body['email']).to eq(author.email)
expect(response.parsed_body['first_name']).to eq(author.first_name)
end
it 'returns unauthorized without a token' do
get '/api/user'
expect(response).to have_http_status(:unauthorized)
end
end
describe 'POST /api/templates/:id/clone' do
it 'clones a template' do
template = create(:template, account:, author:, folder: create(:template_folder, account:))
expect do
post "/api/templates/#{template.id}/clone", headers: { 'x-auth-token': token },
params: { name: 'Cloned Template' }.to_json
end.to change(Template, :count)
expect(response).to have_http_status(:ok)
expect(response.parsed_body['name']).to eq('Cloned Template')
expect(response.parsed_body['id']).not_to eq(template.id)
end
end
describe 'GET /api/submissions/:id/documents' do
it 'returns the documents for a submission' do
template = create(:template, account:, author:)
submission = create(:submission, template:, created_by_user: author)
submitter = create(:submitter, submission:, uuid: template.submitters.first['uuid'],
account:, completed_at: Time.current)
blob = ActiveStorage::Blob.create_and_upload!(
io: Rails.root.join('spec/fixtures/sample-document.pdf').open,
filename: 'sample-document.pdf',
content_type: 'application/pdf'
)
ActiveStorage::Attachment.create!(blob:, name: :documents, record: submitter)
get "/api/submissions/#{submission.id}/documents", headers: { 'x-auth-token': token }
expect(response).to have_http_status(:ok)
expect(response.parsed_body['id']).to eq(submission.id)
expect(response.parsed_body['documents']).to be_an(Array)
end
end
describe 'GET /api/events/form/:type' do
it 'returns form events for completed submitters' do
template = create(:template, account:, author:, only_field_types: %w[text])
submission = create(:submission, template:, created_by_user: author)
create(:submitter, submission:, uuid: template.submitters.first['uuid'],
account:, completed_at: Time.current)
get '/api/events/form/completed', headers: { 'x-auth-token': token }
expect(response).to have_http_status(:ok)
expect(response.parsed_body['data']).to be_an(Array)
expect(response.parsed_body['data'].first['event_type']).to eq('form.completed')
end
end
describe 'GET /api/events/submission/:type' do
it 'returns submission events for completed submissions' do
template = create(:template, account:, author:, only_field_types: %w[text])
submission = create(:submission, template:, created_by_user: author)
create(:submitter, submission:, uuid: template.submitters.first['uuid'],
account:, completed_at: Time.current)
get '/api/events/submission/completed', headers: { 'x-auth-token': token }
expect(response).to have_http_status(:ok)
expect(response.parsed_body['data']).to be_an(Array)
expect(response.parsed_body['data'].first['event_type']).to eq('submission.completed')
end
end
describe 'POST /api/tools/merge' do
it 'merges PDFs' do
pdf_content = Base64.encode64(File.read(Rails.root.join('spec/fixtures/sample-document.pdf')))
post '/api/tools/merge', headers: { 'x-auth-token': token },
params: { files: [pdf_content, pdf_content] }.to_json
expect(response).to have_http_status(:ok)
expect(response.parsed_body['data']).to be_present
end
end
end