1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
| | #!/usr/bin/env bash
test_description='"notmuch insert"'
. ./test-lib.sh
# Create directories and database before inserting.
mkdir -p "$MAIL_DIR"/{cur,new,tmp}
mkdir -p "$MAIL_DIR"/Drafts/{cur,new,tmp}
notmuch new > /dev/null
# We use generate_message to create the temporary message files.
# They happen to be in the mail directory already but that is okay
# since we do not call notmuch new hereafter.
gen_insert_msg() {
generate_message \
"[subject]=\"insert-subject\"" \
"[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" \
"[body]=\"insert-message\""
}
test_expect_code 1 "Insert zero-length file" \
"notmuch insert < /dev/null"
# This test is a proxy for other errors that may occur while trying to
# add a message to the notmuch database, e.g. database locked.
test_expect_code 0 "Insert non-message" \
"echo bad_message | notmuch insert"
test_begin_subtest "Database empty so far"
test_expect_equal "0" "`notmuch count --output=messages '*'`"
test_begin_subtest "Insert message"
gen_insert_msg
notmuch insert < "$gen_msg_filename"
cur_msg_filename=$(notmuch search --output=files "subject:insert-subject")
test_expect_equal_file "$cur_msg_filename" "$gen_msg_filename"
test_begin_subtest "Insert message adds default tags"
output=$(notmuch show --format=json "subject:insert-subject")
expected='[[[{
"id": "'"${gen_msg_id}"'",
"match": true,
"excluded": false,
"filename": "'"${cur_msg_filename}"'",
"timestamp": 946728000,
"date_relative": "2000-01-01",
"tags": ["inbox","unread"],
"headers": {
"Subject": "insert-subject",
"From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"To": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"Date": "Sat, 01 Jan 2000 12:00:00 +0000"},
"body": [{"id": 1,
"content-type": "text/plain",
"content": "insert-message\n"}]},
[]]]]'
test_expect_equal_json "$output" "$expected"
test_begin_subtest "Insert duplicate message"
notmuch insert +duptag -unread < "$gen_msg_filename"
output=$(notmuch search --output=files "subject:insert-subject" | wc -l)
test_expect_equal "$output" 2
test_begin_subtest "Duplicate message does not change tags"
output=$(notmuch search --format=json --output=tags "subject:insert-subject")
test_expect_equal_json "$output" '["inbox", "unread"]'
test_begin_subtest "Insert message, add tag"
gen_insert_msg
notmuch insert +custom < "$gen_msg_filename"
output=$(notmuch count tag:custom)
test_expect_equal "$output" "1"
test_begin_subtest "Insert message, add/remove tags"
gen_insert_msg
notmuch insert +custom -unread < "$gen_msg_filename"
output=$(notmuch count tag:custom NOT tag:unread)
test_expect_equal "$output" "1"
test_begin_subtest "Insert message with default tags stays in new/"
gen_insert_msg
notmuch insert < "$gen_msg_filename"
output=$(notmuch search --output=files id:$gen_msg_id)
dirname=$(dirname "$output")
test_expect_equal "$dirname" "$MAIL_DIR/new"
test_begin_subtest "Insert message with non-maildir synced tags stays in new/"
gen_insert_msg
notmuch insert +custom -inbox < "$gen_msg_filename"
output=$(notmuch search --output=files id:$gen_msg_id)
dirname=$(dirname "$output")
test_expect_equal "$dirname" "$MAIL_DIR/new"
test_begin_subtest "Insert message with custom new.tags goes to cur/"
OLDCONFIG=$(notmuch config get new.tags)
notmuch config set new.tags test
gen_insert_msg
notmuch insert < "$gen_msg_filename"
output=$(notmuch search --output=files id:$gen_msg_id)
dirname=$(dirname "$output")
notmuch config set new.tags $OLDCONFIG
test_expect_equal "$dirname" "$MAIL_DIR/cur"
# additional check on the previous message
test_begin_subtest "Insert message with custom new.tags actually gets the tags"
output=$(notmuch search --output=tags id:$gen_msg_id)
test_expect_equal "$output" "test"
test_begin_subtest "Insert message with maildir synced tags goes to cur/"
gen_insert_msg
notmuch insert +flagged < "$gen_msg_filename"
output=$(notmuch search --output=files id:$gen_msg_id)
dirname=$(dirname "$output")
test_expect_equal "$dirname" "$MAIL_DIR/cur"
test_begin_subtest "Insert message into folder"
gen_insert_msg
notmuch insert --folder=Drafts < "$gen_msg_filename"
output=$(notmuch search --output=files folder:Drafts)
dirname=$(dirname "$output")
test_expect_equal "$dirname" "$MAIL_DIR/Drafts/new"
test_begin_subtest "Insert message into folder, add/remove tags"
gen_insert_msg
notmuch insert --folder=Drafts +draft -unread < "$gen_msg_filename"
output=$(notmuch count folder:Drafts tag:draft NOT tag:unread)
test_expect_equal "$output" "1"
gen_insert_msg
test_expect_code 1 "Insert message into non-existent folder" \
"notmuch insert --folder=nonesuch < $gen_msg_filename"
test_begin_subtest "Insert message, create folder"
gen_insert_msg
notmuch insert --folder=F --create-folder +folder < "$gen_msg_filename"
output=$(notmuch search --output=files folder:F tag:folder)
basename=$(basename "$output")
test_expect_equal_file "$gen_msg_filename" "$MAIL_DIR/F/new/${basename}"
test_begin_subtest "Insert message, create subfolder"
gen_insert_msg
notmuch insert --folder=F/G/H/I/J --create-folder +folder < "$gen_msg_filename"
output=$(notmuch search --output=files folder:F/G/H/I/J tag:folder)
basename=$(basename "$output")
test_expect_equal_file "$gen_msg_filename" "${MAIL_DIR}/F/G/H/I/J/new/${basename}"
test_begin_subtest "Insert message, create existing subfolder"
gen_insert_msg
notmuch insert --folder=F/G/H/I/J --create-folder +folder < "$gen_msg_filename"
output=$(notmuch count folder:F/G/H/I/J tag:folder)
test_expect_equal "$output" "2"
gen_insert_msg
test_expect_code 1 "Insert message, create invalid subfolder" \
"notmuch insert --folder=../G --create-folder $gen_msg_filename"
test_done
|