OpenProject is the leading open source project management software.
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.
openproject/modules/webhooks/spec/features/manage_webhooks_spec.rb

109 lines
3.9 KiB

require 'spec_helper'
describe 'Manage webhooks through UI', type: :feature, js: true do
before do
login_as user
end
context 'as regular user' do
let(:user) { FactoryBot.create :user }
it 'forbids accessing the webhooks management view' do
visit admin_outgoing_webhooks_path
expect(page).to have_text '[Error 403]'
end
end
context 'as admin' do
let(:user) { FactoryBot.create :admin }
let!(:project) { FactoryBot.create :project }
it 'allows the management flow' do
visit admin_outgoing_webhooks_path
expect(page).to have_selector('.generic-table--empty-row')
# Visit inline create
find('.wp-inline-create--add-link').click
SeleniumHubWaiter.wait
# Fill in elements
fill_in 'webhook_name', with: 'My webhook'
fill_in 'webhook_url', with: 'http://example.org'
# Check one event
find('.form--check-box[value="work_package:created"]').set true
# Create
click_on 'Create'
#
# 1st webhook created
#
expect(page).to have_selector('.flash.notice', text: I18n.t(:notice_successful_create))
expect(page).to have_selector('.webhooks--outgoing-webhook-row .name', text: 'My webhook')
webhook = ::Webhooks::Webhook.last
expect(webhook.event_names).to eq %w(work_package:created)
expect(webhook.all_projects).to be_truthy
expect(page).to have_selector('.webhooks--outgoing-webhook-row .enabled .icon-yes')
expect(page).to have_selector('.webhooks--outgoing-webhook-row .selected_projects', text: '(all)')
expect(page).to have_selector('.webhooks--outgoing-webhook-row .events', text: 'Work packages')
expect(page).to have_selector('.webhooks--outgoing-webhook-row .description', text: webhook.description)
SeleniumHubWaiter.wait
# Edit this webhook
find(".webhooks--outgoing-webhook-row-#{webhook.id} .icon-edit").click
SeleniumHubWaiter.wait
# Check the other event
find('.form--check-box[value="work_package:created"]').set false
find('.form--check-box[value="work_package:updated"]').set true
# Check a subset of projects
choose 'webhook_project_ids_selection'
find(".webhooks--selected-project-ids[value='#{project.id}']").set true
click_on 'Save'
expect(page).to have_selector('.flash.notice', text: I18n.t(:notice_successful_update))
expect(page).to have_selector('.webhooks--outgoing-webhook-row .name', text: 'My webhook')
webhook = ::Webhooks::Webhook.last
expect(webhook.event_names).to eq %w(work_package:updated)
expect(webhook.projects.all).to eq [project]
expect(webhook.all_projects).to be_falsey
SeleniumHubWaiter.wait
# Delete webhook
find(".webhooks--outgoing-webhook-row-#{webhook.id} .icon-delete").click
page.driver.browser.switch_to.alert.accept
expect(page).to have_selector('.flash.notice', text: I18n.t(:notice_successful_delete))
expect(page).to have_selector('.generic-table--empty-row')
end
context 'with existing webhook' do
let!(:webhook) { FactoryBot.create :webhook, name: 'testing' }
let!(:log) { FactoryBot.create :webhook_log, response_headers: { test: :foo }, webhook: webhook }
it 'shows the delivery' do
visit admin_outgoing_webhooks_path
SeleniumHubWaiter.wait
find('.webhooks--outgoing-webhook-row .name a', text: 'testing').click
expect(page).to have_selector('.on-off-status.-enabled')
expect(page).to have_selector('td.event_name', text: 'foo')
expect(page).to have_selector('td.response_code', text: '200')
# Open modal
SeleniumHubWaiter.wait
find('td.response_body a', text: 'Show').click
Epic/placeholder users frontend (#8977) * Add new button added to select-edit-field * Permissions Service + show button if canInviteUsersToProject * Permissions Service + show button if canInviteUsersToProject * Add initial invite user modal * Small change to invite user modal * Small use rmodal changes * Builds * Added invite user modal title translation * Changed modal to module * Figured out basic modal setup * Fixed build * Started adding option-list component * Adding reactive forms * vim * Reactive forms working for option-list * op-form-field is implemented, project-selection step works * Working on principal step * Basics of principal selection are done * Remove console logs * Added role step and role api bindings, updated directory structure * Added basics of message step * Added summary page * Add in-project check for selected principal * Add documentation for principal filters * Create modal-heading component * Fix principal emit * Add API calls to summary component * Work on translations, rework close fn * Added translations * Fixed styling * Add autofocus, fix typing * Improve typing * Add form-binding directive to fix form-field * Fixed typescript errors * Fix more translations * Codeclimate and TSLint errors * Failing test commented with TODO * Codeclimate fixes * Codeclimate fixes * Open invite user modal from user selection * Remove console and debugger calls * Opening modal from CreateAutocompleterComponent * Add new button added to select-edit-field * Permissions Service + show button if canInviteUsersToProject * Permissions Service + show button if canInviteUsersToProject * Codeclimate and TSLint errors * Failing test commented with TODO * Codeclimate fixes * Codeclimate fixes * Add initial invite user modal * Small change to invite user modal * Small use rmodal changes * Builds * Added invite user modal title translation * Changed modal to module * Figured out basic modal setup * Fixed build * Started adding option-list component * Adding reactive forms * vim * Reactive forms working for option-list * op-form-field is implemented, project-selection step works * Working on principal step * Basics of principal selection are done * Remove console logs * Added role step and role api bindings, updated directory structure * Added basics of message step * Added summary page * Add in-project check for selected principal * Add documentation for principal filters * Create modal-heading component * Fix principal emit * Add API calls to summary component * Work on translations, rework close fn * Added translations * Fixed styling * Add autofocus, fix typing * Improve typing * Add form-binding directive to fix form-field * Fixed typescript errors * Fix more translations * Refactor/op modal (#8978) * Initial modal refactoring * Updated modal imports * More modal module imports * Fix one more import * Fixed some styles * Fixed failing modal specs * Fix more spec selectors * Fix more specs * Updated backend modals * Improved code style * Fix export modal styles * Fix wiki export modal * Fix more specs * Fix webhooks modal * Added loading indicator back into modals * Fixed wp preview modal * InviteUserButtonComponent in * InviteUserButtonComponent in * InviteUserButtonComponent in MultiSelectEditFieldComponent and SelectEditFieldComponent * Remove extraneous module * Add Dragula import * Remove empty spec * Fix option-list component * Remove group creation from invite user modal * Write feature spec * Fix TS errors * Add Placeholder and Group apis to the frontend * Better api typing * Remove unnecessary interface * Remove group creation call Co-authored-by: Benjamin Bädorf <b.baedorf@openproject.com> Co-authored-by: Oliver Günther <mail@oliverguenther.de> Co-authored-by: Benjamin Bädorf <hello@benjaminbaedorf.eu>
4 years ago
page.within('.op-modal') do
expect(page).to have_selector('.webhooks--response-headers strong', text: 'test')
expect(page).to have_selector('.webhooks--response-body', text: log.response_body)
end
end
end
end
end