@webex/internal-plugin-flag 3.0.0-beta.13 → 3.0.0-beta.15
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.
- package/README.md +1 -3
- package/dist/config.js.map +1 -1
- package/dist/flag.js +30 -30
- package/dist/flag.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/src/config.js +1 -2
- package/src/flag.js +48 -57
- package/src/index.js +2 -2
- package/test/integration/spec/flag.js +98 -79
- package/test/unit/spec/flag.js +10 -6
package/README.md
CHANGED
|
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-flag
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
23
|
```js
|
|
24
|
-
|
|
25
24
|
import '@webex/internal-plugin-flag';
|
|
26
25
|
|
|
27
26
|
import WebexCore from '@webex/webex-core';
|
|
28
27
|
|
|
29
28
|
const webex = new WebexCore();
|
|
30
|
-
webex.internal.flag.WHATEVER
|
|
31
|
-
|
|
29
|
+
webex.internal.flag.WHATEVER;
|
|
32
30
|
```
|
|
33
31
|
|
|
34
32
|
## Maintainers
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["flag"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n flag: {
|
|
1
|
+
{"version":3,"names":["flag"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n flag: {},\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,IAAI,EAAE;AADO,C"}
|
package/dist/flag.js
CHANGED
|
@@ -44,11 +44,11 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
44
44
|
namespace: 'Flag',
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
* Archive a flag
|
|
48
|
+
* @param {Object} flag
|
|
49
|
+
* @param {Object} options
|
|
50
|
+
* @returns {Promise<Object>} Resolves with the flag archival
|
|
51
|
+
*/
|
|
52
52
|
archive: function archive(flag, options) {
|
|
53
53
|
if (!flag.url) {
|
|
54
54
|
return _promise.default.reject(new Error('`flag.url` is required'));
|
|
@@ -69,11 +69,11 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
69
69
|
},
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
* Flags an activity
|
|
73
|
+
* @param {Object} activity
|
|
74
|
+
* @param {Object} options
|
|
75
|
+
* @returns {Promise<Object>} Resolves with the flag creation
|
|
76
|
+
*/
|
|
77
77
|
create: function create(activity, options) {
|
|
78
78
|
if (!activity.url) {
|
|
79
79
|
return _promise.default.reject(new Error('`activity.url` is required'));
|
|
@@ -97,10 +97,10 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
97
97
|
},
|
|
98
98
|
|
|
99
99
|
/**
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
* Gets a list of Flags for a user
|
|
101
|
+
* @param {Object} options
|
|
102
|
+
* @returns {Promise} Resolves with the fetched flags
|
|
103
|
+
*/
|
|
104
104
|
list: function list(options) {
|
|
105
105
|
options = options || {};
|
|
106
106
|
var params = {
|
|
@@ -118,11 +118,11 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
118
118
|
},
|
|
119
119
|
|
|
120
120
|
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
* Gets an array of activities where the status is 200
|
|
122
|
+
* @param {Object} flags
|
|
123
|
+
* @returns {Promise<Object>} Resolves with the activities
|
|
124
|
+
* TODO: this should be implemented as a batched request when migrating to the modular sdk
|
|
125
|
+
*/
|
|
126
126
|
mapToActivities: function mapToActivities(flags) {
|
|
127
127
|
var _this = this;
|
|
128
128
|
|
|
@@ -220,11 +220,11 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
220
220
|
},
|
|
221
221
|
|
|
222
222
|
/**
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
223
|
+
* Delete a flag
|
|
224
|
+
* @param {Object} flag
|
|
225
|
+
* @param {Object} options
|
|
226
|
+
* @returns {Promise<Object>} Resolves with the flag deletion
|
|
227
|
+
*/
|
|
228
228
|
delete: function _delete(flag, options) {
|
|
229
229
|
if (!flag.url) {
|
|
230
230
|
return _promise.default.reject(new Error('`flag.url` is required'));
|
|
@@ -242,11 +242,11 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
242
242
|
},
|
|
243
243
|
|
|
244
244
|
/**
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
245
|
+
* UnFlags an activity
|
|
246
|
+
* @param {Object} flag
|
|
247
|
+
* @param {Object} options
|
|
248
|
+
* @returns {Promise<Object>} Resolves with the flag removal
|
|
249
|
+
*/
|
|
250
250
|
unflag: function unflag(flag, options) {
|
|
251
251
|
if (!flag.url) {
|
|
252
252
|
return _promise.default.reject(new Error('`flag.url` is required'));
|
|
@@ -265,7 +265,7 @@ var Flag = _webexCore.WebexPlugin.extend({
|
|
|
265
265
|
return res.body;
|
|
266
266
|
});
|
|
267
267
|
},
|
|
268
|
-
version: "3.0.0-beta.
|
|
268
|
+
version: "3.0.0-beta.15"
|
|
269
269
|
});
|
|
270
270
|
|
|
271
271
|
var _default = Flag;
|
package/dist/flag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Flag","WebexPlugin","extend","namespace","archive","flag","options","url","reject","Error","params","method","uri","body","state","webex","request","then","res","create","activity","service","resource","target","list","qs","items","mapToActivities","flags","mapUrlActivities","convoUrlRegex","match","exec","activities","get","set","push","logger","warn","all","convoUrl","activityUrls","multistatus","reduce","activitiesArr","statusData","status","data","responses","delete","unflag"],"sources":["flag.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {flatten} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Flag = WebexPlugin.extend({\n namespace: 'Flag',\n\n /**\n
|
|
1
|
+
{"version":3,"names":["Flag","WebexPlugin","extend","namespace","archive","flag","options","url","reject","Error","params","method","uri","body","state","webex","request","then","res","create","activity","service","resource","target","list","qs","items","mapToActivities","flags","mapUrlActivities","convoUrlRegex","match","exec","activities","get","set","push","logger","warn","all","convoUrl","activityUrls","multistatus","reduce","activitiesArr","statusData","status","data","responses","delete","unflag"],"sources":["flag.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {flatten} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Flag = WebexPlugin.extend({\n namespace: 'Flag',\n\n /**\n * Archive a flag\n * @param {Object} flag\n * @param {Object} options\n * @returns {Promise<Object>} Resolves with the flag archival\n */\n archive(flag, options) {\n if (!flag.url) {\n return Promise.reject(new Error('`flag.url` is required'));\n }\n options = options || {};\n const params = {\n method: 'PUT',\n uri: flag.url,\n options,\n body: {\n state: 'archived',\n },\n };\n\n return this.webex.request(params).then((res) => res.body);\n },\n\n /**\n * Flags an activity\n * @param {Object} activity\n * @param {Object} options\n * @returns {Promise<Object>} Resolves with the flag creation\n */\n create(activity, options) {\n if (!activity.url) {\n return Promise.reject(new Error('`activity.url` is required'));\n }\n options = options || {};\n const params = {\n method: 'POST',\n service: 'userApps',\n resource: '/flags',\n options,\n body: {\n 'conversation-url': activity.target.url,\n 'flag-item': activity.url,\n state: 'flagged',\n },\n };\n\n return this.webex.request(params).then((res) => res.body);\n },\n\n /**\n * Gets a list of Flags for a user\n * @param {Object} options\n * @returns {Promise} Resolves with the fetched flags\n */\n list(options) {\n options = options || {};\n const params = {\n method: 'GET',\n service: 'userApps',\n resource: '/flags',\n options,\n qs: {\n state: 'flagged',\n },\n };\n\n return this.webex.request(params).then((res) => res.body.items);\n },\n\n /**\n * Gets an array of activities where the status is 200\n * @param {Object} flags\n * @returns {Promise<Object>} Resolves with the activities\n * TODO: this should be implemented as a batched request when migrating to the modular sdk\n */\n async mapToActivities(flags) {\n const mapUrlActivities = new Map();\n\n for (const flag of flags) {\n const convoUrlRegex = /(.*)\\/activities\\//;\n const activity = flag['flag-item'];\n const match = convoUrlRegex.exec(activity);\n\n if (match) {\n const url = match[1];\n let activities = mapUrlActivities.get(url);\n\n if (!activities) {\n activities = [];\n mapUrlActivities.set(url, activities);\n }\n activities.push(activity);\n } else {\n this.logger.warn(`The activity URL has a strange format (${activity}). Ignoring it.`);\n }\n }\n\n const responses = await Promise.all(\n Array.from(mapUrlActivities, async ([convoUrl, activityUrls]) => {\n const params = {\n method: 'POST',\n url: `${convoUrl}/bulk_activities_fetch`,\n body: {\n activityUrls,\n },\n };\n\n const res = await this.webex.request(params);\n\n return res.body.multistatus.reduce((activitiesArr, statusData) => {\n if (statusData.status === '200') {\n activitiesArr.push(statusData.data.activity);\n }\n\n return activitiesArr;\n }, []);\n })\n );\n\n return flatten(responses);\n },\n\n /**\n * Delete a flag\n * @param {Object} flag\n * @param {Object} options\n * @returns {Promise<Object>} Resolves with the flag deletion\n */\n delete(flag, options) {\n if (!flag.url) {\n return Promise.reject(new Error('`flag.url` is required'));\n }\n options = options || {};\n const params = {\n method: 'DELETE',\n options,\n uri: flag.url,\n };\n\n return this.request(params).then((res) => res.body);\n },\n\n /**\n * UnFlags an activity\n * @param {Object} flag\n * @param {Object} options\n * @returns {Promise<Object>} Resolves with the flag removal\n */\n unflag(flag, options) {\n if (!flag.url) {\n return Promise.reject(new Error('`flag.url` is required'));\n }\n options = options || {};\n const params = {\n method: 'PUT',\n uri: flag.url,\n options,\n body: {\n state: 'unflagged',\n },\n };\n\n return this.webex.request(params).then((res) => res.body);\n },\n});\n\nexport default Flag;\n"],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerInternalPlugin","Flag","config","payloadTransformer","predicates","transforms"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-device';\nimport Flag from './flag';\nimport config from './config';\n\nregisterInternalPlugin('flag', Flag, {\n config,\n payloadTransformer: {\n predicates: [],\n transforms: []
|
|
1
|
+
{"version":3,"names":["registerInternalPlugin","Flag","config","payloadTransformer","predicates","transforms"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-device';\nimport Flag from './flag';\nimport config from './config';\n\nregisterInternalPlugin('flag', Flag, {\n config,\n payloadTransformer: {\n predicates: [],\n transforms: [],\n },\n});\n\nexport {default} from './flag';\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA;;AAEA;;AACA;;AACA;;AACA;;AATA;AACA;AACA;AASA,IAAAA,iCAAA,EAAuB,MAAvB,EAA+BC,aAA/B,EAAqC;EACnCC,MAAM,EAANA,eADmC;EAEnCC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,EADM;IAElBC,UAAU,EAAE;EAFM;AAFe,CAArC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-flag",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.15",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Saurabh Jain <saurjai3@cisco.com>",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
]
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
25
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
26
|
-
"@webex/internal-plugin-flag": "3.0.0-beta.
|
|
27
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
28
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
29
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
30
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
24
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.15",
|
|
25
|
+
"@webex/internal-plugin-device": "3.0.0-beta.15",
|
|
26
|
+
"@webex/internal-plugin-flag": "3.0.0-beta.15",
|
|
27
|
+
"@webex/test-helper-chai": "3.0.0-beta.15",
|
|
28
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.15",
|
|
29
|
+
"@webex/test-helper-test-users": "3.0.0-beta.15",
|
|
30
|
+
"@webex/webex-core": "3.0.0-beta.15",
|
|
31
31
|
"lodash": "^4.17.21"
|
|
32
32
|
}
|
|
33
33
|
}
|
package/src/config.js
CHANGED
package/src/flag.js
CHANGED
|
@@ -8,11 +8,11 @@ const Flag = WebexPlugin.extend({
|
|
|
8
8
|
namespace: 'Flag',
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
* Archive a flag
|
|
12
|
+
* @param {Object} flag
|
|
13
|
+
* @param {Object} options
|
|
14
|
+
* @returns {Promise<Object>} Resolves with the flag archival
|
|
15
|
+
*/
|
|
16
16
|
archive(flag, options) {
|
|
17
17
|
if (!flag.url) {
|
|
18
18
|
return Promise.reject(new Error('`flag.url` is required'));
|
|
@@ -23,20 +23,19 @@ const Flag = WebexPlugin.extend({
|
|
|
23
23
|
uri: flag.url,
|
|
24
24
|
options,
|
|
25
25
|
body: {
|
|
26
|
-
state: 'archived'
|
|
27
|
-
}
|
|
26
|
+
state: 'archived',
|
|
27
|
+
},
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
return this.webex.request(params)
|
|
31
|
-
.then((res) => res.body);
|
|
30
|
+
return this.webex.request(params).then((res) => res.body);
|
|
32
31
|
},
|
|
33
32
|
|
|
34
33
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
* Flags an activity
|
|
35
|
+
* @param {Object} activity
|
|
36
|
+
* @param {Object} options
|
|
37
|
+
* @returns {Promise<Object>} Resolves with the flag creation
|
|
38
|
+
*/
|
|
40
39
|
create(activity, options) {
|
|
41
40
|
if (!activity.url) {
|
|
42
41
|
return Promise.reject(new Error('`activity.url` is required'));
|
|
@@ -50,19 +49,18 @@ const Flag = WebexPlugin.extend({
|
|
|
50
49
|
body: {
|
|
51
50
|
'conversation-url': activity.target.url,
|
|
52
51
|
'flag-item': activity.url,
|
|
53
|
-
state: 'flagged'
|
|
54
|
-
}
|
|
52
|
+
state: 'flagged',
|
|
53
|
+
},
|
|
55
54
|
};
|
|
56
55
|
|
|
57
|
-
return this.webex.request(params)
|
|
58
|
-
.then((res) => res.body);
|
|
56
|
+
return this.webex.request(params).then((res) => res.body);
|
|
59
57
|
},
|
|
60
58
|
|
|
61
59
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
* Gets a list of Flags for a user
|
|
61
|
+
* @param {Object} options
|
|
62
|
+
* @returns {Promise} Resolves with the fetched flags
|
|
63
|
+
*/
|
|
66
64
|
list(options) {
|
|
67
65
|
options = options || {};
|
|
68
66
|
const params = {
|
|
@@ -71,20 +69,19 @@ const Flag = WebexPlugin.extend({
|
|
|
71
69
|
resource: '/flags',
|
|
72
70
|
options,
|
|
73
71
|
qs: {
|
|
74
|
-
state: 'flagged'
|
|
75
|
-
}
|
|
72
|
+
state: 'flagged',
|
|
73
|
+
},
|
|
76
74
|
};
|
|
77
75
|
|
|
78
|
-
return this.webex.request(params)
|
|
79
|
-
.then((res) => res.body.items);
|
|
76
|
+
return this.webex.request(params).then((res) => res.body.items);
|
|
80
77
|
},
|
|
81
78
|
|
|
82
79
|
/**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
* Gets an array of activities where the status is 200
|
|
81
|
+
* @param {Object} flags
|
|
82
|
+
* @returns {Promise<Object>} Resolves with the activities
|
|
83
|
+
* TODO: this should be implemented as a batched request when migrating to the modular sdk
|
|
84
|
+
*/
|
|
88
85
|
async mapToActivities(flags) {
|
|
89
86
|
const mapUrlActivities = new Map();
|
|
90
87
|
|
|
@@ -102,11 +99,8 @@ const Flag = WebexPlugin.extend({
|
|
|
102
99
|
mapUrlActivities.set(url, activities);
|
|
103
100
|
}
|
|
104
101
|
activities.push(activity);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
this.logger.warn(
|
|
108
|
-
`The activity URL has a strange format (${activity}). Ignoring it.`
|
|
109
|
-
);
|
|
102
|
+
} else {
|
|
103
|
+
this.logger.warn(`The activity URL has a strange format (${activity}). Ignoring it.`);
|
|
110
104
|
}
|
|
111
105
|
}
|
|
112
106
|
|
|
@@ -116,8 +110,8 @@ const Flag = WebexPlugin.extend({
|
|
|
116
110
|
method: 'POST',
|
|
117
111
|
url: `${convoUrl}/bulk_activities_fetch`,
|
|
118
112
|
body: {
|
|
119
|
-
activityUrls
|
|
120
|
-
}
|
|
113
|
+
activityUrls,
|
|
114
|
+
},
|
|
121
115
|
};
|
|
122
116
|
|
|
123
117
|
const res = await this.webex.request(params);
|
|
@@ -136,11 +130,11 @@ const Flag = WebexPlugin.extend({
|
|
|
136
130
|
},
|
|
137
131
|
|
|
138
132
|
/**
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
133
|
+
* Delete a flag
|
|
134
|
+
* @param {Object} flag
|
|
135
|
+
* @param {Object} options
|
|
136
|
+
* @returns {Promise<Object>} Resolves with the flag deletion
|
|
137
|
+
*/
|
|
144
138
|
delete(flag, options) {
|
|
145
139
|
if (!flag.url) {
|
|
146
140
|
return Promise.reject(new Error('`flag.url` is required'));
|
|
@@ -149,19 +143,18 @@ const Flag = WebexPlugin.extend({
|
|
|
149
143
|
const params = {
|
|
150
144
|
method: 'DELETE',
|
|
151
145
|
options,
|
|
152
|
-
uri: flag.url
|
|
146
|
+
uri: flag.url,
|
|
153
147
|
};
|
|
154
148
|
|
|
155
|
-
return this.request(params)
|
|
156
|
-
.then((res) => res.body);
|
|
149
|
+
return this.request(params).then((res) => res.body);
|
|
157
150
|
},
|
|
158
151
|
|
|
159
152
|
/**
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
153
|
+
* UnFlags an activity
|
|
154
|
+
* @param {Object} flag
|
|
155
|
+
* @param {Object} options
|
|
156
|
+
* @returns {Promise<Object>} Resolves with the flag removal
|
|
157
|
+
*/
|
|
165
158
|
unflag(flag, options) {
|
|
166
159
|
if (!flag.url) {
|
|
167
160
|
return Promise.reject(new Error('`flag.url` is required'));
|
|
@@ -172,14 +165,12 @@ const Flag = WebexPlugin.extend({
|
|
|
172
165
|
uri: flag.url,
|
|
173
166
|
options,
|
|
174
167
|
body: {
|
|
175
|
-
state: 'unflagged'
|
|
176
|
-
}
|
|
168
|
+
state: 'unflagged',
|
|
169
|
+
},
|
|
177
170
|
};
|
|
178
171
|
|
|
179
|
-
return this.webex.request(params)
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
172
|
+
return this.webex.request(params).then((res) => res.body);
|
|
173
|
+
},
|
|
183
174
|
});
|
|
184
175
|
|
|
185
176
|
export default Flag;
|
package/src/index.js
CHANGED
|
@@ -15,91 +15,109 @@ describe('plugin-flag', function () {
|
|
|
15
15
|
describe('Flag', () => {
|
|
16
16
|
let flagConversation, mccoy, participants, spock;
|
|
17
17
|
|
|
18
|
-
beforeEach('create users', () =>
|
|
19
|
-
.then((users) => {
|
|
18
|
+
beforeEach('create users', () =>
|
|
19
|
+
testUsers.create({count: 2}).then((users) => {
|
|
20
20
|
participants = [mccoy, spock] = users;
|
|
21
21
|
spock.webex = new WebexCore({
|
|
22
22
|
credentials: {
|
|
23
|
-
authorization: users[0].token
|
|
24
|
-
}
|
|
23
|
+
authorization: users[0].token,
|
|
24
|
+
},
|
|
25
25
|
});
|
|
26
26
|
mccoy.webex = new WebexCore({
|
|
27
27
|
credentials: {
|
|
28
|
-
authorization: users[1].token
|
|
29
|
-
}
|
|
28
|
+
authorization: users[1].token,
|
|
29
|
+
},
|
|
30
30
|
});
|
|
31
|
-
})
|
|
31
|
+
})
|
|
32
|
+
);
|
|
32
33
|
|
|
33
34
|
beforeEach('connect spock to mercury', () => spock.webex.internal.mercury.connect());
|
|
34
35
|
beforeEach('connect mccoy to mercury', () => mccoy.webex.internal.mercury.connect());
|
|
35
36
|
|
|
36
|
-
afterEach(() =>
|
|
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
|
-
|
|
37
|
+
afterEach(() =>
|
|
38
|
+
Promise.all([
|
|
39
|
+
spock && spock.webex.internal.mercury.disconnect(),
|
|
40
|
+
mccoy && mccoy.webex.internal.mercury.disconnect(),
|
|
41
|
+
])
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
beforeEach('populate data', () =>
|
|
45
|
+
spock.webex.internal.conversation
|
|
46
|
+
.create({
|
|
47
|
+
displayName: 'Test Flagging Room',
|
|
48
|
+
participants,
|
|
49
|
+
})
|
|
50
|
+
.then((c) => {
|
|
51
|
+
flagConversation = c;
|
|
52
|
+
|
|
53
|
+
return mccoy.webex.internal.conversation.post(flagConversation, {
|
|
54
|
+
displayName: 'Hi Dear, How are you?',
|
|
55
|
+
});
|
|
56
|
+
})
|
|
57
|
+
.then(() =>
|
|
58
|
+
spock.webex.internal.conversation.post(flagConversation, {
|
|
59
|
+
displayName: 'Hey! I am doing well. How are you?',
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
.then(() =>
|
|
63
|
+
mccoy.webex.internal.conversation.post(flagConversation, {
|
|
64
|
+
displayName: 'I am also doing well. Are you in for the party?',
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
.then(() =>
|
|
68
|
+
spock.webex.internal.conversation.post(flagConversation, {
|
|
69
|
+
displayName: 'Yes, I am in.',
|
|
70
|
+
})
|
|
71
|
+
)
|
|
72
|
+
.then(() => {
|
|
73
|
+
assert.isDefined(flagConversation);
|
|
74
|
+
const params = {
|
|
75
|
+
activitiesLimit: 30,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return spock.webex.internal.conversation.get(flagConversation, params);
|
|
79
|
+
})
|
|
80
|
+
.then((conversation) => {
|
|
81
|
+
// Removes the "create" activity.
|
|
82
|
+
conversation.activities.items.shift();
|
|
83
|
+
const comments = map(conversation.activities.items, 'object.displayName');
|
|
84
|
+
|
|
85
|
+
assert.lengthOf(comments, 4);
|
|
86
|
+
assert.equal(comments[0], 'Hi Dear, How are you?');
|
|
87
|
+
assert.equal(comments[1], 'Hey! I am doing well. How are you?');
|
|
88
|
+
assert.equal(comments[2], 'I am also doing well. Are you in for the party?');
|
|
89
|
+
assert.equal(comments[3], 'Yes, I am in.');
|
|
90
|
+
flagConversation = conversation;
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
afterEach(() =>
|
|
95
|
+
spock.webex.internal.flag
|
|
96
|
+
.list()
|
|
97
|
+
.then((flags) =>
|
|
98
|
+
Promise.all(
|
|
99
|
+
flags.map((flag) =>
|
|
100
|
+
spock.webex.internal.flag.delete(flag).catch((reason) => console.warn(reason))
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
);
|
|
86
105
|
|
|
87
106
|
describe('#create()', () => {
|
|
88
107
|
it('flags the activity', () => {
|
|
89
108
|
const flaggedActivity1 = flagConversation.activities.items[1];
|
|
90
109
|
|
|
91
|
-
return spock.webex.internal.flag.create(flaggedActivity1)
|
|
92
|
-
.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
});
|
|
110
|
+
return spock.webex.internal.flag.create(flaggedActivity1).then((flagResponse1) => {
|
|
111
|
+
assert.equal(flagResponse1.state, 'flagged');
|
|
112
|
+
assert.equal(flagResponse1['flag-item'], flaggedActivity1.url);
|
|
113
|
+
assert.equal(flagResponse1['conversation-url'], flaggedActivity1.target.url);
|
|
114
|
+
});
|
|
97
115
|
});
|
|
98
116
|
});
|
|
99
117
|
|
|
100
118
|
describe('#list()', () => {
|
|
101
|
-
it('fetches the flag list', () =>
|
|
102
|
-
.then((flagList) => {
|
|
119
|
+
it('fetches the flag list', () =>
|
|
120
|
+
spock.webex.internal.flag.list().then((flagList) => {
|
|
103
121
|
assert.isArray(flagList);
|
|
104
122
|
assert.lengthOf(flagList, 0);
|
|
105
123
|
}));
|
|
@@ -109,21 +127,19 @@ describe('plugin-flag', function () {
|
|
|
109
127
|
it('maps flags to activity', () => {
|
|
110
128
|
const flaggedActivity1 = flagConversation.activities.items[1];
|
|
111
129
|
|
|
112
|
-
return spock.webex.internal.flag.create(flaggedActivity1)
|
|
113
|
-
.
|
|
114
|
-
|
|
115
|
-
const flags = [];
|
|
130
|
+
return spock.webex.internal.flag.create(flaggedActivity1).then((flagResponse1) => {
|
|
131
|
+
assert.equal(flagResponse1.state, 'flagged');
|
|
132
|
+
const flags = [];
|
|
116
133
|
|
|
117
|
-
|
|
134
|
+
flags.push(flagResponse1);
|
|
118
135
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const activity = activities[0];
|
|
136
|
+
return spock.webex.internal.flag.mapToActivities(flags).then((activities) => {
|
|
137
|
+
const activity = activities[0];
|
|
122
138
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
});
|
|
139
|
+
assert.equal(activity.object.displayName, 'Hey! I am doing well. How are you?');
|
|
140
|
+
assert.isDefined(find(activities, {url: flagResponse1['flag-item']}));
|
|
126
141
|
});
|
|
142
|
+
});
|
|
127
143
|
});
|
|
128
144
|
});
|
|
129
145
|
|
|
@@ -131,7 +147,8 @@ describe('plugin-flag', function () {
|
|
|
131
147
|
it('removes the flag from activity', () => {
|
|
132
148
|
const flaggedActivity1 = flagConversation.activities.items[1];
|
|
133
149
|
|
|
134
|
-
return spock.webex.internal.flag
|
|
150
|
+
return spock.webex.internal.flag
|
|
151
|
+
.create(flaggedActivity1)
|
|
135
152
|
.then((flagResponse1) => {
|
|
136
153
|
assert.equal(flagResponse1.state, 'flagged');
|
|
137
154
|
|
|
@@ -149,7 +166,8 @@ describe('plugin-flag', function () {
|
|
|
149
166
|
it('archives the flag for an activity', () => {
|
|
150
167
|
const flaggedActivity1 = flagConversation.activities.items[1];
|
|
151
168
|
|
|
152
|
-
return spock.webex.internal.flag
|
|
169
|
+
return spock.webex.internal.flag
|
|
170
|
+
.create(flaggedActivity1)
|
|
153
171
|
.then((flagResponse1) => {
|
|
154
172
|
assert.equal(flagResponse1.state, 'flagged');
|
|
155
173
|
|
|
@@ -163,7 +181,8 @@ describe('plugin-flag', function () {
|
|
|
163
181
|
it('unflag the flag for an activity', () => {
|
|
164
182
|
const flaggedActivity1 = flagConversation.activities.items[1];
|
|
165
183
|
|
|
166
|
-
return spock.webex.internal.flag
|
|
184
|
+
return spock.webex.internal.flag
|
|
185
|
+
.create(flaggedActivity1)
|
|
167
186
|
.then((flagResponse1) => {
|
|
168
187
|
assert.equal(flagResponse1.state, 'flagged');
|
|
169
188
|
|
package/test/unit/spec/flag.js
CHANGED
|
@@ -13,25 +13,29 @@ describe('plugin-flag', () => {
|
|
|
13
13
|
beforeEach(() => {
|
|
14
14
|
webex = new MockWebex({
|
|
15
15
|
children: {
|
|
16
|
-
flag: Flag
|
|
17
|
-
}
|
|
16
|
+
flag: Flag,
|
|
17
|
+
},
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
describe('#flag()', () => {
|
|
22
|
-
it('requires an activity URL', () =>
|
|
22
|
+
it('requires an activity URL', () =>
|
|
23
|
+
assert.isRejected(webex.internal.flag.create({}, {}), /`activity.url` is required/));
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
describe('#unflag()', () => {
|
|
26
|
-
it('requires a Flag Id', () =>
|
|
27
|
+
it('requires a Flag Id', () =>
|
|
28
|
+
assert.isRejected(webex.internal.flag.unflag({}, {}), /`flag.url` is required/));
|
|
27
29
|
});
|
|
28
30
|
|
|
29
31
|
describe('#archive()', () => {
|
|
30
|
-
it('requires a Flag Id', () =>
|
|
32
|
+
it('requires a Flag Id', () =>
|
|
33
|
+
assert.isRejected(webex.internal.flag.archive({}, {}), /`flag.url` is required/));
|
|
31
34
|
});
|
|
32
35
|
|
|
33
36
|
describe('#remove()', () => {
|
|
34
|
-
it('requires a Flag Id', () =>
|
|
37
|
+
it('requires a Flag Id', () =>
|
|
38
|
+
assert.isRejected(webex.internal.flag.delete({}, {}), /`flag.url` is required/));
|
|
35
39
|
});
|
|
36
40
|
});
|
|
37
41
|
});
|