diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb index 1c465caa..a4a4f733 100644 --- a/app/controllers/articles_controller.rb +++ b/app/controllers/articles_controller.rb @@ -181,13 +181,9 @@ class ArticlesController < ApplicationController has_error = true end # Update articles - @updated_articles.map{|a| a.save or has_error=true } + @updated_articles.each {|a| a.save or has_error=true } # Add new articles - @new_articles.each do |article| - article.availability = true if @supplier.shared_sync_method == 'all_available' - article.availability = false if @supplier.shared_sync_method == 'all_unavailable' - article.save or has_error=true - end + @new_articles.each {|a| a.save or has_error=true } raise ActiveRecord::Rollback if has_error end diff --git a/app/models/supplier.rb b/app/models/supplier.rb index 3f772c66..02af340e 100644 --- a/app/models/supplier.rb +++ b/app/models/supplier.rb @@ -52,11 +52,16 @@ class Supplier < ApplicationRecord end end # Find any new articles, unless the import is manual - unless shared_sync_method == 'import' + if ['all_available', 'all_unavailable'].include?(shared_sync_method) + # build new articles shared_supplier .shared_articles .where.not(id: existing_articles.to_a) .find_each { |new_shared_article| new_articles << new_shared_article.build_new_article(self) } + # make them unavailable when desired + if shared_sync_method == 'all_unavailable' + new_articles.each {|new_article| new_article.availability = false } + end end return [updated_article_pairs, outlisted_articles, new_articles] end diff --git a/spec/models/supplier_spec.rb b/spec/models/supplier_spec.rb index 18c7c93c..6b0f4a88 100644 --- a/spec/models/supplier_spec.rb +++ b/spec/models/supplier_spec.rb @@ -73,8 +73,23 @@ describe Supplier do end end - # Setting articles to unavailable with sync method all_unavailable - # is handled in the articles controller, so no need to test it here. + context 'with sync method all_unavailable' do + let(:shared_sync_method) { 'all_unavailable' } + + it 'returns the expected articles' do + updated_article_pairs, outlisted_articles, new_articles = supplier.sync_all + + expect(updated_article_pairs).to_not be_empty + expect(updated_article_pairs[0][0].id).to eq updated_article.id + expect(updated_article_pairs[0][1].keys).to include :origin + + expect(outlisted_articles).to eq [removed_article] + + expect(new_articles).to_not be_empty + expect(new_articles[0].order_number).to eq new_shared_article.number + expect(new_articles[0].availability?).to be false + end + end end end