+notmuch insert < $gen_msg_filename
+output=$(notmuch show --format=json id:$gen_msg_id)
+test_json_nodes <<<"$output" \
+ 'new_tags:[0][0][0]["tags"] = ["bar", "foo"]'
+
+test_begin_subtest "leading/trailing whitespace in new.tags is ignored"
+# avoid complications with leading spaces and "notmuch config"
+sed -i 's/^tags=.*$/tags= fu bar ; ; bar /' notmuch-config
+gen_insert_msg
+notmuch insert < $gen_msg_filename
+notmuch dump id:$gen_msg_id | sed 's/ --.*$//' > OUTPUT
+cat <<EOF >EXPECTED
+#notmuch-dump batch-tag:3 config,properties,tags
++bar +fu%20bar
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Tags starting with '-' in new.tags are forbidden"
+notmuch config set new.tags "-foo;bar"
+gen_insert_msg
+output=$(notmuch insert < $gen_msg_filename 2>&1)
+test_expect_equal "$output" "Error: tag '-foo' in new.tags: tag starting with '-' forbidden"
+
+test_begin_subtest "Invalid tags set exit code"
+test_expect_code 1 "notmuch insert < $gen_msg_filename 2>&1"
+
+notmuch config set new.tags $OLDCONFIG
+
+# DUPLICATE_MESSAGE_ID is not tested here, because it should actually pass.
+# pregenerate all of the test shims
+for code in FILE_NOT_EMAIL READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR OUT_OF_MEMORY XAPIAN_EXCEPTION; do
+ make_shim shim-$code <<EOF
+#include <notmuch.h>
+#include <stdio.h>
+notmuch_status_t
+notmuch_database_index_file (notmuch_database_t *notmuch,
+ const char *filename,
+ notmuch_indexopts_t *indexopts,
+ notmuch_message_t **message_ret)
+{
+ return NOTMUCH_STATUS_$code;
+}
+EOF
+done
+
+gen_insert_msg
+
+for code in FILE_NOT_EMAIL READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do
+ test_begin_subtest "EXIT_FAILURE when index_file returns $code"
+ test_expect_code 1 "notmuch_with_shim shim-$code insert < \"$gen_msg_filename\""
+
+ test_begin_subtest "success exit with --keep when index_file returns $code"
+ test_expect_code 0 "notmuch_with_shim shim-$code insert --keep < \"$gen_msg_filename\""
+done
+
+for code in OUT_OF_MEMORY XAPIAN_EXCEPTION ; do
+ test_begin_subtest "EX_TEMPFAIL when index_file returns $code"
+ test_expect_code 75 "notmuch_with_shim shim-$code insert < \"$gen_msg_filename\""
+
+ test_begin_subtest "success exit with --keep when index_file returns $code"
+ test_expect_code 0 "notmuch_with_shim shim-$code insert --keep < \"$gen_msg_filename\""
+done
+
+test_begin_subtest "insert converts mboxes on delivery"
+notmuch insert +unmboxed < "${TEST_DIRECTORY}"/corpora/indexing/mbox-attachment.eml
+output=$(notmuch count tag:unmboxed)
+test_expect_equal "${output}" 1