diff --git a/app/jobs/load_big_sam_job.rb b/app/jobs/load_big_sam_job.rb index ea4093a..b7c195b 100644 --- a/app/jobs/load_big_sam_job.rb +++ b/app/jobs/load_big_sam_job.rb @@ -6,7 +6,7 @@ class LoadBigSamJob < ApplicationJob queue_as :default def perform(*args) - FileUtils.touch('big_sam_loading') + FileUtils.touch('big_sam_loading') unless ENV['RAILS_ENV'] == 'test' logger.debug 'starting big sam load' big_sam = args.first diff --git a/app/models/letter.rb b/app/models/letter.rb index 0799ca7..3383f90 100644 --- a/app/models/letter.rb +++ b/app/models/letter.rb @@ -62,7 +62,7 @@ def all_entities private def check_published - self.published = repositories.any?(&:published) + self.published = repositories.any?(&:published) || letter_publisher.present? end def reindex_published diff --git a/spec/factories/letters.rb b/spec/factories/letters.rb index 75a4abf..104265b 100644 --- a/spec/factories/letters.rb +++ b/spec/factories/letters.rb @@ -46,6 +46,7 @@ factory :unpublished_letter do repositories { create_list(:repository, 1, published: false) } + letter_publisher { nil } end factory :new_letter do diff --git a/spec/jobs/load_big_sam_job_spec.rb b/spec/jobs/load_big_sam_job_spec.rb index 22e0f89..c9908c5 100644 --- a/spec/jobs/load_big_sam_job_spec.rb +++ b/spec/jobs/load_big_sam_job_spec.rb @@ -37,7 +37,7 @@ big_sam_file = fixture_file_upload('big_sam.xlsx') create(:big_sam, big_sam: big_sam_file) Letter.find_each(&:save) - expect(Letter.published.count).to eq(18) + expect(Letter.published.count).to eq(19) expect(Repository.count).to eq(7) expect(Repository.published.count).to eq(4) end diff --git a/spec/models/entity_spec.rb b/spec/models/entity_spec.rb index 619ed43..4b576c7 100644 --- a/spec/models/entity_spec.rb +++ b/spec/models/entity_spec.rb @@ -9,7 +9,7 @@ include ActionView::Helpers::SanitizeHelper include ActiveSupport::Inflector - it 'creates a hash of pubically avaliable letters where entity is mentioned' do + it 'creates a hash of publicly avaliable letters where entity is mentioned' do entity = create(:place_entity) create_list(:letter, 5) @@ -19,7 +19,8 @@ 4, date: Faker::Date.between(from: '1900-1-1', to: '1930-1-1'), repositories: create_list(:repository, 1, published: true), - entities: [entity] + entities: [entity], + letter_publisher: nil ) create_list( @@ -28,7 +29,8 @@ date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), repositories: create_list(:repository, 1, published: true), destinations: [entity], - recipients: create_list(:person_entity, 2) + recipients: create_list(:person_entity, 2), + letter_publisher: nil ) create_list( @@ -37,7 +39,8 @@ date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), repositories: create_list(:repository, 1, published: true), origins: [entity], - recipients: create_list(:person_entity, 2) + recipients: create_list(:person_entity, 2), + letter_publisher: nil ) create_list( @@ -46,7 +49,8 @@ date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), repositories: create_list(:repository, 1, published: true), entities: [entity], - recipients: create_list(:person_entity, 2) + recipients: create_list(:person_entity, 2), + letter_publisher: nil ) create_list( @@ -54,7 +58,8 @@ 2, date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), repositories: create_list(:repository, 1, published: false), - entities: [entity] + entities: [entity], + letter_publisher: nil ) create_list( @@ -63,7 +68,8 @@ date: Faker::Date.between(from: '1966-1-1', to: '2000-12-31'), repositories: create_list(:repository, 1, published: false), destinations: [entity], - recipients: create_list(:person_entity, 2) + recipients: create_list(:person_entity, 2), + letter_publisher: nil ) expect(entity.all_letters.count).to be < Letter.count diff --git a/spec/models/letter_spec.rb b/spec/models/letter_spec.rb index 0651534..9a28df5 100644 --- a/spec/models/letter_spec.rb +++ b/spec/models/letter_spec.rb @@ -8,32 +8,43 @@ :letter, 4, date: Faker::Date.between(from: '1900-1-1', to: '1930-1-1'), - repositories: create_list(:repository, 1, published: true) + repositories: create_list(:repository, 1, published: true), + letter_publisher: nil ) create_list( :letter, 6, date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), - repositories: create_list(:repository, 1, published: true) + repositories: create_list(:repository, 1, published: true), + letter_publisher: nil ) create_list( :letter, 2, date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), - repositories: create_list(:repository, 1, published: false) + repositories: create_list(:repository, 1, published: false), + letter_publisher: nil ) create_list( :letter, 3, date: Faker::Date.between(from: '1966-1-1', to: '2000-12-31'), + repositories: create_list(:repository, 1, published: false), + letter_publisher: nil + ) + + create_list( + :letter, + 2, + date: Faker::Date.between(from: '1957-1-1', to: '1965-12-31'), repositories: create_list(:repository, 1, published: false) ) - expect(described_class.count).to eq(15) - expect(described_class.published.count).to eq(10) + expect(described_class.count).to eq(17) + expect(described_class.published.count).to eq(12) end it 'has distinct mentions' do diff --git a/spec/models/published_entity_spec.rb b/spec/models/published_entity_spec.rb index 06e3086..2e7ef9c 100644 --- a/spec/models/published_entity_spec.rb +++ b/spec/models/published_entity_spec.rb @@ -28,6 +28,7 @@ entity.save! expect(described_class.search('*', where: { label: entity.label }).first.id).to eq(entity.id) entity.letters.first.repositories.first.update(published: false) + entity.letters.first.update(letter_publisher: nil) entity.letters.first.save entity.save! entity.reload diff --git a/spec/models/published_letter_spec.rb b/spec/models/published_letter_spec.rb index 248eeb9..6fc8e53 100644 --- a/spec/models/published_letter_spec.rb +++ b/spec/models/published_letter_spec.rb @@ -6,7 +6,7 @@ RSpec.describe PublishedLetter do it 'only returns published entities' do create_list(:published_letter, 5) - create_list(:letter, 3, published: false) + create_list(:letter, 3, published: false, letter_publisher: nil) expect(described_class.all.map(&:published)).to all(be true) expect(described_class.count).to be < Letter.count @@ -23,7 +23,7 @@ end it 'updates index when letter is unpublished' do - letter = create(:published_letter) + letter = create(:published_letter, letter_publisher: nil) expect(described_class.search('*', where: { label: letter.label }).first.id).to eq(letter.id) letter.repositories.first.update(published: false) letter.save! diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index db5cf7f..cd2c940 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Repository do it 'updates entity and letter published status' do repo = create(:repository, published: false) - create_list(:letter, 3, repositories: [repo]) + create_list(:letter, 3, repositories: [repo], letter_publisher: nil) expect(repo.letters.count).to eq(3) expect(repo.letters.map(&:published)).to all(be false) repo.letters.each do |letter| diff --git a/spec/requests/letters_spec.rb b/spec/requests/letters_spec.rb index 6d4ee50..f752285 100644 --- a/spec/requests/letters_spec.rb +++ b/spec/requests/letters_spec.rb @@ -16,10 +16,10 @@ expect(response).to be_successful end - it 'renders only plblically avaliable letters' do + it 'renders only publicly available letters' do create_list(:published_letter, 4) - create_list(:letter, 3, repositories: create_list(:repository, 1, published: false)) - create_list(:new_letter, 5, repositories: create_list(:repository, 1, published: false)) + create_list(:letter, 3, repositories: create_list(:repository, 1, published: false), letter_publisher: nil) + create_list(:new_letter, 5, repositories: create_list(:repository, 1, published: false), letter_publisher: nil) get "#{letters_url}.json", headers: valid_headers, as: :json expect(Letter.published.count).to eq(4) expect(json[:letters].count).to eq(4) @@ -163,15 +163,22 @@ expect(response).to be_successful end + it 'does not include private repositories when letter previously published' do + letter = create(:letter, repositories: [create(:repository, published: false)]) + expect(letter.published).to be(true) + get letter_url(letter), as: :json + expect(json[:repositories]).to be_nil + end + it 'renders unpublished when requested from beckettapi' do - letter = create(:letter) + letter = create(:letter, letter_publisher: nil) expect(letter.published).to be(false) get(letter_url(letter), headers: { HTTP_REFERER: 'beckettapi.ecdsdev.org' }) expect(response).to be_successful end it 'return 404 when unpublished and not requested from beckettapi' do - letter = create(:letter) + letter = create(:letter, letter_publisher: nil) expect(letter.published).to be(false) get letter_url(letter) # The recommendation causes the test to fail.