summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/message-window/browser_commands.js
blob: 32ff6d5bdc684cdfcafbeb22868138b477f36c6f (plain)
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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

var { MailServices } = ChromeUtils.import(
  "resource:///modules/MailServices.jsm"
);

var {
  be_in_folder,
  create_folder,
  get_about_message,
  make_message_sets_in_folders,
  mc,
  open_message_from_file,
  press_delete,
  select_click_row,
} = ChromeUtils.import(
  "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
);
var { click_menus_in_sequence, close_window } = ChromeUtils.import(
  "resource://testing-common/mozmill/WindowHelpers.jsm"
);

var folder1, folder2;

add_setup(async function () {
  folder1 = await create_folder("CopyFromFolder");
  folder2 = await create_folder("CopyToFolder");
  await make_message_sets_in_folders([folder1], [{ count: 1 }]);
});

add_task(async function test_copy_eml_message() {
  // First, copy an email to a folder and delete it immediately just so it shows
  // up in the recent folders list. This simplifies navigation of the copy
  // context menu.
  await be_in_folder(folder1);
  let message = select_click_row(0);
  MailServices.copy.copyMessages(
    folder1,
    [message],
    folder2,
    true,
    null,
    mc.window.msgWindow,
    true
  );
  await be_in_folder(folder2);
  select_click_row(0);
  press_delete(mc);

  // Now, open a .eml file and copy it to our folder.
  let file = new FileUtils.File(getTestFilePath("data/evil.eml"));
  let msgc = await open_message_from_file(file);
  let aboutMessage = get_about_message(msgc.window);

  // First check the properties are correct when opening the .eml from file.
  let emlMessage = aboutMessage.gMessage;
  Assert.equal(emlMessage.mime2DecodedSubject, "An email");
  Assert.equal(emlMessage.mime2DecodedAuthor, "from@example.com");
  Assert.equal(
    emlMessage.date,
    new Date("Mon, 10 Jan 2011 12:00:00 -0500").getTime() * 1000
  );
  Assert.equal(
    emlMessage.messageId,
    "11111111-bdfd-ca83-6479-3427940164a8@invalid"
  );

  let documentChild = msgc.window.content.document.documentElement;
  EventUtils.synthesizeMouseAtCenter(
    documentChild,
    { type: "contextmenu", button: 2 },
    documentChild.ownerGlobal
  );
  await click_menus_in_sequence(
    aboutMessage.document.getElementById("mailContext"),
    [
      { id: "mailContext-copyMenu" },
      { label: "Recent" },
      { label: "CopyToFolder" },
    ]
  );
  close_window(msgc);

  // Make sure the copy worked. Make sure the first header is the one used,
  // in case the message (incorrectly) has multiple when max-number is 1
  // according to RFC 5322.
  let copiedMessage = select_click_row(0);
  Assert.equal(copiedMessage.mime2DecodedSubject, "An email");
  Assert.equal(copiedMessage.mime2DecodedAuthor, "from@example.com");
  Assert.equal(
    copiedMessage.date,
    new Date("Mon, 10 Jan 2011 12:00:00 -0500").getTime() * 1000
  );
  Assert.equal(copiedMessage.numReferences, 2);
  Assert.equal(
    copiedMessage.messageId,
    "11111111-bdfd-ca83-6479-3427940164a8@invalid"
  );
});