delectusnon 1.0.0

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.
Files changed (276) hide show
  1. package/.prettierignore +2 -0
  2. package/.travis.yml +33 -0
  3. package/.vscode/launch.json +24 -0
  4. package/.vscode/settings.json +3 -0
  5. package/demos/ago-node-cli/README.md +29 -0
  6. package/demos/ago-node-cli/ago.js +32 -0
  7. package/demos/ago-node-cli/index.js +11 -0
  8. package/demos/ago-node-cli/lib/item-export-command.js +48 -0
  9. package/demos/ago-node-cli/lib/item-search-command.js +35 -0
  10. package/demos/ago-node-cli/package-lock.json +172 -0
  11. package/demos/ago-node-cli/package.json +30 -0
  12. package/demos/attachments/README.md +5 -0
  13. package/demos/attachments/index.html +164 -0
  14. package/demos/attachments/package-lock.json +182 -0
  15. package/demos/attachments/package.json +18 -0
  16. package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
  17. package/demos/batch-geocoder-node/README.md +15 -0
  18. package/demos/batch-geocoder-node/batch-geocode.js +118 -0
  19. package/demos/batch-geocoder-node/config-template.js +18 -0
  20. package/demos/batch-geocoder-node/package-lock.json +116 -0
  21. package/demos/batch-geocoder-node/package.json +39 -0
  22. package/demos/express/README.md +10 -0
  23. package/demos/express/config.json.template +3 -0
  24. package/demos/express/package-lock.json +473 -0
  25. package/demos/express/package.json +18 -0
  26. package/demos/express/server.js +28 -0
  27. package/demos/feature-service-browser/README.md +6 -0
  28. package/demos/feature-service-browser/index.html +122 -0
  29. package/demos/feature-service-browser/package-lock.json +182 -0
  30. package/demos/feature-service-browser/package.json +18 -0
  31. package/demos/geocoder-browser/README.md +10 -0
  32. package/demos/geocoder-browser/config.js.template +1 -0
  33. package/demos/geocoder-browser/index.html +131 -0
  34. package/demos/geocoder-browser/package-lock.json +182 -0
  35. package/demos/geocoder-browser/package.json +19 -0
  36. package/demos/geocoder-browser/post-sign-in.html +25 -0
  37. package/demos/jsapi-integration/README.md +8 -0
  38. package/demos/jsapi-integration/config.js +6 -0
  39. package/demos/jsapi-integration/index.html +79 -0
  40. package/demos/jsapi-integration/package-lock.json +184 -0
  41. package/demos/jsapi-integration/package.json +19 -0
  42. package/demos/oauth2-browser/README.md +12 -0
  43. package/demos/oauth2-browser/authenticate.html +32 -0
  44. package/demos/oauth2-browser/config.js.template +6 -0
  45. package/demos/oauth2-browser/index.html +202 -0
  46. package/demos/oauth2-browser/logo.svg +4 -0
  47. package/demos/oauth2-browser/package-lock.json +163 -0
  48. package/demos/oauth2-browser/package.json +18 -0
  49. package/demos/oauth2-browser/style.css +36 -0
  50. package/demos/oauth2-browser-retry/README.md +25 -0
  51. package/demos/oauth2-browser-retry/authenticate.html +21 -0
  52. package/demos/oauth2-browser-retry/index.html +116 -0
  53. package/demos/oauth2-browser-retry/logo.svg +4 -0
  54. package/demos/vue/.env.example +11 -0
  55. package/demos/vue/.eslintrc.js +17 -0
  56. package/demos/vue/.postcssrc.js +5 -0
  57. package/demos/vue/README.md +17 -0
  58. package/demos/vue/babel.config.js +3 -0
  59. package/demos/vue/package-lock.json +11323 -0
  60. package/demos/vue/package.json +33 -0
  61. package/demos/vue/public/favicon.ico +0 -0
  62. package/demos/vue/public/index.html +24 -0
  63. package/demos/vue/src/assets/logo.svg +29 -0
  64. package/demos/vue/src/components/App.vue +308 -0
  65. package/demos/vue/src/components/Authenticate.vue +65 -0
  66. package/demos/vue/src/components/Loader.vue +230 -0
  67. package/demos/vue/src/main.js +92 -0
  68. package/docs/FAQ.md +28 -0
  69. package/docs/HISTORY.md +62 -0
  70. package/docs/acetate.config.js +223 -0
  71. package/docs/build-typedoc.js +301 -0
  72. package/docs/src/_layout.html +82 -0
  73. package/docs/src/api/_declaration.html +496 -0
  74. package/docs/src/api/_layout.html +127 -0
  75. package/docs/src/api/_package.html +13 -0
  76. package/docs/src/api/index.html +23 -0
  77. package/docs/src/guides/_layout.html +24 -0
  78. package/docs/src/guides/amd-requirejs-dojo.md +40 -0
  79. package/docs/src/guides/babel-and-rollup.md +30 -0
  80. package/docs/src/guides/babel-and-webpack.md +30 -0
  81. package/docs/src/guides/browser-authentication.md +31 -0
  82. package/docs/src/guides/browserify.md +9 -0
  83. package/docs/src/guides/cli-authentication.md +9 -0
  84. package/docs/src/guides/client-server-authentication.md +9 -0
  85. package/docs/src/guides/from-a-cdn.md +36 -0
  86. package/docs/src/guides/index.md +52 -0
  87. package/docs/src/guides/node.md +70 -0
  88. package/docs/src/guides/package-overview.md +8 -0
  89. package/docs/src/guides/server-authentication.md +9 -0
  90. package/docs/src/guides/typescript-and-webpack.md +9 -0
  91. package/docs/src/img/icons.png +0 -0
  92. package/docs/src/img/icons@2x.png +0 -0
  93. package/docs/src/index.html +12 -0
  94. package/docs/src/js/api-search.js +112 -0
  95. package/docs/src/js/nav-toggle.js +41 -0
  96. package/docs/src/sass/_highlight.scss +96 -0
  97. package/docs/src/sass/_icons.scss +157 -0
  98. package/docs/src/sass/style.scss +169 -0
  99. package/jasmine.json +7 -0
  100. package/karma.conf.js +100 -0
  101. package/lerna.json +8 -0
  102. package/notes/README.md +88 -0
  103. package/package.json +88 -0
  104. package/packages/arcgis-rest-auth/README.md +64 -0
  105. package/packages/arcgis-rest-auth/package-lock.json +11 -0
  106. package/packages/arcgis-rest-auth/package.json +51 -0
  107. package/packages/arcgis-rest-auth/src/ApplicationSession.ts +109 -0
  108. package/packages/arcgis-rest-auth/src/UserSession.ts +873 -0
  109. package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
  110. package/packages/arcgis-rest-auth/src/fetch-token.ts +52 -0
  111. package/packages/arcgis-rest-auth/src/generate-token.ts +39 -0
  112. package/packages/arcgis-rest-auth/src/index.ts +8 -0
  113. package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
  114. package/packages/arcgis-rest-auth/test/UserSession.test.ts +995 -0
  115. package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
  116. package/packages/arcgis-rest-auth/test/generateToken.test.ts +130 -0
  117. package/packages/arcgis-rest-auth/test/utils.ts +14 -0
  118. package/packages/arcgis-rest-auth/tsconfig.json +6 -0
  119. package/packages/arcgis-rest-common-types/README.md +61 -0
  120. package/packages/arcgis-rest-common-types/package.json +38 -0
  121. package/packages/arcgis-rest-common-types/src/group.ts +54 -0
  122. package/packages/arcgis-rest-common-types/src/index.ts +467 -0
  123. package/packages/arcgis-rest-common-types/src/item.ts +45 -0
  124. package/packages/arcgis-rest-common-types/src/webmap.ts +1232 -0
  125. package/packages/arcgis-rest-common-types/tsconfig.json +11 -0
  126. package/packages/arcgis-rest-feature-service/README.md +70 -0
  127. package/packages/arcgis-rest-feature-service/package-lock.json +11 -0
  128. package/packages/arcgis-rest-feature-service/package.json +50 -0
  129. package/packages/arcgis-rest-feature-service/src/add.ts +81 -0
  130. package/packages/arcgis-rest-feature-service/src/addAttachment.ts +65 -0
  131. package/packages/arcgis-rest-feature-service/src/delete.ts +85 -0
  132. package/packages/arcgis-rest-feature-service/src/deleteAttachments.ts +68 -0
  133. package/packages/arcgis-rest-feature-service/src/getAttachments.ts +64 -0
  134. package/packages/arcgis-rest-feature-service/src/helpers.ts +80 -0
  135. package/packages/arcgis-rest-feature-service/src/index.ts +12 -0
  136. package/packages/arcgis-rest-feature-service/src/query.ts +172 -0
  137. package/packages/arcgis-rest-feature-service/src/queryRelated.ts +91 -0
  138. package/packages/arcgis-rest-feature-service/src/update.ts +81 -0
  139. package/packages/arcgis-rest-feature-service/src/updateAttachment.ts +74 -0
  140. package/packages/arcgis-rest-feature-service/test/attachments.test.ts +203 -0
  141. package/packages/arcgis-rest-feature-service/test/features.test.ts +252 -0
  142. package/packages/arcgis-rest-feature-service/test/mocks/feature.ts +279 -0
  143. package/packages/arcgis-rest-feature-service/test/mocks/foo.txt +1 -0
  144. package/packages/arcgis-rest-feature-service/tsconfig.json +6 -0
  145. package/packages/arcgis-rest-feature-service-admin/README.md +66 -0
  146. package/packages/arcgis-rest-feature-service-admin/package-lock.json +11 -0
  147. package/packages/arcgis-rest-feature-service-admin/package.json +53 -0
  148. package/packages/arcgis-rest-feature-service-admin/src/addTo.ts +70 -0
  149. package/packages/arcgis-rest-feature-service-admin/src/create.ts +195 -0
  150. package/packages/arcgis-rest-feature-service-admin/src/index.ts +2 -0
  151. package/packages/arcgis-rest-feature-service-admin/test/addTo.test.ts +310 -0
  152. package/packages/arcgis-rest-feature-service-admin/test/create.test.ts +412 -0
  153. package/packages/arcgis-rest-feature-service-admin/test/mocks/move.ts +14 -0
  154. package/packages/arcgis-rest-feature-service-admin/test/mocks/service.ts +72 -0
  155. package/packages/arcgis-rest-feature-service-admin/tsconfig.json +6 -0
  156. package/packages/arcgis-rest-geocoder/README.md +79 -0
  157. package/packages/arcgis-rest-geocoder/package-lock.json +11 -0
  158. package/packages/arcgis-rest-geocoder/package.json +52 -0
  159. package/packages/arcgis-rest-geocoder/src/bulk.ts +102 -0
  160. package/packages/arcgis-rest-geocoder/src/geocode.ts +117 -0
  161. package/packages/arcgis-rest-geocoder/src/helpers.ts +79 -0
  162. package/packages/arcgis-rest-geocoder/src/index.ts +8 -0
  163. package/packages/arcgis-rest-geocoder/src/reverse.ts +84 -0
  164. package/packages/arcgis-rest-geocoder/src/suggest.ts +72 -0
  165. package/packages/arcgis-rest-geocoder/test/bulk.test.ts +113 -0
  166. package/packages/arcgis-rest-geocoder/test/geocode.test.ts +121 -0
  167. package/packages/arcgis-rest-geocoder/test/helpers.test.ts +113 -0
  168. package/packages/arcgis-rest-geocoder/test/mocks/responses.ts +591 -0
  169. package/packages/arcgis-rest-geocoder/test/reverse.test.ts +126 -0
  170. package/packages/arcgis-rest-geocoder/test/suggest.test.ts +77 -0
  171. package/packages/arcgis-rest-geocoder/tsconfig.json +6 -0
  172. package/packages/arcgis-rest-groups/README.md +64 -0
  173. package/packages/arcgis-rest-groups/package-lock.json +11 -0
  174. package/packages/arcgis-rest-groups/package.json +52 -0
  175. package/packages/arcgis-rest-groups/src/create.ts +34 -0
  176. package/packages/arcgis-rest-groups/src/get.ts +95 -0
  177. package/packages/arcgis-rest-groups/src/helpers.ts +26 -0
  178. package/packages/arcgis-rest-groups/src/index.ts +11 -0
  179. package/packages/arcgis-rest-groups/src/notification.ts +77 -0
  180. package/packages/arcgis-rest-groups/src/protect.ts +40 -0
  181. package/packages/arcgis-rest-groups/src/remove.ts +23 -0
  182. package/packages/arcgis-rest-groups/src/search.ts +64 -0
  183. package/packages/arcgis-rest-groups/src/update.ts +36 -0
  184. package/packages/arcgis-rest-groups/test/crud.test.ts +104 -0
  185. package/packages/arcgis-rest-groups/test/get.test.ts +101 -0
  186. package/packages/arcgis-rest-groups/test/mocks/responses.ts +141 -0
  187. package/packages/arcgis-rest-groups/test/notification.test.ts +102 -0
  188. package/packages/arcgis-rest-groups/test/protect.test.ts +64 -0
  189. package/packages/arcgis-rest-groups/test/search.test.ts +85 -0
  190. package/packages/arcgis-rest-groups/tsconfig.json +6 -0
  191. package/packages/arcgis-rest-items/README.md +66 -0
  192. package/packages/arcgis-rest-items/package-lock.json +11 -0
  193. package/packages/arcgis-rest-items/package.json +52 -0
  194. package/packages/arcgis-rest-items/src/add.ts +103 -0
  195. package/packages/arcgis-rest-items/src/create.ts +110 -0
  196. package/packages/arcgis-rest-items/src/get.ts +79 -0
  197. package/packages/arcgis-rest-items/src/helpers.ts +147 -0
  198. package/packages/arcgis-rest-items/src/index.ts +11 -0
  199. package/packages/arcgis-rest-items/src/protect.ts +38 -0
  200. package/packages/arcgis-rest-items/src/remove.ts +58 -0
  201. package/packages/arcgis-rest-items/src/search.ts +78 -0
  202. package/packages/arcgis-rest-items/src/update.ts +134 -0
  203. package/packages/arcgis-rest-items/test/add.test.ts +256 -0
  204. package/packages/arcgis-rest-items/test/create.test.ts +371 -0
  205. package/packages/arcgis-rest-items/test/get.test.ts +181 -0
  206. package/packages/arcgis-rest-items/test/mocks/foo.zip +0 -0
  207. package/packages/arcgis-rest-items/test/mocks/item.ts +33 -0
  208. package/packages/arcgis-rest-items/test/mocks/resources.ts +31 -0
  209. package/packages/arcgis-rest-items/test/mocks/search.ts +63 -0
  210. package/packages/arcgis-rest-items/test/protect.test.ts +122 -0
  211. package/packages/arcgis-rest-items/test/remove.test.ts +161 -0
  212. package/packages/arcgis-rest-items/test/search.test.ts +159 -0
  213. package/packages/arcgis-rest-items/test/update.test.ts +450 -0
  214. package/packages/arcgis-rest-items/tsconfig.json +6 -0
  215. package/packages/arcgis-rest-request/README.md +65 -0
  216. package/packages/arcgis-rest-request/package-lock.json +11 -0
  217. package/packages/arcgis-rest-request/package.json +42 -0
  218. package/packages/arcgis-rest-request/src/index.ts +13 -0
  219. package/packages/arcgis-rest-request/src/request.ts +293 -0
  220. package/packages/arcgis-rest-request/src/utils/ArcGISAuthError.ts +67 -0
  221. package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
  222. package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
  223. package/packages/arcgis-rest-request/src/utils/check-for-errors.ts +65 -0
  224. package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +34 -0
  225. package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +23 -0
  226. package/packages/arcgis-rest-request/src/utils/get-portal-url.ts +25 -0
  227. package/packages/arcgis-rest-request/src/utils/get-portal.ts +45 -0
  228. package/packages/arcgis-rest-request/src/utils/process-params.ts +99 -0
  229. package/packages/arcgis-rest-request/test/mocks/errors.ts +68 -0
  230. package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
  231. package/packages/arcgis-rest-request/test/mocks/portal.ts +112 -0
  232. package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
  233. package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
  234. package/packages/arcgis-rest-request/test/request.test.ts +299 -0
  235. package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +170 -0
  236. package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
  237. package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
  238. package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
  239. package/packages/arcgis-rest-request/test/utils/get-portal-url.test.ts +37 -0
  240. package/packages/arcgis-rest-request/test/utils/portal.test.ts +97 -0
  241. package/packages/arcgis-rest-request/test/utils/process-params.test.ts +193 -0
  242. package/packages/arcgis-rest-request/tsconfig.json +6 -0
  243. package/packages/arcgis-rest-sharing/README.md +67 -0
  244. package/packages/arcgis-rest-sharing/package-lock.json +11 -0
  245. package/packages/arcgis-rest-sharing/package.json +57 -0
  246. package/packages/arcgis-rest-sharing/src/access.ts +85 -0
  247. package/packages/arcgis-rest-sharing/src/group-sharing.ts +211 -0
  248. package/packages/arcgis-rest-sharing/src/helpers.ts +82 -0
  249. package/packages/arcgis-rest-sharing/src/index.ts +5 -0
  250. package/packages/arcgis-rest-sharing/test/access.test.ts +154 -0
  251. package/packages/arcgis-rest-sharing/test/group-sharing.test.ts +566 -0
  252. package/packages/arcgis-rest-sharing/test/helpers.test.ts +55 -0
  253. package/packages/arcgis-rest-sharing/test/mocks/sharing.ts +18 -0
  254. package/packages/arcgis-rest-sharing/tsconfig.json +6 -0
  255. package/packages/arcgis-rest-users/README.md +71 -0
  256. package/packages/arcgis-rest-users/package-lock.json +11 -0
  257. package/packages/arcgis-rest-users/package.json +51 -0
  258. package/packages/arcgis-rest-users/src/get.ts +69 -0
  259. package/packages/arcgis-rest-users/src/index.ts +6 -0
  260. package/packages/arcgis-rest-users/src/invitation.ts +166 -0
  261. package/packages/arcgis-rest-users/src/notification.ts +73 -0
  262. package/packages/arcgis-rest-users/test/get.test.ts +99 -0
  263. package/packages/arcgis-rest-users/test/invitation.test.ts +169 -0
  264. package/packages/arcgis-rest-users/test/mocks/invitation.ts +70 -0
  265. package/packages/arcgis-rest-users/test/mocks/notification.ts +34 -0
  266. package/packages/arcgis-rest-users/test/mocks/user.ts +173 -0
  267. package/packages/arcgis-rest-users/test/notification.test.ts +83 -0
  268. package/packages/arcgis-rest-users/tsconfig.json +6 -0
  269. package/support/changelog.js +394 -0
  270. package/support/deploy-doc-site.js +16 -0
  271. package/support/publish.sh +43 -0
  272. package/support/test-helpers.js +8 -0
  273. package/tsconfig.json +69 -0
  274. package/tslint.json +15 -0
  275. package/umd-base-profile.js +82 -0
  276. package/umd-production-profile.js +13 -0
