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/ldap_groups/spec/features/administration_spec.rb

70 lines
2.4 KiB

require_relative '../spec_helper'
describe 'LDAP group sync administration spec', type: :feature, js: true do
let(:admin) { FactoryBot.create :admin }
before do
login_as admin
visit ldap_groups_synchronized_groups_path
end
context 'without EE' do
it 'shows upsale' do
expect(page).to have_selector('.upsale-notification')
end
end
context 'with EE', with_ee: %i[ldap_groups] do
let!(:group) { FactoryBot.create :group, lastname: 'foo' }
let!(:auth_source) { FactoryBot.create :ldap_auth_source, name: 'ldap' }
it 'allows synced group administration flow' do
expect(page).to have_no_selector('.upsale-notification')
# Create group
find('.button', text: I18n.t('ldap_groups.synchronized_groups.singular')).click
select 'ldap', from: 'synchronized_group_auth_source_id'
select 'foo', from: 'synchronized_group_group_id'
fill_in 'synchronized_group_dn', with: 'cn=foo,ou=groups,dc=example,dc=com'
click_on 'Create'
expect(page).to have_selector('.flash.notice', text: I18n.t(:notice_successful_create))
expect(page).to have_selector('td.dn', text: 'cn=foo,ou=groups,dc=example,dc=com')
expect(page).to have_selector('td.auth_source', text: 'ldap')
expect(page).to have_selector('td.group', text: 'foo')
expect(page).to have_selector('td.users', text: '0')
# Show entry
find('td.dn a').click
expect(page).to have_selector '.generic-table--empty-row'
# Check created group
sync = ::LdapGroups::SynchronizedGroup.last
expect(sync.group_id).to eq(group.id)
expect(sync.auth_source_id).to eq(auth_source.id)
expect(sync.dn).to eq 'cn=foo,ou=groups,dc=example,dc=com'
# Assume we have a membership
sync.users.create user_id: admin.id
visit ldap_groups_synchronized_group_path(sync)
expect(page).to have_selector 'td.user', text: admin.name
memberships = sync.users.pluck(:id)
visit ldap_groups_synchronized_groups_path
expect_angular_frontend_initialized
find('.buttons a', text: 'Delete').click
find('.danger-zone--verification input').set 'cn=foo,ou=groups,dc=example,dc=com'
sleep 2
click_on 'Delete'
expect(page).to have_selector('.flash.notice', text: I18n.t(:notice_successful_delete))
expect(page).to have_selector '.generic-table--empty-row'
expect(::LdapGroups::Membership.where(id: memberships)).to be_empty
end
end
end