@webex/internal-plugin-task 0.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,194 @@
1
+ import Task from '@webex/internal-plugin-task';
2
+ import {
3
+ TASK_REGISTERED,
4
+ TASK_UNREGISTERED,
5
+ } from '../../../src/constants';
6
+
7
+ jest.useFakeTimers();
8
+
9
+ describe('internal-plugin-task', () => {
10
+ let webex;
11
+
12
+ beforeEach(() => {
13
+ webex = {
14
+ canAuthorize: true,
15
+ internal: {
16
+ device: {
17
+ register: jest.fn().mockResolvedValue(),
18
+ unregister: jest.fn().mockResolvedValue(),
19
+ },
20
+ mercury: {
21
+ connect: jest.fn().mockResolvedValue(),
22
+ disconnect: jest.fn().mockResolvedValue(),
23
+ on: jest.fn(),
24
+ off: jest.fn(),
25
+ },
26
+ encryption: {
27
+ kms: {
28
+ createUnboundKeys: jest.fn().mockResolvedValue([{
29
+ uri: "kms://kms-us-int.wbx2.com/keys/xxxx-xxxx-xxxx-xxxx"
30
+ }])
31
+ },
32
+ encryptText: jest.fn().mockResolvedValue("encryptedText"),
33
+ decryptText: jest.fn().mockResolvedValue("decryptedText"),
34
+ },
35
+ task: null,
36
+ },
37
+ request: jest.fn()
38
+ };
39
+ webex.internal.task = new Task({}, {parent: webex});
40
+ });
41
+
42
+ describe('Public Api Contract', () => {
43
+ describe('#register()', () => {
44
+ it('on task register call mercury registration', async () => {
45
+ await webex.internal.task.register();
46
+ expect(webex.internal.device.register).toHaveBeenCalledTimes(1);
47
+ expect(webex.internal.mercury.on).toHaveBeenCalledTimes(0);
48
+ expect(webex.internal.task.registered).toBe(true);
49
+ });
50
+
51
+ it('should trigger `task:register` event', async () => {
52
+ const spy = jest.fn();
53
+ webex.internal.task.on(TASK_REGISTERED, spy);
54
+ await webex.internal.task.register();
55
+ expect(spy).toHaveBeenCalledTimes(1);
56
+ });
57
+ });
58
+
59
+ describe('#unregister()', () => {
60
+ it('should call `mercury.unregister` and `device.unregister`', async () => {
61
+ await webex.internal.task.register();
62
+ await webex.internal.task.unregister();
63
+ expect(webex.internal.mercury.off).toHaveBeenCalledTimes(0);
64
+ });
65
+
66
+ it('should trigger `task:unregister` event', async () => {
67
+ const spy = jest.fn();
68
+ await webex.internal.task.register();
69
+ webex.internal.task.on(TASK_UNREGISTERED, spy);
70
+ await webex.internal.task.unregister();
71
+ expect(spy).toHaveBeenCalledTimes(1);
72
+ });
73
+ });
74
+
75
+ describe('#listMyTasks()', () => {
76
+ it('should fetch my task list', async () => {
77
+ webex.request.mockResolvedValue({
78
+ body: {
79
+ items: [
80
+ {
81
+ "id": "abcdabcd-abcd-abcd-abcd-00000000",
82
+ "title": "Encrypted Task Title",
83
+ "notes": "Encrypted Task Note",
84
+ "encryptionKeyUrl": "/keys/e5d3f747-6adf-432d-999c-6578e33953e3",
85
+ }
86
+ ],
87
+ },
88
+ });
89
+ const res = await webex.internal.task.listMyTasks();
90
+ expect(res.body.items.length).toBe(1);
91
+ expect(webex.request).toHaveBeenCalledWith({
92
+ method: 'GET',
93
+ service: 'raindrop',
94
+ resource: 'tasks',
95
+ qs: {},
96
+ });
97
+ });
98
+ });
99
+
100
+ describe("#getTask()", () => {
101
+ it("should fetch task data", async () => {
102
+ const id = "abcdabcd-abcd-abcd-abcd-00000000";
103
+ const title = "Encrypted Task Title";
104
+ webex.request.mockResolvedValue({
105
+ body: {
106
+ "id": id,
107
+ "title": title,
108
+ "notes": "Encrypted Task Note",
109
+ "encryptionKeyUrl": "/keys/e5d3f747-6adf-432d-999c-6578e33953e3",
110
+ }
111
+ });
112
+
113
+ const res = await webex.internal.task.getTask(id);
114
+
115
+ expect(res.body.id).toBe(id);
116
+ expect(res.body.title).toBe("decryptedText");
117
+ expect(webex.request).toHaveBeenCalledWith({
118
+ method: "GET",
119
+ service: "raindrop",
120
+ resource: `tasks/${id}`,
121
+ });
122
+ });
123
+ });
124
+
125
+ describe("#createTask()", () => {
126
+ it("should create a task", async () => {
127
+ const data = {
128
+ title: "My Task 1",
129
+ };
130
+
131
+ webex.request.mockResolvedValue({
132
+ body: {
133
+ id: "abcdabcd-abcd-abcd-abcd-00000000",
134
+ title: "My Task 1",
135
+ }
136
+ });
137
+
138
+ const res = await webex.internal.task.createTask(data);
139
+
140
+ expect(res.body.id).toBe("abcdabcd-abcd-abcd-abcd-00000000");
141
+ expect(webex.request).toHaveBeenCalledWith({
142
+ method: "POST",
143
+ service: "raindrop",
144
+ body: data,
145
+ resource: "tasks",
146
+ });
147
+ });
148
+ });
149
+
150
+ describe("#updateTask()", () => {
151
+ it("should update a task", async () => {
152
+ const id = "abcdabcd-abcd-abcd-abcd-00000000";
153
+ const data = {
154
+ title: "My Task 1",
155
+ };
156
+
157
+ webex.request.mockResolvedValue({
158
+ body: {
159
+ id: "abcdabcd-abcd-abcd-abcd-00000000",
160
+ title: "My Task 1",
161
+ }
162
+ });
163
+
164
+ const res = await webex.internal.task.updateTask(id, data);
165
+
166
+ expect(res.body.id).toBe("abcdabcd-abcd-abcd-abcd-00000000");
167
+ expect(webex.request).toHaveBeenCalledWith({
168
+ method: "PATCH",
169
+ service: "raindrop",
170
+ body: data,
171
+ resource: `tasks/${id}`,
172
+ });
173
+ });
174
+ });
175
+
176
+ describe("#deleteTask()", () => {
177
+ it("should delete a task event", async () => {
178
+ const id = "abcdabcd-abcd-abcd-abcd-00000000";
179
+
180
+ webex.request.mockResolvedValue({
181
+ body: {}
182
+ });
183
+
184
+ await webex.internal.task.deleteTask(id);
185
+
186
+ expect(webex.request).toHaveBeenCalledWith({
187
+ method: "DELETE",
188
+ service: "raindrop",
189
+ resource: `tasks/${id}`,
190
+ });
191
+ });
192
+ });
193
+ });
194
+ });