Signed-off-by: Michal Sojka <sojk...@fel.cvut.cz> --- test/t0006-maildir.sh | 208 +++++++++++++++++++++++++++++++++++++++++++++++++ test/test-lib.sh | 7 +- 2 files changed, 213 insertions(+), 2 deletions(-) create mode 100755 test/t0006-maildir.sh
diff --git a/test/t0006-maildir.sh b/test/t0006-maildir.sh new file mode 100755 index 0000000..03a2a35 --- /dev/null +++ b/test/t0006-maildir.sh @@ -0,0 +1,208 @@ +#!/bin/bash + +test_description="Test maildir mailstore" + +. ./test-lib.sh + +filter_output() { + grep -v -E -e "$NOTMUCH_IGNORED_OUTPUT_REGEXP" | sed -e "$NOTMUCH_THREAD_ID_SQUELCH" +} + +filter_show() { + sed -e 's/, /,\n/g'|sed -e "s|${MAIL_DIR}/||" -e '/^"tags"/d' + echo +} + +cat >> "$NOTMUCH_CONFIG" <<EOF +[mailstore] +type=maildir +EOF + +test_expect_success "No new mail" ' +execute_expecting new "No new mail." +' +cat > expected <<EOF +Added 1 new message to the database. +EOF +test_expect_success "Add a message, no flags" ' +generate_message [subject]="\"test message\"" [date]="\"Sat, 01 Jan 2000 12:00:00 -0000\"" [filename]="\"msg-001:2,\"" && +notmuch new | filter_output > actual && +test_cmp expected actual +#emacs --eval "(gdb \"gdb --annotate=3 --args $(which notmuch) new\")" +' +cat > expected <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message (inbox unread) +EOF +test_expect_success 'Search for the message' ' +notmuch search tag:inbox and tag:unread | filter_output > actual && +test_cmp expected actual +' +cat > expected <<EOF +No new mail. Detected 1 file rename. +EOF +test_expect_success 'Add seen flag' ' +mv "${gen_msg_filename}" "${gen_msg_filename}S" && +increment_mtime "$(dirname "${gen_msg_filename}")" && +notmuch new | filter_output > actual && +test_cmp expected actual +' +cat > expected <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message (inbox) +EOF +test_expect_success 'Check that tags were updated' ' +notmuch search tag:inbox and not tag:unread | filter_output > actual && +test_cmp expected actual +' +cat > expected <<EOF +Added 1 new message to the database. +EOF +test_expect_success "Add a seen message" ' +generate_message [subject]="\"test message 2\"" [date]="\"Sat, 01 Jan 2000 12:00:00 -0000\"" [filename]="\"msg-002:2,S\"" && +notmuch new | filter_output > actual && +test_cmp expected actual +' +cat > expected <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message (inbox) +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message 2 (inbox) +EOF +test_expect_success 'Check that the seen message is not tagged unread' ' +notmuch search tag:inbox and not tag:unread | filter_output > actual && +test_cmp expected actual +' +test_expect_success 'Tag the seen messages as replied' ' +notmuch tag +replied -inbox tag:inbox and not tag:unread +' + +cat > expected <<EOF +msg-001:2,RS +msg-002:2,RS +EOF +test_expect_success 'Check that R flag was added' ' +ls -1 "${MAIL_DIR}" > actual && +test_cmp expected actual +' +cat <<EOF > show-expected +[[[{"id": "msg-...@notmuch-test-suite", +"match": true, +"filename": "msg-001:2,RS", +"headers": {"Subject": "test message", +"From": "Notmuch Test Suite <test_su...@notmuchmail.org>", +"To": "Notmuch Test Suite <test_su...@notmuchmail.org>", +"Cc": "", +"Bcc": "", +"Date": "Sat, +01 Jan 2000 12:00:00 -0000"}, +"body": [{"id": 1, +"content-type": "text/plain", +"content": "This is just a test message at msg-001:2,\n"}]}, +[]]]] +EOF + +test_expect_success 'Renamed message can be shown without running notmuch new' ' +notmuch show --format=json id:msg-...@notmuch-test-suite | filter_show > show-actual && +test_cmp show-expected show-actual +' + +test_expect_success 'Test that we can reply to the renamed message' ' +notmuch reply id:msg-...@notmuch-test-suite +' + +echo "No new mail." > expected +test_expect_success 'No rename should be detected by notmuch new' ' +increment_mtime "$(dirname "${gen_msg_filename}")" && +notmuch new > actual && +test_cmp expected actual +' +test_expect_success "Add a message to new/ without info" ' +generate_message [subject]="\"test message 3\"" [date]="\"Sat, 01 Jan 2000 12:00:00 -0000\"" [dir]=new && +notmuch new | filter_output > actual && +test_cmp - actual <<EOF +Added 1 new message to the database. +EOF +' +test_expect_success "Check that the message has inbox and unread tags" ' +notmuch search tag:inbox and tag:unread | filter_output > actual && +test_cmp - actual <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message 3 (inbox unread) +EOF +' +test_expect_success "Check that the message was not renamed" ' +ls "${MAIL_DIR}/new" > actual && +test_cmp - actual <<EOF +msg-003 +EOF +' +test_expect_success 'Removing of unread tag should fail without cur/' ' +test_must_fail notmuch tag -unread tag:inbox and tag:unread +' +test_expect_success "Check that the tags were not changed" ' +notmuch search tag:inbox and tag:unread | filter_output > actual && +test_cmp - actual <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message 3 (inbox unread) +EOF +' + +# notmuch new is not necessary here, but we run it in order to check +# for 'no rename' later (*). +test_expect_success 'Create cur/ and let notmuch know about it' ' +mkdir "$MAIL_DIR/cur" && +notmuch new +' +test_expect_success 'Removing of unread tag should pass with cur/' ' +notmuch tag -unread tag:inbox and tag:unread +' +test_expect_success 'Check that the message was moved to cur/' '\ +ls "$MAIL_DIR/cur" > actual && +test_cmp - actual <<EOF +msg-003:2,S +EOF +' +test_expect_success 'No rename should be detected by notmuch new' ' +increment_mtime "$MAIL_DIR/cur" && +notmuch new > actual && +test_cmp - actual <<EOF +No new mail. +EOF +' +# (*) If notmuch new was not run we've got "Processed 1 file in almost +# no time" here. The reason is that removing unread tag in a previous +# test created directory document in the database but this document +# was not linked as subdirectory of $MAIL_DIR. Therefore notmuch new +# could not reach the cur/ directory and its files in it during +# recurive traversal. +test_expect_success 'Remove info from file name' ' +mv "$MAIL_DIR/cur/msg-003:2,S" "$MAIL_DIR/cur/msg-003" && +increment_mtime "$MAIL_DIR/cur" && +notmuch new | filter_output > actual +test_cmp - actual <<EOF +No new mail. Detected 1 file rename. +EOF +' +test_expect_success "Check that removing info did not change tags" ' +notmuch search tag:inbox | filter_output > actual && +test_cmp - actual <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message 3 (inbox) +EOF +' +test_expect_success "Add a message to fakenew/ without info" ' +generate_message [subject]="\"test message 4\"" [date]="\"Sat, 01 Jan 2000 12:00:00 -0000\"" [dir]=fakenew && +notmuch new | filter_output > actual && +test_cmp - actual <<EOF +Added 1 new message to the database. +EOF +' +test_expect_success "Check that the message has inbox and unread tags" ' +notmuch search tag:inbox and tag:unread | filter_output > actual && +test_cmp - actual <<EOF +thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; test message 4 (inbox unread) +EOF +' +test_expect_success 'Removing of unread tag should leave the message in fakenew/' ' +notmuch tag -unread tag:inbox and tag:unread && +ls "$MAIL_DIR/fakenew" > actual && +test_cmp - actual <<EOF +msg-004:2,S +EOF +' + +test_done diff --git a/test/test-lib.sh b/test/test-lib.sh index 5417fe7..917631b 100755 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -257,8 +257,11 @@ generate_message () local additional_headers gen_msg_cnt=$((gen_msg_cnt + 1)) - gen_msg_name=msg-$(printf "%03d" $gen_msg_cnt) - gen_msg_id="${gen_msg_na...@notmuch-test-suite" + if [ -z "${template[filename]}" ]; then + template[filename]="msg-$(printf "%03d" $gen_msg_cnt)" + fi + gen_msg_name=${template[filename]} + gen_msg_id="${gen_msg_name%:2,*...@notmuch-test-suite" if [ -z "${template[dir]}" ]; then gen_msg_filename="${MAIL_DIR}/$gen_msg_name" -- 1.7.0.2 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch