@@ -292,14 +292,41 @@ def upload_file!(name, ext='csv')
292292 end
293293 end
294294
295- context "with invalid data insert" do
295+ context "with invalid data insert on DB constraint" do
296+ # :name field has an uniq index
296297 it "should render error" do
297298 upload_file! ( :authors_invalid_db )
298299 expect ( page ) . to have_content "Error:"
299300 expect ( Author . count ) . to eq ( 0 )
300301 end
301302 end
302303
304+ context "with invalid data insert on model validation" do
305+ let ( :options ) { { validate : true } }
306+
307+ before do
308+ Author . create! ( name : "John" , last_name : "Doe" )
309+ end
310+
311+ it "should render both successful and failed message" do
312+ upload_file! ( :authors_invalid_model )
313+ expect ( page ) . to have_content "Failed to import 1 author"
314+ expect ( page ) . to have_content "Successfully imported 1 author"
315+ expect ( Author . count ) . to eq ( 2 )
316+ end
317+
318+ context "use batch_transaction to make transaction work on model validation" do
319+ let ( :options ) { { validate : true , batch_transaction : true } }
320+
321+ it "should render only the failed message" do
322+ upload_file! ( :authors_invalid_model )
323+ expect ( page ) . to have_content "Failed to import 1 author"
324+ expect ( page ) . to_not have_content "Successfully imported"
325+ expect ( Author . count ) . to eq ( 1 )
326+ end
327+ end
328+ end
329+
303330 context "with invalid records" do
304331 context "with validation" do
305332 it "should render error" do
@@ -402,4 +429,4 @@ def upload_file!(name, ext='csv')
402429
403430 end
404431
405- end
432+ end
0 commit comments