summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/browser/invitations/browser_imipBarExceptionCancel.js
blob: 7800e742caafd645c1ab47f725a5e4c7cd95a41d (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
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
/* 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/. */

/**
 * Tests for processing cancellations to recurring event exceptions.
 */

"use strict";

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

var { CalendarTestUtils } = ChromeUtils.import(
  "resource://testing-common/calendar/CalendarTestUtils.jsm"
);

XPCOMUtils.defineLazyModuleGetters(this, {
  CalEvent: "resource:///modules/CalEvent.jsm",
});

let identity;
let calendar;
let transport;

/**
 * Initialize account, identity and calendar.
 */
add_setup(async function () {
  requestLongerTimeout(3);
  let account = MailServices.accounts.createAccount();
  account.incomingServer = MailServices.accounts.createIncomingServer(
    "receiver",
    "example.com",
    "imap"
  );
  identity = MailServices.accounts.createIdentity();
  identity.email = "receiver@example.com";
  account.addIdentity(identity);

  await CalendarTestUtils.setCalendarView(window, "month");
  window.goToDate(cal.createDateTime("20220316T191602Z"));

  calendar = CalendarTestUtils.createCalendar("Test");
  transport = new EmailTransport(account, identity);
  let getImipTransport = cal.itip.getImipTransport;
  cal.itip.getImipTransport = () => transport;

  let deleteMgr = Cc["@mozilla.org/calendar/deleted-items-manager;1"].getService(
    Ci.calIDeletedItems
  ).wrappedJSObject;

  let markDeleted = deleteMgr.markDeleted;
  deleteMgr.markDeleted = () => {};

  registerCleanupFunction(() => {
    MailServices.accounts.removeAccount(account, true);
    cal.itip.getImipTransport = getImipTransport;
    deleteMgr.markDeleted = markDeleted;
    CalendarTestUtils.removeCalendar(calendar);
  });
});

/**
 * Tests cancelling an exception works.
 */
add_task(async function testCancelException() {
  for (let partStat of ["ACCEPTED", "TENTATIVE", "DECLINED"]) {
    await doCancelExceptionTest({
      calendar,
      transport,
      identity,
      partStat,
      recurrenceId: "20220317T110000Z",
      isRecurring: true,
    });
  }
});

/**
 * Tests cancelling an event with only an exception processed works.
 */
add_task(async function testCancelExceptionOnly() {
  for (let partStat of ["ACCEPTED", "TENTATIVE", "DECLINED"]) {
    let win = await openImipMessage(
      new FileUtils.File(getTestFilePath("data/exception-major.eml"))
    );
    await clickAction(win, actionIds.single.button[partStat]);

    let event = (await CalendarTestUtils.monthView.waitForItemAt(window, 3, 5, 1)).item;
    await BrowserTestUtils.closeWindow(win);
    await doCancelTest({
      calendar,
      event,
      transport,
      identity,
    });
  }
});

/**
 * Tests processing a cancellation for a recurring event works when only an
 * exception was processed previously.
 */
add_task(async function testCancelSeriesWithExceptionOnly() {
  for (let partStat of ["ACCEPTED", "TENTATIVE", "DECLINED"]) {
    let win = await openImipMessage(
      new FileUtils.File(getTestFilePath("data/exception-major.eml"))
    );
    await clickMenuAction(
      win,
      actionIds.single.button[partStat],
      actionIds.single.noReply[partStat]
    );

    let event = (await CalendarTestUtils.monthView.waitForItemAt(window, 3, 5, 1)).item;
    await BrowserTestUtils.closeWindow(win);

    let cancel = new FileUtils.File(getTestFilePath("data/cancel-repeat-event.eml"));
    let cancelWin = await openImipMessage(cancel);
    let aboutMessage = cancelWin.document.getElementById("messageBrowser").contentWindow;

    let deleteButton = aboutMessage.document.getElementById("imipDeleteButton");
    Assert.ok(!deleteButton.hidden, `#${deleteButton.id} button shown`);
    EventUtils.synthesizeMouseAtCenter(deleteButton, {}, aboutMessage);
    await BrowserTestUtils.closeWindow(cancelWin);
    await CalendarTestUtils.monthView.waitForNoItemAt(window, 3, 5, 1);
    Assert.ok(!(await calendar.getItem(event.id)), "event was deleted");

    Assert.equal(
      transport.sentItems.length,
      0,
      "itip subsystem did not attempt to send a response"
    );
    Assert.equal(transport.sentMsgs.length, 0, "no call was made into the mail subsystem");
  }
});