mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
Specs fix
This commit is contained in:
@@ -82,6 +82,11 @@ RSpec.describe Wikis::Admin::WikiProvidersController do
|
||||
let(:invalid_params) { { wikis_xwiki_provider: { name: "", url: "https://xwiki.example.com" } } }
|
||||
|
||||
context "with valid params" do
|
||||
before do
|
||||
allow(Wikis::XWikiProviders::FetchInstanceIdService).to receive(:new)
|
||||
.and_return(double(call: Dry::Monads::Success("xwiki-test-id")))
|
||||
end
|
||||
|
||||
it "creates a provider and redirects to the wizard" do
|
||||
expect { post :create, params: valid_params }
|
||||
.to change(Wikis::XWikiProvider, :count).by(1)
|
||||
|
||||
@@ -41,15 +41,22 @@ RSpec.describe Wikis::XWikiProviders::CreateService, type: :model do
|
||||
|
||||
before do
|
||||
allow(Wikis::XWikiProviders::FetchInstanceIdService).to receive(:new)
|
||||
.and_return(double(call: ServiceResult.success(result: "test-id")))
|
||||
.and_return(double(call: Dry::Monads::Success("test-id")))
|
||||
end
|
||||
end
|
||||
|
||||
describe "#call" do
|
||||
let(:current_user) { build_stubbed(:admin) }
|
||||
let(:service) { described_class.new(user: current_user) }
|
||||
let(:fetch_service) { instance_double(Wikis::XWikiProviders::FetchInstanceIdService) }
|
||||
|
||||
before do
|
||||
allow(Wikis::XWikiProviders::FetchInstanceIdService).to receive(:new).and_return(fetch_service)
|
||||
end
|
||||
|
||||
context "when XWiki responds successfully" do
|
||||
before { allow(fetch_service).to receive(:call).and_return(Dry::Monads::Success("xwiki-instance-abc123")) }
|
||||
|
||||
context "when XWiki responds successfully", vcr: "xwiki/instance_id" do
|
||||
it "stores the universal_identifier" do
|
||||
result = service.call(name: "My Wiki", url: "https://xwiki.local/")
|
||||
expect(result).to be_success
|
||||
@@ -57,8 +64,8 @@ RSpec.describe Wikis::XWikiProviders::CreateService, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
context "when XWiki is unreachable", :webmock do
|
||||
before { stub_request(:get, /openproject\/metadata/).to_return(status: 500) }
|
||||
context "when XWiki is unreachable" do
|
||||
before { allow(fetch_service).to receive(:call).and_return(Dry::Monads::Failure(:connection_error)) }
|
||||
|
||||
it "fails with a url error" do
|
||||
result = service.call(name: "My Wiki", url: "https://xwiki.local/")
|
||||
|
||||
@@ -44,8 +44,15 @@ RSpec.describe Wikis::XWikiProviders::UpdateService, type: :model do
|
||||
let(:current_user) { build_stubbed(:admin) }
|
||||
let(:provider) { create(:xwiki_provider, url: "https://old.example.com/", universal_identifier: "old-id") }
|
||||
let(:service) { described_class.new(user: current_user, model: provider) }
|
||||
let(:fetch_service) { instance_double(Wikis::XWikiProviders::FetchInstanceIdService) }
|
||||
|
||||
before do
|
||||
allow(Wikis::XWikiProviders::FetchInstanceIdService).to receive(:new).and_return(fetch_service)
|
||||
end
|
||||
|
||||
context "when the URL changes" do
|
||||
before { allow(fetch_service).to receive(:call).and_return(Dry::Monads::Success("xwiki-instance-abc123")) }
|
||||
|
||||
context "when the URL changes", vcr: "xwiki/instance_id" do
|
||||
it "re-fetches and updates the universal_identifier" do
|
||||
result = service.call(url: "https://xwiki.local/")
|
||||
expect(result).to be_success
|
||||
@@ -53,23 +60,17 @@ RSpec.describe Wikis::XWikiProviders::UpdateService, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
context "when the URL is unchanged", :webmock do
|
||||
let(:fetch_service_spy) { instance_spy(Wikis::XWikiProviders::FetchInstanceIdService) }
|
||||
|
||||
before do
|
||||
allow(Wikis::XWikiProviders::FetchInstanceIdService).to receive(:new).and_return(fetch_service_spy)
|
||||
end
|
||||
|
||||
context "when the URL is unchanged" do
|
||||
it "skips the fetch and preserves the universal_identifier" do
|
||||
result = service.call(name: "Renamed Wiki")
|
||||
expect(result).to be_success
|
||||
expect(fetch_service_spy).not_to have_received(:call)
|
||||
expect(fetch_service).not_to have_received(:call)
|
||||
expect(result.result.universal_identifier).to eq("old-id")
|
||||
end
|
||||
end
|
||||
|
||||
context "when XWiki is unreachable", :webmock do
|
||||
before { stub_request(:get, /openproject\/metadata/).to_return(status: 500) }
|
||||
context "when XWiki is unreachable" do
|
||||
before { allow(fetch_service).to receive(:call).and_return(Dry::Monads::Failure(:connection_error)) }
|
||||
|
||||
it "fails with a url error" do
|
||||
result = service.call(url: "https://xwiki.local/")
|
||||
|
||||
Reference in New Issue
Block a user