@@ -0,0 +1,566 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import * as fetchMock from "fetch-mock";
5
+ import { shareItemWithGroup, unshareItemWithGroup } from "../src/index";
6
+ import { MOCK_USER_SESSION } from "./mocks/sharing";
7
+
8
+ import {
9
+ AnonUserResponse,
10
+ GroupNonMemberUserResponse,
11
+ GroupMemberUserResponse,
12
+ GroupAdminUserResponse,
13
+ OrgAdminUserResponse
14
+ } from "../../arcgis-rest-users/test/mocks/user";
15
+
16
+ import { SearchResponse } from "../../arcgis-rest-items/test/mocks/search";
17
+
18
+ const SharingResponse = {
19
+ notSharedWith: [] as any,
20
+ itemId: "n3v"
21
+ };
22
+
23
+ const FailedSharingResponse = {
24
+ notSharedWith: ["t6b"],
25
+ itemId: "n3v"
26
+ };
27
+
28
+ const UnsharingResponse = {
29
+ notUnsharedFrom: [] as any,
30
+ itemId: "a5b"
31
+ };
32
+
33
+ const CachedSharingResponse = {
34
+ notSharedWith: [] as any,
35
+ itemId: "a5b",
36
+ shortcut: true
37
+ };
38
+
39
+ const CachedUnsharingResponse = {
40
+ notUnsharedFrom: [] as any,
41
+ itemId: "n3v",
42
+ shortcut: true
43
+ };
44
+
45
+ const NoResultsSearchResponse = {
46
+ query: "",
47
+ total: 0,
48
+ start: 0,
49
+ num: 0,
50
+ nextStart: 0,
51
+ results: [] as any
52
+ };
53
+
54
+ export const GroupOwnerResponse = {
55
+ id: "tb6",
56
+ title: "fake group",
57
+ userMembership: {
58
+ memberType: "owner"
59
+ }
60
+ };
61
+
62
+ export const GroupMemberResponse = {
63
+ id: "tb6",
64
+ title: "fake group",
65
+ userMembership: {
66
+ memberType: "member"
67
+ }
68
+ };
69
+
70
+ export const GroupAdminResponse = {
71
+ id: "tb6",
72
+ title: "fake group",
73
+ userMembership: {
74
+ memberType: "admin"
75
+ }
76
+ };
77
+
78
+ export const GroupNoAccessResponse = {
79
+ error: {
80
+ code: 400,
81
+ messageCode: "COM_0003",
82
+ message: "Group does not exist or is inaccessible.",
83
+ details: [] as any[]
84
+ }
85
+ };
86
+
87
+ describe("shareItemWithGroup() ::", () => {
88
+ // make sure session doesnt cache metadata
89
+ beforeEach(function() {
90
+ MOCK_USER_SESSION._user = null;
91
+ });
92
+
93
+ afterEach(fetchMock.restore);
94
+
95
+ it("should share an item with a group by owner", done => {
96
+ // this is used when isOrgAdmin is called...
97
+ fetchMock.once(
98
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
99
+ GroupMemberUserResponse
100
+ );
101
+ // this is called when we try to determine if the item is already in the group
102
+ fetchMock.once(
103
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
104
+ SearchResponse
105
+ );
106
+
107
+ // called when we determine if the user is a member of the group
108
+ fetchMock.get(
109
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
110
+ GroupOwnerResponse
111
+ );
112
+
113
+ // the actual sharing request
114
+ fetchMock.once(
115
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/n3v/share",
116
+ SharingResponse
117
+ );
118
+
119
+ shareItemWithGroup({
120
+ authentication: MOCK_USER_SESSION,
121
+ id: "n3v",
122
+ groupId: "t6b"
123
+ })
124
+ .then(response => {
125
+ expect(fetchMock.done()).toBeTruthy(
126
+ "All fetchMocks should have been called"
127
+ );
128
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
129
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/n3v/share"
130
+ );
131
+ expect(url).toBe(
132
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/n3v/share"
133
+ );
134
+ expect(options.method).toBe("POST");
135
+ expect(response).toEqual(SharingResponse);
136
+ expect(options.body).toContain("f=json");
137
+ expect(options.body).toContain("groups=t6b");
138
+ done();
139
+ })
140
+ .catch(e => {
141
+ expect(fetchMock.done()).toBeTruthy(
142
+ "All fetchMocks should have been called"
143
+ );
144
+ fail(e);
145
+ });
146
+ });
147
+
148
+ it("should fail to share an item with a group if the request is made by a non-org admin and non-group member", done => {
149
+ fetchMock.once(
150
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
151
+ GroupNonMemberUserResponse
152
+ );
153
+
154
+ fetchMock.once(
155
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
156
+ SearchResponse
157
+ );
158
+
159
+ shareItemWithGroup({
160
+ authentication: MOCK_USER_SESSION,
161
+ id: "n3v",
162
+ groupId: "t6b"
163
+ }).catch(e => {
164
+ expect(fetchMock.done()).toBeTruthy(
165
+ "All fetchMocks should have been called"
166
+ );
167
+ expect(e.message).toBe(
168
+ "This item can not be shared by jsmith as they are not a member of the specified group t6b."
169
+ );
170
+ done();
171
+ });
172
+ });
173
+
174
+ it("should share an item with a group by org administrator", done => {
175
+ fetchMock.once(
176
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
177
+ OrgAdminUserResponse
178
+ );
179
+
180
+ fetchMock.once(
181
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
182
+ NoResultsSearchResponse
183
+ );
184
+
185
+ // called when we determine if the user is a member of the group
186
+ fetchMock.get(
187
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
188
+ GroupOwnerResponse
189
+ );
190
+
191
+ fetchMock.once(
192
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/n3v/share",
193
+ SharingResponse
194
+ );
195
+
196
+ shareItemWithGroup({
197
+ authentication: MOCK_USER_SESSION,
198
+ id: "n3v",
199
+ groupId: "t6b",
200
+ owner: "casey"
201
+ })
202
+ .then(response => {
203
+ expect(fetchMock.done()).toBeTruthy(
204
+ "All fetchMocks should have been called"
205
+ );
206
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
207
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/n3v/share"
208
+ );
209
+ expect(url).toBe(
210
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/n3v/share"
211
+ );
212
+ expect(options.method).toBe("POST");
213
+ expect(response).toEqual(SharingResponse);
214
+ expect(options.body).toContain("f=json");
215
+ expect(options.body).toContain("groups=t6b");
216
+ done();
217
+ })
218
+ .catch(e => {
219
+ fail(e);
220
+ });
221
+ });
222
+
223
+ it("should share an item with a group by group owner/admin", done => {
224
+ fetchMock.once(
225
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
226
+ GroupAdminUserResponse
227
+ );
228
+
229
+ fetchMock.once(
230
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
231
+ SearchResponse
232
+ );
233
+
234
+ // called when we determine if the user is a member of the group
235
+ fetchMock.get(
236
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
237
+ GroupOwnerResponse
238
+ );
239
+
240
+ fetchMock.once(
241
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/n3v/share",
242
+ SharingResponse
243
+ );
244
+
245
+ shareItemWithGroup({
246
+ authentication: MOCK_USER_SESSION,
247
+ id: "n3v",
248
+ groupId: "t6b",
249
+ owner: "otherguy"
250
+ })
251
+ .then(response => {
252
+ expect(fetchMock.done()).toBeTruthy(
253
+ "All fetchMocks should have been called"
254
+ );
255
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
256
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/n3v/share"
257
+ );
258
+ expect(url).toBe(
259
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/n3v/share"
260
+ );
261
+ expect(options.method).toBe("POST");
262
+ expect(response).toEqual(SharingResponse);
263
+ expect(options.body).toContain("f=json");
264
+ expect(options.body).toContain("groups=t6b");
265
+ done();
266
+ })
267
+ .catch(e => {
268
+ expect(fetchMock.done()).toBeTruthy(
269
+ "All fetchMocks should have been called"
270
+ );
271
+ fail(e);
272
+ });
273
+ });
274
+
275
+ it("should mock the response if an item was previously shared with a group", done => {
276
+ fetchMock.once(
277
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
278
+ GroupAdminUserResponse
279
+ );
280
+
281
+ fetchMock.once(
282
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
283
+ SearchResponse
284
+ );
285
+
286
+ shareItemWithGroup({
287
+ authentication: MOCK_USER_SESSION,
288
+ id: "a5b",
289
+ groupId: "t6b"
290
+ })
291
+ .then(response => {
292
+ // no web request to share at all
293
+ expect(response).toEqual(CachedSharingResponse);
294
+ done();
295
+ })
296
+ .catch(e => {
297
+ expect(fetchMock.done()).toBeTruthy(
298
+ "All fetchMocks should have been called"
299
+ );
300
+ fail(e);
301
+ });
302
+ });
303
+
304
+ it("should throw if the person trying to share doesnt own the item, is not an admin or member of said group", done => {
305
+ fetchMock.once(
306
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
307
+ GroupMemberUserResponse
308
+ );
309
+
310
+ fetchMock.once(
311
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
312
+ SearchResponse
313
+ );
314
+
315
+ // called when we determine if the user is a member of the group
316
+ fetchMock.get(
317
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
318
+ GroupMemberResponse
319
+ );
320
+
321
+ shareItemWithGroup({
322
+ authentication: MOCK_USER_SESSION,
323
+ id: "n3v",
324
+ groupId: "t6b",
325
+ owner: "casey"
326
+ }).catch(e => {
327
+ expect(fetchMock.done()).toBeTruthy(
328
+ "All fetchMocks should have been called"
329
+ );
330
+ expect(e.message).toContain(
331
+ "This item can not be shared by jsmith as they are neither the owner, a groupAdmin of t6b, nor an org_admin."
332
+ );
333
+ done();
334
+ });
335
+ });
336
+
337
+ it("should throw if the response from the server is fishy", done => {
338
+ fetchMock.once(
339
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
340
+ GroupMemberUserResponse
341
+ );
342
+
343
+ fetchMock.once(
344
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
345
+ SearchResponse
346
+ );
347
+
348
+ fetchMock.once(
349
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/n3v/share",
350
+ FailedSharingResponse
351
+ );
352
+
353
+ fetchMock.get(
354
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
355
+ GroupMemberResponse
356
+ );
357
+
358
+ shareItemWithGroup({
359
+ authentication: MOCK_USER_SESSION,
360
+ id: "n3v",
361
+ groupId: "t6b"
362
+ }).catch(e => {
363
+ expect(fetchMock.done()).toBeTruthy(
364
+ "All fetchMocks should have been called"
365
+ );
366
+ expect(e.message).toBe("Item n3v could not be shared to group t6b.");
367
+ done();
368
+ });
369
+ });
370
+ });
371
+
372
+ describe("unshareItemWithGroup() ::", () => {
373
+ // make sure session doesnt cache metadata
374
+ beforeEach(function() {
375
+ MOCK_USER_SESSION._user = null;
376
+ });
377
+
378
+ afterEach(fetchMock.restore);
379
+
380
+ it("should unshare an item with a group by owner", done => {
381
+ fetchMock.once(
382
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
383
+ GroupMemberUserResponse
384
+ );
385
+
386
+ fetchMock.once(
387
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
388
+ SearchResponse
389
+ );
390
+
391
+ fetchMock.once(
392
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/a5b/unshare",
393
+ UnsharingResponse
394
+ );
395
+
396
+ fetchMock.get(
397
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
398
+ GroupOwnerResponse
399
+ );
400
+
401
+ unshareItemWithGroup({
402
+ authentication: MOCK_USER_SESSION,
403
+ id: "a5b",
404
+ groupId: "t6b"
405
+ })
406
+ .then(response => {
407
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
408
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/a5b/unshare"
409
+ );
410
+ expect(url).toBe(
411
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/jsmith/items/a5b/unshare"
412
+ );
413
+ expect(options.method).toBe("POST");
414
+ expect(response).toEqual(UnsharingResponse);
415
+ expect(options.body).toContain("f=json");
416
+ expect(options.body).toContain("groups=t6b");
417
+ done();
418
+ })
419
+ .catch(e => {
420
+ expect(fetchMock.done()).toBeTruthy(
421
+ "All fetchMocks should have been called"
422
+ );
423
+ fail(e);
424
+ });
425
+ });
426
+
427
+ it("should unshare an item with a group by org administrator", done => {
428
+ fetchMock.once(
429
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
430
+ OrgAdminUserResponse
431
+ );
432
+
433
+ fetchMock.once(
434
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
435
+ SearchResponse
436
+ );
437
+
438
+ fetchMock.once(
439
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/a5b/unshare",
440
+ UnsharingResponse
441
+ );
442
+
443
+ fetchMock.get(
444
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
445
+ GroupOwnerResponse
446
+ );
447
+
448
+ unshareItemWithGroup({
449
+ authentication: MOCK_USER_SESSION,
450
+ id: "a5b",
451
+ groupId: "t6b",
452
+ owner: "casey"
453
+ })
454
+ .then(response => {
455
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
456
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/a5b/unshare"
457
+ );
458
+ expect(url).toBe(
459
+ "https://myorg.maps.arcgis.com/sharing/rest/content/users/casey/items/a5b/unshare"
460
+ );
461
+ expect(options.method).toBe("POST");
462
+ expect(response).toEqual(UnsharingResponse);
463
+ expect(options.body).toContain("f=json");
464
+ expect(options.body).toContain("groups=t6b");
465
+ done();
466
+ })
467
+ .catch(e => {
468
+ fail(e);
469
+ });
470
+ });
471
+
472
+ it("should unshare an item with a group by group admin", done => {
473
+ fetchMock.once(
474
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
475
+ GroupAdminUserResponse
476
+ );
477
+
478
+ fetchMock.once(
479
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
480
+ SearchResponse
481
+ );
482
+
483
+ fetchMock.once(
484
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/a5b/unshare",
485
+ UnsharingResponse
486
+ );
487
+
488
+ fetchMock.get(
489
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/t6b?f=json&token=fake-token",
490
+ GroupAdminResponse
491
+ );
492
+
493
+ unshareItemWithGroup({
494
+ authentication: MOCK_USER_SESSION,
495
+ id: "a5b",
496
+ groupId: "t6b",
497
+ owner: "otherguy"
498
+ })
499
+ .then(response => {
500
+ const [url, options]: [string, RequestInit] = fetchMock.lastCall(
501
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/a5b/unshare"
502
+ );
503
+ expect(url).toBe(
504
+ "https://myorg.maps.arcgis.com/sharing/rest/content/items/a5b/unshare"
505
+ );
506
+ expect(options.method).toBe("POST");
507
+ expect(response).toEqual(UnsharingResponse);
508
+ expect(options.body).toContain("f=json");
509
+ expect(options.body).toContain("groups=t6b");
510
+ done();
511
+ })
512
+ .catch(e => {
513
+ fail(e);
514
+ });
515
+ });
516
+
517
+ it("should shortcircuit share if an item was previously unshared with a group", done => {
518
+ fetchMock.once(
519
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
520
+ GroupMemberUserResponse
521
+ );
522
+
523
+ fetchMock.once(
524
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
525
+ SearchResponse
526
+ );
527
+
528
+ unshareItemWithGroup({
529
+ authentication: MOCK_USER_SESSION,
530
+ id: "n3v",
531
+ groupId: "t6b"
532
+ })
533
+ .then(response => {
534
+ // no web request to unshare at all
535
+ expect(response).toEqual(CachedUnsharingResponse);
536
+ done();
537
+ })
538
+ .catch(e => {
539
+ fail(e);
540
+ });
541
+ });
542
+
543
+ it("should throw if the person trying to unshare doesnt own the item, is not an admin or member of said group", done => {
544
+ fetchMock.once(
545
+ "https://myorg.maps.arcgis.com/sharing/rest/community/users/jsmith?f=json&token=fake-token",
546
+ AnonUserResponse
547
+ );
548
+
549
+ fetchMock.once(
550
+ "https://myorg.maps.arcgis.com/sharing/rest/search",
551
+ SearchResponse
552
+ );
553
+
554
+ unshareItemWithGroup({
555
+ authentication: MOCK_USER_SESSION,
556
+ id: "a5b",
557
+ groupId: "t6b",
558
+ owner: "jones"
559
+ }).catch(e => {
560
+ expect(e.message).toContain(
561
+ "This item can not be unshared by jsmith as they are not a member of the specified group t6b."
562
+ );
563
+ done();
564
+ });
565
+ });
566
+ });
@@ -0,0 +1,55 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import * as fetchMock from "fetch-mock";
5
+ import { getUserMembership } from "../src/helpers";
6
+ import { MOCK_USER_SESSION } from "./mocks/sharing";
7
+ import {
8
+ GroupOwnerResponse,
9
+ GroupNoAccessResponse
10
+ } from "./group-sharing.test";
11
+
12
+ describe("sharing helpers ::", () => {
13
+ afterEach(fetchMock.restore);
14
+ describe("getUserMembership ::", () => {
15
+ it("should return nonmember if group could not be fetched", done => {
16
+ fetchMock.once(
17
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/tb6?f=json&token=fake-token",
18
+ GroupNoAccessResponse
19
+ );
20
+ getUserMembership({
21
+ id: "ignoreme",
22
+ groupId: "tb6",
23
+ authentication: MOCK_USER_SESSION
24
+ })
25
+ .then(result => {
26
+ expect(fetchMock.done()).toBeTruthy();
27
+ expect(result).toBe("nonmember", "should return nonmember");
28
+ done();
29
+ })
30
+ .catch(e => {
31
+ fail(e);
32
+ });
33
+ });
34
+
35
+ it("should request the group and return the member type", done => {
36
+ fetchMock.once(
37
+ "https://myorg.maps.arcgis.com/sharing/rest/community/groups/tb6?f=json&token=fake-token",
38
+ GroupOwnerResponse
39
+ );
40
+ getUserMembership({
41
+ id: "ignoreme",
42
+ groupId: "tb6",
43
+ authentication: MOCK_USER_SESSION
44
+ })
45
+ .then(result => {
46
+ expect(fetchMock.done()).toBeTruthy();
47
+ expect(result).toBe("owner", "should return owner");
48
+ done();
49
+ })
50
+ .catch(e => {
51
+ fail(e);
52
+ });
53
+ });
54
+ });
55
+ });
@@ -0,0 +1,18 @@
1
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
2
+ * Apache-2.0 */
3
+
4
+ import { UserSession } from "@esri/arcgis-rest-auth";
5
+ import { TOMORROW } from "@esri/arcgis-rest-auth/test/utils";
6
+
7
+ export const MOCK_USER_SESSION = new UserSession({
8
+ clientId: "clientId",
9
+ redirectUri: "https://example-app.com/redirect-uri",
10
+ token: "fake-token",
11
+ tokenExpires: TOMORROW,
12
+ refreshToken: "refreshToken",
13
+ refreshTokenExpires: TOMORROW,
14
+ refreshTokenTTL: 1440,
15
+ username: "jsmith",
16
+ password: "123456",
17
+ portal: "https://myorg.maps.arcgis.com/sharing/rest"
18
+ });
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "include": [
4
+ "src/**/*.ts"
5
+ ]
6
+ }