#!/bin/bash test_description="maildir synchronization" . ./test-lib.sh # Much easier to examine differences if the "notmuch show # --format=json" output includes some newlines. Also, need to avoid # including the local value of MAIL_DIR in the result. filter_show_json() { sed -e 's/, /,\n/g' | sed -e "s|${MAIL_DIR}/|MAIL_DIR/|" echo } cat >> "$NOTMUCH_CONFIG" <", "To": "Notmuch Test Suite ", "Cc": "", "Bcc": "", "Date": "Tue, 05 Jan 2001 15:43:57 -0000"}, "body": [{"id": 1, "content-type": "text/plain", "content": "This is just a test message (#3)\n"}]}, []]]]' test_expect_success 'notmuch reply works with renamed file (without notmuch new)' 'notmuch reply id:${gen_msg_id}' test_begin_subtest "notmuch new detects no file rename after tag->flag synchronization" increment_mtime "$(dirname ${gen_msg_filename})" output=$(NOTMUCH_NEW) test_expect_equal "$output" "No new mail." test_begin_subtest "When read, message moved from new to cur" add_message [subject]='"Message to move to cur"' [date]='"Sat, 01 Jan 2000 12:00:00 -0000"' [filename]='message-to-move-to-cur' [dir]=new notmuch tag -unread subject:"Message to move to cur" output=$(cd "$MAIL_DIR/cur"; ls message-to-move*) test_expect_equal "$output" "message-to-move-to-cur:2,S" test_begin_subtest "No rename should be detected by notmuch new" increment_mtime "$MAIL_DIR/cur" output=$(NOTMUCH_NEW) test_expect_equal "$output" "No new mail." # (*) 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. # # XXX: The above sounds like a bug that should be fixed. If notmuch is # creating new directories in the mail store, then it should be # creating all necessary database state for those directories. test_begin_subtest "Removing info from filename leaves tags unchanged" add_message [subject]='"Message to lose maildir info"' [filename]='message-to-lose-maildir-info' [dir]=cur notmuch tag -unread subject:"Message to lose maildir info" mv "$MAIL_DIR/cur/message-to-lose-maildir-info:2,S" "$MAIL_DIR/cur/message-without-maildir-info" increment_mtime "$MAIL_DIR/cur" output=$(NOTMUCH_NEW) output+=" " output+=$(notmuch search subject:"Message to lose maildir info" | notmuch_search_sanitize) test_expect_equal "$output" "No new mail. Detected 1 file rename. thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Message to lose maildir info (inbox)" add_message [subject]='"Non-maildir message"' [dir]=notmaildir/new [filename]='non-maildir-message' expected=$(notmuch search --output=files subject:"Non-maildir message") test_expect_success "Can remove unread tag from message in non-maildir directory" 'notmuch tag -unread subject:"Non-maildir message"' test_begin_subtest "Message in non-maildir directory does not get renamed" output=$(notmuch search --output=files subject:"Non-maildir message") test_expect_equal "$output" "$expected" test_begin_subtest "notmuch dump/restore re-synchronizes maildir tags with flags" # Capture current filename state expected=$(ls $MAIL_DIR/cur) # Add/remove some flags from filenames mv $MAIL_DIR/cur/adding-replied-tag:2,RS $MAIL_DIR/cur/adding-replied-tag:2,S mv $MAIL_DIR/cur/adding-s-flag:2,S $MAIL_DIR/cur/adding-s-flag:2, mv $MAIL_DIR/cur/adding-with-s-flag:2,S $MAIL_DIR/cur/adding-with-s-flag:2,RS mv $MAIL_DIR/cur/message-to-move-to-cur:2,S $MAIL_DIR/cur/message-to-move-to-cur:2,SD increment_mtime $MAIL_DIR/cur notmuch dump dump.txt NOTMUCH_NEW >/dev/null notmuch restore dump.txt output=$(ls $MAIL_DIR/cur) test_expect_equal "$output" "$expected" test_begin_subtest 'Adding flags to duplicate message tags the mail' add_message [subject]='"Duplicated message"' [dir]=cur [filename]='duplicated-message:2,' cp "$MAIL_DIR/cur/duplicated-message:2," "$MAIL_DIR/cur/duplicated-message-copy:2,RS" increment_mtime $MAIL_DIR/cur NOTMUCH_NEW > output notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output test_expect_equal "$(< output)" "No new mail. thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Duplicated message (inbox replied)" test_begin_subtest "Duplicate mail with new flags propagates flag to original file" (cd $MAIL_DIR/cur/; ls duplicated*) > actual test_expect_equal "$(< actual)" "duplicated-message:2,RS duplicated-message-copy:2,RS" test_begin_subtest "Adding duplicate message without flags does not remove tags" cp "$MAIL_DIR/cur/duplicated-message-copy:2,RS" "$MAIL_DIR/cur/duplicated-message-another-copy:2," increment_mtime $MAIL_DIR/cur NOTMUCH_NEW > output notmuch search subject:"Duplicated message" | notmuch_search_sanitize >> output test_expect_equal "$(< output)" "No new mail. thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Duplicated message (inbox replied)" test_begin_subtest "Tag changes modify flags of multiple files" notmuch tag -replied subject:"Duplicated message" (cd $MAIL_DIR/cur/; ls duplicated*) > actual test_expect_equal "$(< actual)" "duplicated-message-another-copy:2,S duplicated-message-copy:2,S duplicated-message:2,S" test_done