<% if @provider.file_name_prefix.present? %>
diff --git a/spec/jobs/documents_sync_job_spec.rb b/spec/jobs/documents_sync_job_spec.rb
index 46df0943..a0cf804a 100644
--- a/spec/jobs/documents_sync_job_spec.rb
+++ b/spec/jobs/documents_sync_job_spec.rb
@@ -1,13 +1,11 @@
require "rails_helper"
RSpec.describe DocumentsSyncJob, type: :job do
- let(:topic) { create(:topic, :with_documents) }
- let(:provider) { topic.provider }
+ let(:provider) { create(:provider, file_name_prefix: "MyPrefix") }
+ let(:topic) { create(:topic, :with_documents, provider:) }
let(:document) { topic.documents.first }
let(:file_name) { document.filename }
- before { provider.update(file_name_prefix: "MyPrefix") }
-
describe "#perform" do
let(:file_worker) { instance_double(FileWorker) }
diff --git a/spec/models/provider_spec.rb b/spec/models/provider_spec.rb
new file mode 100644
index 00000000..1d828318
--- /dev/null
+++ b/spec/models/provider_spec.rb
@@ -0,0 +1,66 @@
+# == Schema Information
+#
+# Table name: providers
+# Database name: primary
+#
+# id :bigint not null, primary key
+# file_name_prefix :string
+# name :string
+# provider_type :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# old_id :integer
+#
+# Indexes
+#
+# index_providers_on_old_id (old_id) UNIQUE
+#
+require "rails_helper"
+
+RSpec.describe Provider, type: :model do
+ let(:provider) { create(:provider) }
+ subject { provider }
+
+ describe "validations" do
+ it { should validate_presence_of(:provider_type) }
+ it { should validate_presence_of(:name) }
+ it { should validate_uniqueness_of(:name) }
+
+ describe "#file_name_prefix_may_be_changed" do
+ context "when a provider has topics" do
+ let!(:topic) { create(:topic, provider: provider) }
+
+ it "returns an error" do
+ provider.file_name_prefix = "updated_prefix"
+ expect(provider).not_to be_valid
+ expect(provider.errors[:file_name_prefix]).to match_array(
+ "can't be changed as provider has associated topics and so file names are established"
+ )
+ end
+ end
+
+ context "when a provider has no topics" do
+ it "does not return an error" do
+ provider.file_name_prefix = "updated_prefix"
+ expect(provider).to be_valid
+ end
+ end
+ end
+ end
+
+ describe "#has_topics?" do
+ context "when a provider has topics" do
+ let!(:topic) { create(:topic, provider: provider) }
+
+ it "returns true" do
+ expect(provider.has_topics?).to be true
+ end
+ end
+
+ context "when a provider has no topics" do
+ it "returns false" do
+ expect(provider.has_topics?).to be false
+ end
+ end
+ end
+end
diff --git a/spec/views/providers/edit.html.erb_spec.rb b/spec/views/providers/edit.html.erb_spec.rb
index fc4bf133..b49834f3 100644
--- a/spec/views/providers/edit.html.erb_spec.rb
+++ b/spec/views/providers/edit.html.erb_spec.rb
@@ -16,4 +16,28 @@
assert_select "input[type='submit'][value='Update Provider']"
end
end
+
+ context "when the provider has associated topics" do
+ before { create(:topic, provider: provider) }
+
+ it "tells the user that the File name prefix can't be changed" do
+ render
+
+ assert_select "form[action=?][method=?]", provider_path(provider), "post" do
+ assert_select "input[name=?][disabled]", "provider[file_name_prefix]"
+ end
+
+ assert_select "div#file-name-prefix-uneditable-notice"
+ end
+ end
+
+ context "when the provider that has no associated topics" do
+ it "has the File name prefix field" do
+ render
+
+ assert_select "form[action=?][method=?]", provider_path(provider), "post" do
+ assert_select "input[name=?]", "provider[file_name_prefix]"
+ end
+ end
+ end
end
diff --git a/spec/views/providers/new.html.erb_spec.rb b/spec/views/providers/new.html.erb_spec.rb
index 0088e81e..ab48436a 100644
--- a/spec/views/providers/new.html.erb_spec.rb
+++ b/spec/views/providers/new.html.erb_spec.rb
@@ -14,6 +14,7 @@
assert_select "form[action=?][method=?]", providers_path, "post" do
assert_select "input[name=?]", "provider[name]"
assert_select "input[name=?]", "provider[provider_type]"
+ assert_select "input[name=?]", "provider[file_name_prefix]"
assert_select "input[type='submit'][value='Create Provider']"
end
end