]> git.notmuchmail.org Git - notmuch/blob - test/T160-json.sh
emacs: Add new option notmuch-search-hide-excluded
[notmuch] / test / T160-json.sh
1 #!/usr/bin/env bash
2 test_description="--format=json output"
3 . $(dirname "$0")/test-lib.sh || exit 1
4 .  $NOTMUCH_SRCDIR/test/test-lib-emacs.sh || exit 1
5
6 test_begin_subtest "Show message: json"
7 add_message "[subject]=\"json-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[bcc]=\"test_suite+bcc@notmuchmail.org\"" "[reply-to]=\"test_suite+replyto@notmuchmail.org\"" "[body]=\"json-show-message\""
8 output=$(notmuch show --format=json "json-show-message")
9 test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\", \"crypto\": {}, \"match\": true, \"excluded\": false, \"filename\": [\"${gen_msg_filename}\"], \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Bcc\": \"test_suite+bcc@notmuchmail.org\", \"Reply-To\": \"test_suite+replyto@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"json-show-message\n\"}]}, []]]]"
10
11 # This should be the same output as above.
12 test_begin_subtest "Show message: json --body=true"
13 output=$(notmuch show --format=json --body=true "json-show-message")
14 test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\",  \"crypto\": {}, \"match\": true, \"excluded\": false, \"filename\": [\"${gen_msg_filename}\"], \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Bcc\": \"test_suite+bcc@notmuchmail.org\", \"Reply-To\": \"test_suite+replyto@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"text/plain\", \"content\": \"json-show-message\n\"}]}, []]]]"
15
16 test_begin_subtest "Show message: json --body=false"
17 output=$(notmuch show --format=json --body=false "json-show-message")
18 test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\",  \"crypto\": {}, \"match\": true, \"excluded\": false, \"filename\": [\"${gen_msg_filename}\"], \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"Bcc\": \"test_suite+bcc@notmuchmail.org\", \"Reply-To\": \"test_suite+replyto@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}}, []]]]"
19
20 test_begin_subtest "Search message: json"
21 add_message "[subject]=\"json-search-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"json-search-message\""
22 output=$(notmuch search --format=json "json-search-message" | notmuch_search_sanitize)
23 test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
24  \"timestamp\": 946728000,
25  \"date_relative\": \"2000-01-01\",
26  \"matched\": 1,
27  \"total\": 1,
28  \"authors\": \"Notmuch Test Suite\",
29  \"subject\": \"json-search-subject\",
30  \"query\": [\"id:$gen_msg_id\", null],
31  \"tags\": [\"inbox\",
32  \"unread\"]}]"
33
34 test_begin_subtest "Show message: json, utf-8"
35 add_message "[subject]=\"json-show-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-show-méssage\""
36 output=$(notmuch show --format=json "jsön-show-méssage")
37 test_expect_equal_json "$output" "[[[{\"id\": \"${gen_msg_id}\",  \"crypto\": {}, \"match\": true, \"excluded\": false, \"filename\": [\"${gen_msg_filename}\"], \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\",\"unread\"], \"headers\": {\"Subject\": \"json-show-utf8-body-sübjéct\", \"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\": \"jsön-show-méssage\n\"}]}, []]]]"
38
39 test_begin_subtest "Show message: json, inline attachment filename"
40 subject='json-show-inline-attachment-filename'
41 id="json-show-inline-attachment-filename@notmuchmail.org"
42 emacs_fcc_message \
43     "$subject" \
44     'This is a test message with inline attachment with a filename' \
45     "(mml-attach-file \"$NOTMUCH_SRCDIR/test/README\" nil nil \"inline\")
46      (message-goto-eoh)
47      (insert \"Message-ID: <$id>\n\")"
48 output=$(notmuch show --format=json "id:$id")
49 filename=$(notmuch search --output=files "id:$id")
50 # Get length of README after base64-encoding, minus additional newline.
51 attachment_length=$(( $(base64 $NOTMUCH_SRCDIR/test/README | wc -c) - 1 ))
52 test_expect_equal_json "$output" "[[[{\"id\": \"$id\",  \"crypto\": {}, \"match\": true, \"excluded\": false, \"filename\": [\"$filename\"], \"timestamp\": 946728000, \"date_relative\": \"2000-01-01\", \"tags\": [\"inbox\"], \"headers\": {\"Subject\": \"$subject\", \"From\": \"Notmuch Test Suite <test_suite@notmuchmail.org>\", \"To\": \"test_suite@notmuchmail.org\", \"Date\": \"Sat, 01 Jan 2000 12:00:00 +0000\"}, \"body\": [{\"id\": 1, \"content-type\": \"multipart/mixed\", \"content\": [{\"id\": 2, \"content-type\": \"text/plain\", \"content\": \"This is a test message with inline attachment with a filename\"}, {\"id\": 3, \"content-type\": \"application/octet-stream\", \"content-length\": $attachment_length, \"content-transfer-encoding\": \"base64\", \"content-disposition\": \"inline\", \"filename\": \"README\"}]}]}, []]]]"
53
54 test_begin_subtest "Search message: json, utf-8"
55 add_message "[subject]=\"json-search-utf8-body-sübjéct\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[body]=\"jsön-search-méssage\""
56 output=$(notmuch search --format=json "jsön-search-méssage" | notmuch_search_sanitize)
57 test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
58  \"timestamp\": 946728000,
59  \"date_relative\": \"2000-01-01\",
60  \"matched\": 1,
61  \"total\": 1,
62  \"authors\": \"Notmuch Test Suite\",
63  \"subject\": \"json-search-utf8-body-sübjéct\",
64  \"query\": [\"id:$gen_msg_id\", null],
65  \"tags\": [\"inbox\",
66  \"unread\"]}]"
67
68 test_begin_subtest "Search message: json, 64-bit timestamp"
69 if [ $NOTMUCH_HAVE_64BIT_TIME_T -ne 1 ]; then
70     test_subtest_known_broken
71 fi
72 add_message "[subject]=\"json-search-64bit-timestamp-subject\"" "[date]=\"Tue, 01 Jan 2999 12:00:00 -0000\"" "[body]=\"json-search-64bit-timestamp-message\""
73 output=$(notmuch search --format=json "json-search-64bit-timestamp-message" | notmuch_search_sanitize)
74 test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
75  \"timestamp\": 32472187200,
76  \"date_relative\": \"the future\",
77  \"matched\": 1,
78  \"total\": 1,
79  \"authors\": \"Notmuch Test Suite\",
80  \"subject\": \"json-search-64bit-timestamp-subject\",
81  \"query\": [\"id:$gen_msg_id\", null],
82  \"tags\": [\"inbox\",
83  \"unread\"]}]"
84
85 test_begin_subtest "Format version: too low"
86 test_expect_code 20 "notmuch search --format-version=0 \\*"
87
88 test_begin_subtest "Format version: too high"
89 test_expect_code 21 "notmuch search --format-version=999 \\*"
90
91 test_begin_subtest "Show message: multiple filenames"
92 add_message '[id]=message-id@example.com [filename]=copy1 [date]="Fri, 05 Jan 2001 15:43:52 +0000"'
93 add_message '[id]=message-id@example.com [filename]=copy2 [date]="Fri, 05 Jan 2001 15:43:52 +0000"'
94 cat <<EOF > EXPECTED
95 [
96     [
97         [
98             {
99                 "date_relative": "2001-01-05",
100                 "excluded": false,
101                 "filename": [
102                     "${MAIL_DIR}/copy1",
103                     "${MAIL_DIR}/copy2"
104                 ],
105                 "headers": {
106                     "Date": "Fri, 05 Jan 2001 15:43:52 +0000",
107                     "From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
108                     "Subject": "Show message: multiple filenames",
109                     "To": "Notmuch Test Suite <test_suite@notmuchmail.org>"
110                 },
111                 "id": "message-id@example.com",
112                 "crypto": {},
113                 "match": true,
114                 "tags": [
115                     "inbox",
116                     "unread"
117                 ],
118                 "timestamp": 978709432
119             },
120             []
121         ]
122     ]
123 ]
124 EOF
125 output=$(notmuch show --format=json --body=false id:message-id@example.com)
126 test_expect_equal_json "$output" "$(cat EXPECTED)"
127
128 test_begin_subtest "Show message: multiple filenames, format version 2"
129 cat <<EOF > EXPECTED
130 [
131     [
132         [
133             {
134                 "date_relative": "2001-01-05",
135                 "excluded": false,
136                 "filename": "${MAIL_DIR}/copy1",
137                 "headers": {
138                     "Date": "Fri, 05 Jan 2001 15:43:52 +0000",
139                     "From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
140                     "Subject": "Show message: multiple filenames",
141                     "To": "Notmuch Test Suite <test_suite@notmuchmail.org>"
142                 },
143                 "id": "message-id@example.com",
144                 "match": true,
145                 "tags": [
146                     "inbox",
147                     "unread"
148                 ],
149                 "timestamp": 978709432
150             },
151             []
152         ]
153     ]
154 ]
155 EOF
156 output=$(notmuch show --format=json --body=false --format-version=2 id:message-id@example.com)
157 test_expect_equal_json "$output" "$(cat EXPECTED)"
158
159 test_begin_subtest "show extra headers"
160 add_message "[subject]=\"extra-headers\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[in-reply-to]=\"<parent@notmuch-test-suite>\"" "[body]=\"extra-headers test\""\
161            "[header]=\"Received: from mail.example.com (mail.example.com [1.1.1.1])
162         by mail.notmuchmail.org (some MTA) with ESMTP id 12345678
163         for <test_suite_other@notmuchmail.org>; Sat, 10 Apr 2010 07:54:51 -0400 (EDT)\"" \
164
165 notmuch config set show.extra_headers "in-reply-to;received"
166 output=$(notmuch show --format=json --body=false id:${gen_msg_id} | notmuch_json_show_sanitize)
167 cat <<EOF > EXPECTED
168 [
169     [
170         [
171             {
172                 "crypto": {},
173                 "date_relative": "2000-01-01",
174                 "excluded": false,
175                 "filename": [
176                     "YYYYY"
177                 ],
178                 "headers": {
179                     "Date": "Sat, 01 Jan 2000 12:00:00 +0000",
180                     "From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
181                     "In-Reply-To": "<parent@notmuch-test-suite>",
182                     "Received": "from mail.example.com (mail.example.com [1.1.1.1])\tby mail.notmuchmail.org (some MTA) with ESMTP id 12345678\tfor <test_suite_other@notmuchmail.org>; Sat, 10 Apr 2010 07:54:51 -0400 (EDT)",
183                     "Subject": "extra-headers",
184                     "To": "Notmuch Test Suite <test_suite@notmuchmail.org>"
185                 },
186                 "id": "XXXXX",
187                 "match": true,
188                 "tags": [
189                     "inbox",
190                     "unread"
191                 ],
192                 "timestamp": 946728000
193             },
194             []
195         ]
196     ]
197 ]
198 EOF
199 test_expect_equal_json "${output}" "$(cat EXPECTED)"
200
201 test_done