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/models/webhook_spec.rb

67 lines
1.8 KiB

require 'spec_helper'
describe ::Webhooks::Webhook, type: :model do
subject { FactoryBot.build :webhook }
describe 'attributes' do
describe '#url' do
it 'accepts http' do
subject.url = 'http://foo.example.org'
expect(subject).to be_valid
end
it 'accepts http' do
subject.url = 'https://foo.example.org'
expect(subject).to be_valid
end
it 'accepts other schemas' do
subject.url = 'ftp://foo.example.org'
expect(subject).not_to be_valid
expect(subject.errors).to have_key(:url)
end
end
end
describe '#events' do
let(:events) { %w(work_package:updated work_package:created) }
before do
subject.event_names = events
subject.save!
end
it 'has an event association' do
expect(subject.events.count).to eq 2
expect(subject.event_names).to eq events
end
it 'finds the webhook with the saved events' do
expect(described_class.with_event_name(events[0]).first).to eq(subject)
expect(described_class.with_event_name(events[1]).first).to eq(subject)
end
end
describe '#projects' do
let(:project1) { FactoryBot.create :project }
before do
subject.all_projects = false
subject.projects << project1
subject.save!
end
it 'has an event association' do
expect(subject.projects.count).to eq 1
expect(subject.project_ids).to eq([project1.id])
expect(subject.enabled_for_project?(project1.id)).to be_truthy
expect(subject.enabled_for_project?(project1.id + 1)).to be_falsey
# When for all
subject.all_projects = true
expect(subject.enabled_for_project?(project1.id)).to be_truthy
expect(subject.enabled_for_project?(project1.id + 1)).to be_truthy
end
end
end