@livepreso/api 6.44.0 → 6.45.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.
- package/.eslintrc.js +3 -0
- package/.rush/temp/256021b5963b4c0221d3dec247b697b9691a9b2c.log +10 -0
- package/.rush/temp/2a322f00f12cf9d1e64afe81275cc78d01c49050.log +10 -0
- package/.rush/temp/30061f1865447dcbb3f20a305061205f3dbe6091.log +10 -0
- package/.rush/temp/45522aea0dee8cb2be1a53248ba45bd235743b43.log +10 -0
- package/.rush/temp/58fcbb7f15a76326d40e0839ab179755da82a891.log +10 -0
- package/.rush/temp/5bc0bba70b733baa4dd976667ba0a1386e516186.log +10 -0
- package/.rush/temp/64f1bb696f8d7d7e72907b80df316b127f72e23e.log +10 -0
- package/.rush/temp/6f640f951414ea68adb65c17e4ed7527cde54faf.log +10 -0
- package/.rush/temp/7c7b958682d4ab5697530be47d0aac62efe1adf1.log +10 -0
- package/.rush/temp/82bfb987463fbcfebf04022e6ed00015c73879c8.log +10 -0
- package/.rush/temp/844034aa6e542115075e8f3dc5ffc640973e0064.log +10 -0
- package/.rush/temp/8b42957a7c15da1f29cb57bee125f13affa70dca.log +10 -0
- package/.rush/temp/a769db9d81a23000c0e9b1bf4f1a9a9e721d0d7c.log +10 -0
- package/.rush/temp/a87d3a8b4ece87ec66f27c86226a9f205617681f.log +10 -0
- package/.rush/temp/bb7a5bdcc4af4ad1507f81f33774b31f5b4e4fb7.log +10 -0
- package/.rush/temp/c20e29ccaaa9231b38a28bb24451b4ce7562cdc0.log +10 -0
- package/.rush/temp/e21303db8f59b4625fd184c9114377d781fd24f8.log +10 -0
- package/.rush/temp/e6d303862765b6a5f41dd483d0f9ae083a1fae10.log +10 -0
- package/.rush/temp/eaf69fbc059d2f1258d7569136180d4a1d3c7072.log +10 -0
- package/.rush/temp/f85d279e2674966daaec83e1c3986a96f86ef304.log +10 -0
- package/.rush/temp/fc0a332c5b34c6b90006850cf2d93a48fb4b9a6e.log +10 -0
- package/.rush/temp/package-deps_build.json +170 -0
- package/.rush/temp/package-deps_test.json +38 -36
- package/.rush/temp/shrinkwrap-deps.json +231 -240
- package/CHANGELOG.json +17 -0
- package/CHANGELOG.md +8 -1
- package/api.build.log +4 -2
- package/bin/test.sh +0 -1
- package/cjs/auth.js +36 -10
- package/cjs/auth.js.map +1 -1
- package/cjs/auth.spec.js +12 -6
- package/cjs/auth.spec.js.map +1 -1
- package/cjs/collections/base.js +10 -2
- package/cjs/collections/base.js.map +1 -1
- package/cjs/collections/base.spec.js +22 -4
- package/cjs/collections/base.spec.js.map +1 -1
- package/cjs/collections/deck-version-screenshots.js +62 -0
- package/cjs/collections/deck-version-screenshots.js.map +1 -0
- package/cjs/collections.js +13 -0
- package/cjs/collections.js.map +1 -1
- package/cjs/models/activity-item.js +3 -1
- package/cjs/models/activity-item.js.map +1 -1
- package/cjs/models/appointment.js +11 -1
- package/cjs/models/appointment.js.map +1 -1
- package/cjs/models/auto-adjunct.js +3 -1
- package/cjs/models/auto-adjunct.js.map +1 -1
- package/cjs/models/base.js +19 -1
- package/cjs/models/base.js.map +1 -1
- package/cjs/models/base.spec.js +9 -0
- package/cjs/models/base.spec.js.map +1 -1
- package/cjs/models/deck-version-screenshot.js +59 -0
- package/cjs/models/deck-version-screenshot.js.map +1 -0
- package/cjs/models/deck-version.js +28 -5
- package/cjs/models/deck-version.js.map +1 -1
- package/cjs/models/feed-data.js +5 -0
- package/cjs/models/feed-data.js.map +1 -1
- package/cjs/models/image.js +34 -0
- package/cjs/models/image.js.map +1 -1
- package/cjs/models/manifest-json.js +1 -1
- package/cjs/models/manifest-json.js.map +1 -1
- package/cjs/models/section.js +3 -1
- package/cjs/models/section.js.map +1 -1
- package/cjs/models/slide.js +3 -1
- package/cjs/models/slide.js.map +1 -1
- package/cjs/models/template.js +3 -1
- package/cjs/models/template.js.map +1 -1
- package/cjs/models/token.js +56 -0
- package/cjs/models/token.js.map +1 -0
- package/cjs/models/user.js +2 -1
- package/cjs/models/user.js.map +1 -1
- package/cjs/models.js +26 -0
- package/cjs/models.js.map +1 -1
- package/cjs/presentation/appointment-presentation.js +7 -3
- package/cjs/presentation/appointment-presentation.js.map +1 -1
- package/cjs/presentation/base-presentation-model.js +111 -2
- package/cjs/presentation/base-presentation-model.js.map +1 -1
- package/cjs/presentation/base-presentation-model.spec.js +56 -0
- package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
- package/cjs/presentation/presentation-deck.js +33 -6
- package/cjs/presentation/presentation-deck.js.map +1 -1
- package/cjs/presentation/presentation-deck.spec.js +53 -0
- package/cjs/presentation/presentation-deck.spec.js.map +1 -1
- package/cjs/presentation/presentation-section.js +42 -16
- package/cjs/presentation/presentation-section.js.map +1 -1
- package/cjs/presentation/presentation-section.spec.js +121 -3
- package/cjs/presentation/presentation-section.spec.js.map +1 -1
- package/cjs/presentation/presentation-slide.js +30 -13
- package/cjs/presentation/presentation-slide.js.map +1 -1
- package/cjs/presentation/presentation-slide.spec.js +94 -2
- package/cjs/presentation/presentation-slide.spec.js.map +1 -1
- package/cjs/presentation/presentation.js +112 -8
- package/cjs/presentation/presentation.js.map +1 -1
- package/jest.config.js +1 -0
- package/package.json +4 -4
- package/src/auth.js +44 -8
- package/src/auth.spec.js +2 -0
- package/src/collections/base.js +10 -4
- package/src/collections/base.spec.js +17 -3
- package/src/collections/deck-version-screenshots.js +48 -0
- package/src/collections.js +1 -0
- package/src/models/activity-item.js +2 -0
- package/src/models/appointment.js +12 -0
- package/src/models/auto-adjunct.js +2 -0
- package/src/models/base.js +19 -1
- package/src/models/base.spec.js +16 -9
- package/src/models/deck-version-screenshot.js +48 -0
- package/src/models/deck-version.js +30 -4
- package/src/models/feed-data.js +2 -0
- package/src/models/image.js +32 -0
- package/src/models/manifest-json.js +1 -1
- package/src/models/section.js +2 -0
- package/src/models/slide.js +2 -0
- package/src/models/template.js +2 -0
- package/src/models/token.js +47 -0
- package/src/models/user.js +2 -0
- package/src/models.js +2 -0
- package/src/presentation/appointment-presentation.js +10 -2
- package/src/presentation/base-presentation-model.js +77 -1
- package/src/presentation/base-presentation-model.spec.js +77 -0
- package/src/presentation/presentation-deck.js +40 -2
- package/src/presentation/presentation-deck.spec.js +53 -0
- package/src/presentation/presentation-section.js +37 -5
- package/src/presentation/presentation-section.spec.js +135 -2
- package/src/presentation/presentation-slide.js +25 -5
- package/src/presentation/presentation-slide.spec.js +104 -2
- package/src/presentation/presentation.js +24 -7
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livepreso/api",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "6.45.0",
|
|
6
|
+
"tag": "@livepreso/api_v6.45.0",
|
|
7
|
+
"date": "Wed, 01 Jun 2022 00:55:51 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "General updates"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"dependency": [
|
|
15
|
+
{
|
|
16
|
+
"comment": "Updating dependency \"@livepreso/log\" from `^1.3.9` to `^1.3.10`"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
4
21
|
{
|
|
5
22
|
"version": "6.44.0",
|
|
6
23
|
"tag": "@livepreso/api_v6.44.0",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Change Log - @livepreso/api
|
|
2
2
|
|
|
3
|
-
This log was last generated on Wed,
|
|
3
|
+
This log was last generated on Wed, 01 Jun 2022 00:55:51 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 6.45.0
|
|
6
|
+
Wed, 01 Jun 2022 00:55:51 GMT
|
|
7
|
+
|
|
8
|
+
### Minor changes
|
|
9
|
+
|
|
10
|
+
- General updates
|
|
4
11
|
|
|
5
12
|
## 6.44.0
|
|
6
13
|
Wed, 09 Feb 2022 23:10:24 GMT
|
package/api.build.log
CHANGED
package/bin/test.sh
CHANGED
package/cjs/auth.js
CHANGED
|
@@ -20,7 +20,7 @@ var _base = require("./models/base.js");
|
|
|
20
20
|
|
|
21
21
|
var _superagentBluebirdPromise = _interopRequireDefault(require("superagent-bluebird-promise"));
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var _token = require("./models/token.js");
|
|
24
24
|
|
|
25
25
|
var _log = _interopRequireDefault(require("./log.js"));
|
|
26
26
|
|
|
@@ -58,17 +58,30 @@ var Auth = {
|
|
|
58
58
|
* @static
|
|
59
59
|
* @param {string} username
|
|
60
60
|
* @param {string} password
|
|
61
|
+
* @param {object} options
|
|
61
62
|
* @return {Promise}
|
|
62
63
|
*/
|
|
63
|
-
login: function login(username, password) {
|
|
64
|
+
login: function login(username, password, options) {
|
|
64
65
|
var tokensURL = _api.Api.getResourceURL("tokens");
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
var agent = options === null || options === void 0 ? void 0 : options.agent;
|
|
68
|
+
var agentVersion = options === null || options === void 0 ? void 0 : options.agentVersion;
|
|
69
|
+
var data = {
|
|
69
70
|
username: username,
|
|
70
71
|
password: password
|
|
71
|
-
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
if (agent) {
|
|
75
|
+
data.agent = agent;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (agentVersion) {
|
|
79
|
+
data.agent_version = agentVersion;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return (0, _superagentBluebirdPromise.default)("POST", tokensURL).set({
|
|
83
|
+
Accept: Auth.headers.Accept
|
|
84
|
+
}).send(data).then(function (res) {
|
|
72
85
|
var body = {};
|
|
73
86
|
var token = "";
|
|
74
87
|
|
|
@@ -99,15 +112,28 @@ var Auth = {
|
|
|
99
112
|
|
|
100
113
|
_log.default.info("Logging in with token: ".concat(token));
|
|
101
114
|
|
|
102
|
-
var
|
|
103
|
-
|
|
115
|
+
var tokenModel = new _token.TokenModel({
|
|
116
|
+
key: token
|
|
104
117
|
});
|
|
105
|
-
return
|
|
106
|
-
|
|
118
|
+
return tokenModel.fetch().then(function () {
|
|
119
|
+
return tokenModel.user.fetch();
|
|
120
|
+
}).then(function () {
|
|
121
|
+
Auth._user = tokenModel.user;
|
|
107
122
|
Auth._loggedIn = true;
|
|
108
123
|
});
|
|
109
124
|
},
|
|
110
125
|
|
|
126
|
+
/**
|
|
127
|
+
* @memberof auth.Auth
|
|
128
|
+
* @static
|
|
129
|
+
* @return {void}
|
|
130
|
+
*/
|
|
131
|
+
clear: function clear() {
|
|
132
|
+
Auth._token = null;
|
|
133
|
+
Auth._user = null;
|
|
134
|
+
Auth._loggedIn = false;
|
|
135
|
+
},
|
|
136
|
+
|
|
111
137
|
/**
|
|
112
138
|
* @memberof auth.Auth
|
|
113
139
|
* @static
|
package/cjs/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth.js"],"names":["Auth","_token","_user","_loggedIn","headers","headerObj","Accept","Api","version","Authorization","login","username","password","tokensURL","getResourceURL","set","send","then","res","body","token","statusCode","JSON","parse","text","key","e","log","error","loginWithToken","info","
|
|
1
|
+
{"version":3,"sources":["../src/auth.js"],"names":["Auth","_token","_user","_loggedIn","headers","headerObj","Accept","Api","version","Authorization","login","username","password","options","tokensURL","getResourceURL","agent","agentVersion","data","agent_version","set","send","then","res","body","token","statusCode","JSON","parse","text","key","e","log","error","loginWithToken","info","tokenModel","TokenModel","fetch","user","clear","loggedIn","BaseModel"],"mappings":"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","sourcesContent":["/**\n * @namespace auth\n */\nimport { Api } from \"./api.js\";\nimport { BaseModel } from \"./models/base.js\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport { TokenModel } from \"./models/token.js\";\nimport log from \"./log.js\";\n\n/**\n * Deals with authentication with the api\n * @constructor\n * @alias auth.Auth\n * @example\n * import {Auth} from \"sp-api\";\n */\nexport const Auth = {\n\t_token: null,\n\t_user: null,\n\t_loggedIn: false,\n\n\tget headers() {\n\t\tconst headerObj = {\n\t\t\tAccept: `application/vnd.salespreso+json; version=${Api.version}`,\n\t\t};\n\n\t\tif (this._token) {\n\t\t\theaderObj.Authorization = `Token ${this._token}`;\n\t\t}\n\n\t\treturn headerObj;\n\t},\n\n\t/**\n\t * Basic login using a login and password.\n\t * @memberof auth.Auth\n\t * @static\n\t * @param {string} username\n\t * @param {string} password\n\t * @param {object} options\n\t * @return {Promise}\n\t */\n\tlogin(username, password, options) {\n\t\tconst tokensURL = Api.getResourceURL(\"tokens\");\n\n\t\tconst agent = options?.agent;\n\t\tconst agentVersion = options?.agentVersion;\n\n\t\tconst data = {\n\t\t\tusername,\n\t\t\tpassword,\n\t\t};\n\n\t\tif (agent) {\n\t\t\tdata.agent = agent;\n\t\t}\n\n\t\tif (agentVersion) {\n\t\t\tdata.agent_version = agentVersion;\n\t\t}\n\n\t\treturn SuperAgentRequest(\"POST\", tokensURL)\n\t\t\t.set({\n\t\t\t\tAccept: Auth.headers.Accept,\n\t\t\t})\n\t\t\t.send(data)\n\t\t\t.then((res) => {\n\t\t\t\tlet body = {};\n\t\t\t\tlet token = \"\";\n\t\t\t\tif (res.statusCode === 200) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbody = JSON.parse(res.text);\n\t\t\t\t\t\ttoken = body.key;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlog.error(\"Error parsing JSON\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn Auth.loginWithToken(token).then(() => {\n\t\t\t\t\treturn body;\n\t\t\t\t});\n\t\t\t});\n\t},\n\n\t/**\n\t * Login using a token\n\t * @memberof auth.Auth\n\t * @static\n\t * @param {string} token\n\t * @return {Promise}\n\t */\n\tloginWithToken(token) {\n\t\tAuth._token = token;\n\n\t\tlog.info(`Logging in with token: ${token}`);\n\n\t\tconst tokenModel = new TokenModel({ key: token });\n\n\t\treturn tokenModel\n\t\t\t.fetch()\n\t\t\t.then(() => {\n\t\t\t\treturn tokenModel.user.fetch();\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tAuth._user = tokenModel.user;\n\t\t\t\tAuth._loggedIn = true;\n\t\t\t});\n\t},\n\n\t/**\n\t * @memberof auth.Auth\n\t * @static\n\t * @return {void}\n\t */\n\tclear() {\n\t\tAuth._token = null;\n\t\tAuth._user = null;\n\t\tAuth._loggedIn = false;\n\t},\n\n\t/**\n\t * @memberof auth.Auth\n\t * @static\n\t * @type {Boolean}\n\t */\n\tget loggedIn() {\n\t\treturn Auth._loggedIn;\n\t},\n\n\t/**\n\t * @memberof auth.Auth\n\t * @static\n\t * @type {models.UserModel}\n\t */\n\tget user() {\n\t\treturn Auth._user;\n\t},\n\n\t/**\n\t * @memberof auth.Auth\n\t * @static\n\t * @type {String}\n\t */\n\tget token() {\n\t\treturn Auth._token;\n\t},\n};\n\nBaseModel.Auth = Auth;\n\nexport default Auth;\n\nexport { SuperAgentRequest };\n"],"file":"auth.js"}
|
package/cjs/auth.spec.js
CHANGED
|
@@ -24,15 +24,18 @@ test("set the token", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*
|
|
|
24
24
|
while (1) {
|
|
25
25
|
switch (_context.prev = _context.next) {
|
|
26
26
|
case 0:
|
|
27
|
+
(0, _api2.G)("TokenModel").respondWith({
|
|
28
|
+
user: (0, _api2.G)("UserModel")
|
|
29
|
+
});
|
|
27
30
|
(0, _api2.G)("UserModel").respondWith();
|
|
28
|
-
_context.next =
|
|
31
|
+
_context.next = 4;
|
|
29
32
|
return _auth.Auth.loginWithToken("token");
|
|
30
33
|
|
|
31
|
-
case
|
|
34
|
+
case 4:
|
|
32
35
|
expect(_auth.Auth.token).toEqual("token");
|
|
33
36
|
expect(_auth.Auth.loggedIn).toBe(true);
|
|
34
37
|
|
|
35
|
-
case
|
|
38
|
+
case 6:
|
|
36
39
|
case "end":
|
|
37
40
|
return _context.stop();
|
|
38
41
|
}
|
|
@@ -44,18 +47,21 @@ test("set the user on success", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*
|
|
|
44
47
|
while (1) {
|
|
45
48
|
switch (_context2.prev = _context2.next) {
|
|
46
49
|
case 0:
|
|
50
|
+
(0, _api2.G)("TokenModel").respondWith({
|
|
51
|
+
user: (0, _api2.G)("UserModel")
|
|
52
|
+
});
|
|
47
53
|
(0, _api2.G)("UserModel").respondWith({
|
|
48
54
|
first_name: "John",
|
|
49
55
|
last_name: "Doe"
|
|
50
56
|
});
|
|
51
|
-
_context2.next =
|
|
57
|
+
_context2.next = 4;
|
|
52
58
|
return _auth.Auth.loginWithToken("token");
|
|
53
59
|
|
|
54
|
-
case
|
|
60
|
+
case 4:
|
|
55
61
|
expect(_auth.Auth.user.first_name).toEqual("John");
|
|
56
62
|
expect(_auth.Auth.user.last_name).toEqual("Doe");
|
|
57
63
|
|
|
58
|
-
case
|
|
64
|
+
case 6:
|
|
59
65
|
case "end":
|
|
60
66
|
return _context2.stop();
|
|
61
67
|
}
|
package/cjs/auth.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth.spec.js"],"names":["beforeEach","Auth","_loggedIn","test","respondWith","loginWithToken","expect","token","toEqual","loggedIn","toBe","first_name","last_name","
|
|
1
|
+
{"version":3,"sources":["../src/auth.spec.js"],"names":["beforeEach","Auth","_loggedIn","test","respondWith","user","loginWithToken","expect","token","toEqual","loggedIn","toBe","first_name","last_name","it","login","td","func","response","replace","Api","superagent","Request","prototype","when","thenResolve","statusCode","text","JSON","stringify","key"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEAA,UAAU,CAAC,YAAM;AAChBC,aAAKC,SAAL,GAAiB,KAAjB;AACA,CAFS,CAAV;AAIAC,IAAI,CAAC,eAAD,uFAAkB;AAAA;AAAA;AAAA;AAAA;AACrB,uBAAE,YAAF,EAAgBC,WAAhB,CAA4B;AAAEC,YAAAA,IAAI,EAAE,aAAE,WAAF;AAAR,WAA5B;AACA,uBAAE,WAAF,EAAeD,WAAf;AAFqB;AAAA,iBAGfH,WAAKK,cAAL,CAAoB,OAApB,CAHe;;AAAA;AAIrBC,UAAAA,MAAM,CAACN,WAAKO,KAAN,CAAN,CAAmBC,OAAnB,CAA2B,OAA3B;AACAF,UAAAA,MAAM,CAACN,WAAKS,QAAN,CAAN,CAAsBC,IAAtB,CAA2B,IAA3B;;AALqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAlB,GAAJ;AAQAR,IAAI,CAAC,yBAAD,uFAA4B;AAAA;AAAA;AAAA;AAAA;AAC/B,uBAAE,YAAF,EAAgBC,WAAhB,CAA4B;AAAEC,YAAAA,IAAI,EAAE,aAAE,WAAF;AAAR,WAA5B;AACA,uBAAE,WAAF,EAAeD,WAAf,CAA2B;AAAEQ,YAAAA,UAAU,EAAE,MAAd;AAAsBC,YAAAA,SAAS,EAAE;AAAjC,WAA3B;AAF+B;AAAA,iBAGzBZ,WAAKK,cAAL,CAAoB,OAApB,CAHyB;;AAAA;AAI/BC,UAAAA,MAAM,CAACN,WAAKI,IAAL,CAAUO,UAAX,CAAN,CAA6BH,OAA7B,CAAqC,MAArC;AACAF,UAAAA,MAAM,CAACN,WAAKI,IAAL,CAAUQ,SAAX,CAAN,CAA4BJ,OAA5B,CAAoC,KAApC;;AAL+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA5B,GAAJ;AAQAK,EAAE,CAAC,qCAAD,uFAAwC;AAAA;AAAA;AAAA;AAAA;AAAA;AACnCC,UAAAA,KADmC,GAC3BC,oBAAGC,IAAH,EAD2B;AAEnCC,UAAAA,QAFmC,GAExBF,oBAAGC,IAAH,EAFwB;;AAIzCD,8BAAGG,OAAH,CAAWC,QAAX,EAAgB,gBAAhB,EAAkC;AAAA,mBAAM,aAAN;AAAA,WAAlC;;AACAJ,8BAAGG,OAAH,CAAWlB,UAAX,EAAiB,gBAAjB,EAAmCc,KAAnC;;AACAC,8BAAGG,OAAH,CAAWE,mCAAWC,OAAX,CAAmBC,SAA9B,EAAyC,SAAzC,EAAoDL,QAApD;;AAEAF,8BAAGQ,IAAH,CAAQN,QAAQ,EAAhB,EAAoBO,WAApB,CAAgC;AAC/BC,YAAAA,UAAU,EAAE,GADmB;AAE/BC,YAAAA,IAAI,EAAEC,IAAI,CAACC,SAAL,CAAe;AAAEC,cAAAA,GAAG,EAAE;AAAP,aAAf;AAFyB,WAAhC;;AAIAd,8BAAGQ,IAAH,CAAQT,KAAK,CAAC,UAAD,CAAb,EAA2BU,WAA3B;;AAZyC;AAAA,iBAcnCxB,WAAKc,KAAL,CAAW,OAAX,EAAoB,UAApB,CAdmC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAxC,GAAF","sourcesContent":["import { Api } from \"./api.js\";\nimport { Auth } from \"./auth.js\";\nimport { G } from \"sp-test/api\";\nimport superagent from \"superagent-bluebird-promise\";\nimport td from \"testdouble\";\n\nbeforeEach(() => {\n\tAuth._loggedIn = false;\n});\n\ntest(\"set the token\", async () => {\n\tG(\"TokenModel\").respondWith({ user: G(\"UserModel\") });\n\tG(\"UserModel\").respondWith();\n\tawait Auth.loginWithToken(\"token\");\n\texpect(Auth.token).toEqual(\"token\");\n\texpect(Auth.loggedIn).toBe(true);\n});\n\ntest(\"set the user on success\", async () => {\n\tG(\"TokenModel\").respondWith({ user: G(\"UserModel\") });\n\tG(\"UserModel\").respondWith({ first_name: \"John\", last_name: \"Doe\" });\n\tawait Auth.loginWithToken(\"token\");\n\texpect(Auth.user.first_name).toEqual(\"John\");\n\texpect(Auth.user.last_name).toEqual(\"Doe\");\n});\n\nit(\"return a token from an auth request\", async () => {\n\tconst login = td.func();\n\tconst response = td.func();\n\n\ttd.replace(Api, \"getResourceURL\", () => \"/api/tokens\");\n\ttd.replace(Auth, \"loginWithToken\", login);\n\ttd.replace(superagent.Request.prototype, \"promise\", response);\n\n\ttd.when(response()).thenResolve({\n\t\tstatusCode: 200,\n\t\ttext: JSON.stringify({ key: \"token123\" }),\n\t});\n\ttd.when(login(\"token123\")).thenResolve();\n\n\tawait Auth.login(\"login\", \"password\");\n});\n"],"file":"auth.spec.js"}
|
package/cjs/collections/base.js
CHANGED
|
@@ -72,8 +72,10 @@ var BaseCollection = _ampersandRestCollection.default.extend(
|
|
|
72
72
|
per_page: 1000
|
|
73
73
|
},
|
|
74
74
|
constructor: function constructor() {
|
|
75
|
-
var
|
|
75
|
+
var _data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
76
|
+
|
|
76
77
|
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
78
|
+
var data = _data;
|
|
77
79
|
|
|
78
80
|
var options = _lodash.default.defaults(opts, {
|
|
79
81
|
data: {}
|
|
@@ -307,7 +309,7 @@ var BaseCollection = _ampersandRestCollection.default.extend(
|
|
|
307
309
|
_this3._options = _options;
|
|
308
310
|
_this3.queryData = _objectSpread({}, _options.data);
|
|
309
311
|
return _this3.fetchPage().then(function (response) {
|
|
310
|
-
checkPages(response);
|
|
312
|
+
return checkPages(response);
|
|
311
313
|
});
|
|
312
314
|
} else {
|
|
313
315
|
// The collection's models are replaced with the latest
|
|
@@ -359,6 +361,12 @@ var BaseCollection = _ampersandRestCollection.default.extend(
|
|
|
359
361
|
return out;
|
|
360
362
|
});
|
|
361
363
|
},
|
|
364
|
+
// Returns "true" if all child models have been fetched
|
|
365
|
+
areModelsFetched: function areModelsFetched() {
|
|
366
|
+
return this.map(function (model) {
|
|
367
|
+
return model.isFetched();
|
|
368
|
+
}).every(Boolean);
|
|
369
|
+
},
|
|
362
370
|
isNew: function isNew() {
|
|
363
371
|
return true;
|
|
364
372
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/base.js"],"names":["pageLimit","BaseCollection","Collection","extend","modelName","model","BaseModel","fetchEmpty","urlMatchKeys","defaultFetchData","per_page","constructor","data","opts","options","_","defaults","newData","toJSON","_data","_options","queryData","url","_url","length","registerStates","prototype","call","add","values","args","arguments","apply","_prepareModel","attrs","omit","Model","registeredStates","Error","urlRoot","getResourceURL","matchesURL","_matchesURL","getFullURLPath","path","Object","keys","query","queryIndex","indexOf","slice","qs","parse","stringify","arrayFormat","resp","re","matches","match","replacement","get","replace","isNew","log","error","Api","getURL","sync","fetchModels","Promise","all","models","map","fetch","fetchSet","idSet","id","warn","resolve","otherOpts","tap","reset","results","cloneDeep","response","fetchAll","checkPages","notLastPage","total_pages","page","belowPageLimit","fetchPage","then","toServer","serialize","out","collection","isObject","save","batch","patch","delete","Array","isArray","attr"],"mappings":"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","sourcesContent":["import { Api } from \"../api.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport Collection from \"ampersand-rest-collection\";\nimport Promise from \"bluebird\";\nimport _ from \"lodash\";\nimport log from \"../log.js\";\nimport qs from \"qs\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\n\n// Current hardcoded limit for maximum number of pages fetched\n// automatically by fetchAll\nconst pageLimit = 20;\n\n/**\n * @constructor\n * @alias collections.BaseCollection\n */\nexport const BaseCollection = Collection.extend(\n\t/** @lends collections.BaseCollection# */ {\n\t\tmodelName: null,\n\t\tmodel: BaseModel,\n\t\tfetchEmpty: false,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tdefaultFetchData: {\n\t\t\tper_page: 1000,\n\t\t},\n\n\t\tconstructor(data = {}, opts = {}) {\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {},\n\t\t\t});\n\n\t\t\t// We ensure that we pass an array because we don't want the collection constructor to\n\t\t\t// create an empty model using a data object\n\t\t\tlet newData = [];\n\n\t\t\t// Allow passing in collections\n\t\t\tif (data instanceof Collection) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis._data = data;\n\t\t\tthis._options = options;\n\n\t\t\t// Remove reference to the prototype, or this can accidentally\n\t\t\t// apply to all collections\n\t\t\tthis.queryData = _.extend({}, this.defaultFetchData, options.data);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (data && data.url) {\n\t\t\t\tthis._url = data.url;\n\t\t\t} else if (data && data.length) {\n\t\t\t\tnewData = data;\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tCollection.prototype.constructor.call(this, newData, opts);\n\n\t\t\t// Get the name for the collection based on the model\n\t\t\tif (!this.modelName && typeof this.model === \"function\") {\n\t\t\t\tthis.modelName = this.model.prototype.modelName;\n\t\t\t}\n\t\t},\n\n\t\tadd(values) {\n\t\t\tconst args = [...arguments];\n\n\t\t\tif (values && values instanceof Collection) {\n\t\t\t\targs[0] = values.toJSON();\n\t\t\t}\n\n\t\t\treturn Collection.prototype.add.apply(this, args);\n\t\t},\n\n\t\t_prepareModel(attrs, options) {\n\t\t\tconst opts = _.omit(options, [\"data\"]);\n\t\t\treturn Collection.prototype._prepareModel.call(this, attrs, opts);\n\t\t},\n\n\t\tregisterStates() {\n\t\t\tif (typeof this.model === \"string\") {\n\t\t\t\tconst Model = registeredStates[this.model];\n\t\t\t\tif (!Model) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`'${this.model}' not found! Did you forget to import it on the '${this.modelName}' model?`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.model = Model;\n\t\t\t}\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tmatchesURL(url) {\n\t\t\treturn this.model.prototype._matchesURL(url, false);\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tlet url = path;\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\tlet query = this.queryData;\n\t\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\t\tif (queryIndex > -1) {\n\t\t\t\t\turl = url.slice(0, queryIndex);\n\t\t\t\t\tquery = _.extend(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tqs.parse(url.slice(queryIndex + 1)),\n\t\t\t\t\t\tthis.queryData\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (url.slice(-1) !== \"/\") {\n\t\t\t\t\turl += \"/\";\n\t\t\t\t}\n\t\t\t\turl += `?${qs.stringify(query, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\turl() {\n\t\t\tif (this._url) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\tlet resp = this.urlRoot();\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the collection's options.\n\t\t\t// So if you have /path/to/{model.id}/models/\n\t\t\t// It will check the collection options for \"model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this._options, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(\n\t\t\t\t\t\t`Collection ${this.modelName} is missing value ${path} as an option`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t}\n\n\t\t\treturn this.getFullURLPath(resp);\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\t// If no name is present, assume we want the root API.\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tsync() {\n\t\t\t// Use our own sync instead of the default ampersand one\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tfetchModels(options = {}) {\n\t\t\treturn Promise.all(this.models.map((model) => model.fetch(options)));\n\t\t},\n\n\t\tfetchSet(opts = {}) {\n\t\t\tconst idSet = this.models.map((model) => model.id);\n\n\t\t\tif (!idSet.length) {\n\t\t\t\tlog.warn(`Tried to fetch ${this.modelName} set with no models`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst { data, ...otherOpts } = opts;\n\n\t\t\tconst options = {\n\t\t\t\tdata: {\n\t\t\t\t\t...data,\n\t\t\t\t\tid: idSet,\n\t\t\t\t},\n\t\t\t\t...otherOpts,\n\t\t\t};\n\n\t\t\t// Necessary because these models were already initialised before the fetch,\n\t\t\t// and the children weren't updated correctly with the new data.\n\t\t\treturn this.fetch(options).tap((data) => {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.add(data.results);\n\t\t\t});\n\t\t},\n\n\t\tfetch(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...options.data };\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\treturn Collection.prototype.fetch.call(this, options).tap((response) => {\n\t\t\t\tthis._data = response;\n\t\t\t});\n\t\t},\n\n\t\tfetchAll(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...this._options.data };\n\n\t\t\tif (this._options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\tconst checkPages = (response) => {\n\t\t\t\tconst notLastPage = response.total_pages > response.page;\n\t\t\t\tconst belowPageLimit = response.page < pageLimit;\n\n\t\t\t\tif (notLastPage && belowPageLimit) {\n\t\t\t\t\tconst options = {\n\t\t\t\t\t\t...this._options,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t...this._options.data,\n\t\t\t\t\t\t\tpage: response.page + 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t// Update the collection with the new data & page number\n\t\t\t\t\tthis._options = options;\n\t\t\t\t\tthis.queryData = { ...options.data };\n\n\t\t\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\t\t\tcheckPages(response);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// The collection's models are replaced with the latest\n\t\t\t\t\t// batch of models every time a new page is fetched.\n\t\t\t\t\t// Here we add back all of the previously-fetched models.\n\t\t\t\t\tthis.add(this._data.results);\n\t\t\t\t\treturn this._data;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\treturn checkPages(response);\n\t\t\t});\n\t\t},\n\n\t\tfetchPage() {\n\t\t\treturn Collection.prototype.fetch\n\t\t\t\t.call(this, this._options)\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// Add the response data to this._data - if we're fetching\n\t\t\t\t\t// multiple pages, this._data.results will contain all of the\n\t\t\t\t\t// results fetched from all pages so far\n\t\t\t\t\tif (this._data.results?.length) {\n\t\t\t\t\t\tthis._data = {\n\t\t\t\t\t\t\t...response,\n\t\t\t\t\t\t\tresults: [...this._data.results, ...response.results],\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._data = response;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response;\n\t\t\t\t});\n\t\t},\n\n\t\ttoServer() {\n\t\t\treturn this.map(function (model) {\n\t\t\t\tif (model.toServer) {\n\t\t\t\t\treturn model.toServer();\n\t\t\t\t} else if (model.serialize) {\n\t\t\t\t\treturn model.serialize();\n\t\t\t\t}\n\n\t\t\t\tconst out = {};\n\t\t\t\t_.extend(out, model);\n\t\t\t\tdelete out.collection;\n\t\t\t\treturn out;\n\t\t\t});\n\t\t},\n\n\t\tisNew() {\n\t\t\treturn true;\n\t\t},\n\n\t\tserialize() {\n\t\t\tconst collection = Collection.prototype.serialize.call(this);\n\n\t\t\tif (_.isObject(this._data) && this._data.url && !collection.length) {\n\t\t\t\treturn this._data.url;\n\t\t\t}\n\n\t\t\treturn collection;\n\t\t},\n\n\t\tsave(options = {}) {\n\t\t\tconst { batch, patch } = options;\n\n\t\t\tif (batch || !this.length) {\n\t\t\t\tif (patch) {\n\t\t\t\t\treturn this.sync(\"patch\", this, options);\n\t\t\t\t}\n\t\t\t\treturn this.sync(\"create\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.save(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tdelete(options = {}) {\n\t\t\tconst { batch } = options;\n\n\t\t\tif (batch) {\n\t\t\t\treturn this.sync(\"delete\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.delete(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tparse(attrs) {\n\t\t\tconst results = attrs.results || attrs;\n\n\t\t\tif (\n\t\t\t\tArray.isArray(results) &&\n\t\t\t\tresults.length &&\n\t\t\t\ttypeof results[0] === \"string\"\n\t\t\t) {\n\t\t\t\t// Convert any url responses from the server into an object that\n\t\t\t\t// can be passed to the model.\n\t\t\t\t//\n\t\t\t\t// TODO: Regex match for URLs\n\t\t\t\treturn results.map(function (attr) {\n\t\t\t\t\treturn { url: attr };\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn results;\n\t\t},\n\t}\n);\n\n// Make matchesURL available as a static method\nBaseCollection.matchesURL = function (url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"file":"base.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/collections/base.js"],"names":["pageLimit","BaseCollection","Collection","extend","modelName","model","BaseModel","fetchEmpty","urlMatchKeys","defaultFetchData","per_page","constructor","_data","opts","data","options","_","defaults","newData","toJSON","_options","queryData","url","_url","length","registerStates","prototype","call","add","values","args","arguments","apply","_prepareModel","attrs","omit","Model","registeredStates","Error","urlRoot","getResourceURL","matchesURL","_matchesURL","getFullURLPath","path","Object","keys","query","queryIndex","indexOf","slice","qs","parse","stringify","arrayFormat","resp","re","matches","match","replacement","get","replace","isNew","log","error","Api","getURL","sync","fetchModels","Promise","all","models","map","fetch","fetchSet","idSet","id","warn","resolve","otherOpts","tap","reset","results","cloneDeep","response","fetchAll","checkPages","notLastPage","total_pages","page","belowPageLimit","fetchPage","then","toServer","serialize","out","collection","areModelsFetched","isFetched","every","Boolean","isObject","save","batch","patch","delete","Array","isArray","attr"],"mappings":"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","sourcesContent":["import { Api } from \"../api.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport Collection from \"ampersand-rest-collection\";\nimport Promise from \"bluebird\";\nimport _ from \"lodash\";\nimport log from \"../log.js\";\nimport qs from \"qs\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\n\n// Current hardcoded limit for maximum number of pages fetched\n// automatically by fetchAll\nconst pageLimit = 20;\n\n/**\n * @constructor\n * @alias collections.BaseCollection\n */\nexport const BaseCollection = Collection.extend(\n\t/** @lends collections.BaseCollection# */ {\n\t\tmodelName: null,\n\t\tmodel: BaseModel,\n\t\tfetchEmpty: false,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tdefaultFetchData: {\n\t\t\tper_page: 1000,\n\t\t},\n\n\t\tconstructor(_data = {}, opts = {}) {\n\t\t\tlet data = _data;\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {},\n\t\t\t});\n\n\t\t\t// We ensure that we pass an array because we don't want the collection constructor to\n\t\t\t// create an empty model using a data object\n\t\t\tlet newData = [];\n\n\t\t\t// Allow passing in collections\n\t\t\tif (data instanceof Collection) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis._data = data;\n\t\t\tthis._options = options;\n\n\t\t\t// Remove reference to the prototype, or this can accidentally\n\t\t\t// apply to all collections\n\t\t\tthis.queryData = _.extend({}, this.defaultFetchData, options.data);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (data && data.url) {\n\t\t\t\tthis._url = data.url;\n\t\t\t} else if (data && data.length) {\n\t\t\t\tnewData = data;\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tCollection.prototype.constructor.call(this, newData, opts);\n\n\t\t\t// Get the name for the collection based on the model\n\t\t\tif (!this.modelName && typeof this.model === \"function\") {\n\t\t\t\tthis.modelName = this.model.prototype.modelName;\n\t\t\t}\n\t\t},\n\n\t\tadd(values) {\n\t\t\tconst args = [...arguments];\n\n\t\t\tif (values && values instanceof Collection) {\n\t\t\t\targs[0] = values.toJSON();\n\t\t\t}\n\n\t\t\treturn Collection.prototype.add.apply(this, args);\n\t\t},\n\n\t\t_prepareModel(attrs, options) {\n\t\t\tconst opts = _.omit(options, [\"data\"]);\n\t\t\treturn Collection.prototype._prepareModel.call(this, attrs, opts);\n\t\t},\n\n\t\tregisterStates() {\n\t\t\tif (typeof this.model === \"string\") {\n\t\t\t\tconst Model = registeredStates[this.model];\n\t\t\t\tif (!Model) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`'${this.model}' not found! Did you forget to import it on the '${this.modelName}' model?`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.model = Model;\n\t\t\t}\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tmatchesURL(url) {\n\t\t\treturn this.model.prototype._matchesURL(url, false);\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tlet url = path;\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\tlet query = this.queryData;\n\t\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\t\tif (queryIndex > -1) {\n\t\t\t\t\turl = url.slice(0, queryIndex);\n\t\t\t\t\tquery = _.extend(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tqs.parse(url.slice(queryIndex + 1)),\n\t\t\t\t\t\tthis.queryData\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (url.slice(-1) !== \"/\") {\n\t\t\t\t\turl += \"/\";\n\t\t\t\t}\n\t\t\t\turl += `?${qs.stringify(query, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\turl() {\n\t\t\tif (this._url) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\tlet resp = this.urlRoot();\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the collection's options.\n\t\t\t// So if you have /path/to/{model.id}/models/\n\t\t\t// It will check the collection options for \"model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this._options, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(\n\t\t\t\t\t\t`Collection ${this.modelName} is missing value ${path} as an option`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t}\n\n\t\t\treturn this.getFullURLPath(resp);\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\t// If no name is present, assume we want the root API.\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tsync() {\n\t\t\t// Use our own sync instead of the default ampersand one\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tfetchModels(options = {}) {\n\t\t\treturn Promise.all(this.models.map((model) => model.fetch(options)));\n\t\t},\n\n\t\tfetchSet(opts = {}) {\n\t\t\tconst idSet = this.models.map((model) => model.id);\n\n\t\t\tif (!idSet.length) {\n\t\t\t\tlog.warn(`Tried to fetch ${this.modelName} set with no models`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst { data, ...otherOpts } = opts;\n\n\t\t\tconst options = {\n\t\t\t\tdata: {\n\t\t\t\t\t...data,\n\t\t\t\t\tid: idSet,\n\t\t\t\t},\n\t\t\t\t...otherOpts,\n\t\t\t};\n\n\t\t\t// Necessary because these models were already initialised before the fetch,\n\t\t\t// and the children weren't updated correctly with the new data.\n\t\t\treturn this.fetch(options).tap((data) => {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.add(data.results);\n\t\t\t});\n\t\t},\n\n\t\tfetch(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...options.data };\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\treturn Collection.prototype.fetch.call(this, options).tap((response) => {\n\t\t\t\tthis._data = response;\n\t\t\t});\n\t\t},\n\n\t\tfetchAll(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...this._options.data };\n\n\t\t\tif (this._options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\tconst checkPages = (response) => {\n\t\t\t\tconst notLastPage = response.total_pages > response.page;\n\t\t\t\tconst belowPageLimit = response.page < pageLimit;\n\n\t\t\t\tif (notLastPage && belowPageLimit) {\n\t\t\t\t\tconst options = {\n\t\t\t\t\t\t...this._options,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t...this._options.data,\n\t\t\t\t\t\t\tpage: response.page + 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t// Update the collection with the new data & page number\n\t\t\t\t\tthis._options = options;\n\t\t\t\t\tthis.queryData = { ...options.data };\n\n\t\t\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\t\t\treturn checkPages(response);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// The collection's models are replaced with the latest\n\t\t\t\t\t// batch of models every time a new page is fetched.\n\t\t\t\t\t// Here we add back all of the previously-fetched models.\n\t\t\t\t\tthis.add(this._data.results);\n\t\t\t\t\treturn this._data;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\treturn checkPages(response);\n\t\t\t});\n\t\t},\n\n\t\tfetchPage() {\n\t\t\treturn Collection.prototype.fetch\n\t\t\t\t.call(this, this._options)\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// Add the response data to this._data - if we're fetching\n\t\t\t\t\t// multiple pages, this._data.results will contain all of the\n\t\t\t\t\t// results fetched from all pages so far\n\t\t\t\t\tif (this._data.results?.length) {\n\t\t\t\t\t\tthis._data = {\n\t\t\t\t\t\t\t...response,\n\t\t\t\t\t\t\tresults: [...this._data.results, ...response.results],\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._data = response;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response;\n\t\t\t\t});\n\t\t},\n\n\t\ttoServer() {\n\t\t\treturn this.map((model) => {\n\t\t\t\tif (model.toServer) {\n\t\t\t\t\treturn model.toServer();\n\t\t\t\t} else if (model.serialize) {\n\t\t\t\t\treturn model.serialize();\n\t\t\t\t}\n\n\t\t\t\tconst out = {};\n\t\t\t\t_.extend(out, model);\n\t\t\t\tdelete out.collection;\n\t\t\t\treturn out;\n\t\t\t});\n\t\t},\n\n\t\t// Returns \"true\" if all child models have been fetched\n\t\tareModelsFetched() {\n\t\t\treturn this.map((model) => model.isFetched()).every(Boolean);\n\t\t},\n\n\t\tisNew() {\n\t\t\treturn true;\n\t\t},\n\n\t\tserialize() {\n\t\t\tconst collection = Collection.prototype.serialize.call(this);\n\n\t\t\tif (_.isObject(this._data) && this._data.url && !collection.length) {\n\t\t\t\treturn this._data.url;\n\t\t\t}\n\n\t\t\treturn collection;\n\t\t},\n\n\t\tsave(options = {}) {\n\t\t\tconst { batch, patch } = options;\n\n\t\t\tif (batch || !this.length) {\n\t\t\t\tif (patch) {\n\t\t\t\t\treturn this.sync(\"patch\", this, options);\n\t\t\t\t}\n\t\t\t\treturn this.sync(\"create\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.save(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tdelete(options = {}) {\n\t\t\tconst { batch } = options;\n\n\t\t\tif (batch) {\n\t\t\t\treturn this.sync(\"delete\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.delete(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tparse(attrs) {\n\t\t\tconst results = attrs.results || attrs;\n\n\t\t\tif (\n\t\t\t\tArray.isArray(results) &&\n\t\t\t\tresults.length &&\n\t\t\t\ttypeof results[0] === \"string\"\n\t\t\t) {\n\t\t\t\t// Convert any url responses from the server into an object that\n\t\t\t\t// can be passed to the model.\n\t\t\t\t//\n\t\t\t\t// TODO: Regex match for URLs\n\t\t\t\treturn results.map((attr) => {\n\t\t\t\t\treturn { url: attr };\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn results;\n\t\t},\n\t}\n);\n\n// Make matchesURL available as a static method\nBaseCollection.matchesURL = function (url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"file":"base.js"}
|
|
@@ -6,18 +6,18 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
6
6
|
|
|
7
7
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
8
|
|
|
9
|
+
var _ampersandRestCollection = _interopRequireDefault(require("ampersand-rest-collection"));
|
|
10
|
+
|
|
9
11
|
var _base = require("./base.js");
|
|
10
12
|
|
|
11
13
|
var _base2 = require("../models/base.js");
|
|
12
14
|
|
|
13
|
-
var _ampersandRestCollection = _interopRequireDefault(require("ampersand-rest-collection"));
|
|
14
|
-
|
|
15
15
|
var _api = require("sp-test/api");
|
|
16
16
|
|
|
17
|
-
var _testdouble = _interopRequireDefault(require("testdouble"));
|
|
18
|
-
|
|
19
17
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
20
18
|
|
|
19
|
+
var _testdouble = _interopRequireDefault(require("testdouble"));
|
|
20
|
+
|
|
21
21
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
22
22
|
|
|
23
23
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
@@ -224,6 +224,24 @@ it("should be empty on initialize", function () {
|
|
|
224
224
|
var collection = new Collection();
|
|
225
225
|
expect(collection.length).toEqual(0);
|
|
226
226
|
});
|
|
227
|
+
it("should be not 'areModelsFetched' if all models are just a url or integer", function () {
|
|
228
|
+
var AppointmentCollection = (0, _api.G)("AppointmentCollection"); // A string or an integer should be considered not fetched
|
|
229
|
+
|
|
230
|
+
var collection = new AppointmentCollection(["/api/appointments/1/", 2]);
|
|
231
|
+
expect(collection.areModelsFetched()).toBe(false);
|
|
232
|
+
});
|
|
233
|
+
it("should be 'areModelsFetched' if models are objects", function () {
|
|
234
|
+
(0, _api.G)(_base2.BaseModel, "TestModel");
|
|
235
|
+
var Collection = (0, _api.G)(_base.BaseCollection.extend({
|
|
236
|
+
model: "TestModel"
|
|
237
|
+
}));
|
|
238
|
+
var collection = new Collection([{
|
|
239
|
+
id: 1
|
|
240
|
+
}, {
|
|
241
|
+
id: 2
|
|
242
|
+
}]);
|
|
243
|
+
expect(collection.areModelsFetched()).toBe(true);
|
|
244
|
+
});
|
|
227
245
|
|
|
228
246
|
var mockFetchResults = function mockFetchResults(dataFn) {
|
|
229
247
|
jest.spyOn(_ampersandRestCollection.default.prototype, "fetch").mockImplementation(function (opts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/base.spec.js"],"names":["it","BaseModel","extend","modelName","Collection","BaseCollection","model","collection","expect","models","toHaveLength","id","model1Fetch","td","replace","model2Fetch","fetchModels","verify","Model","respondWith","fetch","toBeInstanceOf","url","toEqual","data","foo","firstCollection","secondCollection","length","mockFetchResults","dataFn","jest","spyOn","AmpersandCollection","prototype","mockImplementation","opts","fetchResults","Promise","resolve","describe","results","baseCollection","fetchAll","first","last","page","total_pages"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEAA,EAAE,CAAC,2CAAD,EAA8C,YAAM;AACrD,cAAEC,gBAAF,EAAa,WAAb,EAA0BC,MAA1B,CAAiC;AAAEC,IAAAA,SAAS,EAAE;AAAb,GAAjC;AACA,MAAMC,UAAU,GAAG,YAAEC,oBAAF,EAAkBH,MAAlB,CAAyB;AAC3CI,IAAAA,KAAK,EAAE;AADoC,GAAzB,CAAnB;AAGA,MAAMC,UAAU,GAAG,IAAIH,UAAJ,CAAe,CAAC,eAAD,EAAkB,eAAlB,CAAf,CAAnB;AACAI,EAAAA,MAAM,CAACD,UAAU,CAACE,MAAZ,CAAN,CAA0BC,YAA1B,CAAuC,CAAvC;AACA,CAPC,CAAF;AASAV,EAAE,CAAC,sDAAD,uFAAyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAC1D,sBAAEC,gBAAF,EAAa,WAAb;AACMG,UAAAA,UAFoD,GAEvC,YAAEC,oBAAF,EAAkBH,MAAlB,CAAyB;AAAEI,YAAAA,KAAK,EAAE;AAAT,WAAzB,CAFuC;AAGpDC,UAAAA,UAHoD,GAGvC,IAAIH,UAAJ,CAAe,CAAC;AAAEO,YAAAA,EAAE,EAAE;AAAN,WAAD,EAAY;AAAEA,YAAAA,EAAE,EAAE;AAAN,WAAZ,CAAf,CAHuC;AAKpDC,UAAAA,WALoD,GAKtCC,oBAAGC,OAAH,CAAWP,UAAU,CAACE,MAAX,CAAkB,CAAlB,CAAX,EAAiC,OAAjC,CALsC;AAMpDM,UAAAA,WANoD,GAMtCF,oBAAGC,OAAH,CAAWP,UAAU,CAACE,MAAX,CAAkB,CAAlB,CAAX,EAAiC,OAAjC,CANsC;AAAA;AAAA,iBAQpDF,UAAU,CAACS,WAAX,EARoD;;AAAA;AAU1DH,8BAAGI,MAAH,CAAUL,WAAW,CAAC,EAAD,CAArB;;AACAC,8BAAGI,MAAH,CAAUF,WAAW,CAAC,EAAD,CAArB;;AAX0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAzD,GAAF;AAcAf,EAAE,CAAC,yCAAD,uFAA4C;AAAA;;AAAA;AAAA;AAAA;AAAA;AACvCkB,UAAAA,KADuC,GAC/B,YAAEjB,iBAAUC,MAAV,CAAiB;AAAEC,YAAAA,SAAS,EAAE;AAAb,WAAjB,CAAF,EAA2C,WAA3C,CAD+B;AAEvCC,UAAAA,UAFuC,GAE1B,YAAEC,oBAAF,EAAkBH,MAAlB,CAAyB;AAAEI,YAAAA,KAAK,EAAE;AAAT,WAAzB,CAF0B;AAG7CF,UAAAA,UAAU,CAACe,WAAX,CAAuB,CAAC,cAAD,EAAiB,cAAjB,CAAvB;AACMZ,UAAAA,UAJuC,GAI1B,IAAIH,UAAJ,EAJ0B;AAAA;AAAA,iBAKvCG,UAAU,CAACa,KAAX,EALuC;;AAAA;AAM7CZ,UAAAA,MAAM,CAACD,UAAU,CAACE,MAAZ,CAAN,CAA0BC,YAA1B,CAAuC,CAAvC;AAN6C,iDAOzBH,UAAU,CAACE,MAPc;;AAAA;AAO7C,gEAAuC;AAA5BH,cAAAA,KAA4B;AACtCE,cAAAA,MAAM,CAACF,KAAD,CAAN,CAAce,cAAd,CAA6BH,KAA7B;AACA;AAT4C;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA5C,GAAF;AAYAlB,EAAE,CAAC,4CAAD,uFAA+C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAC1CkB,UAAAA,KAD0C,GAClC,YAAEjB,gBAAF,EAAa,WAAb,CADkC;AAE1CG,UAAAA,UAF0C,GAE7B,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,YAAAA,KAAK,EAAE;AAAT,WAAtB,CAAF,CAF6B;AAGhDF,UAAAA,UAAU,CAACe,WAAX,CAAuB,CAAC;AAAER,YAAAA,EAAE,EAAE;AAAN,WAAD,EAAY;AAAEA,YAAAA,EAAE,EAAE;AAAN,WAAZ,CAAvB;AACMJ,UAAAA,UAJ0C,GAI7B,IAAIH,UAAJ,EAJ6B;AAAA;AAAA,iBAK1CG,UAAU,CAACa,KAAX,EAL0C;;AAAA;AAMhDZ,UAAAA,MAAM,CAACD,UAAU,CAACE,MAAZ,CAAN,CAA0BC,YAA1B,CAAuC,CAAvC;AANgD,kDAO5BH,UAAU,CAACE,MAPiB;;AAAA;AAOhD,mEAAuC;AAA5BH,cAAAA,KAA4B;AACtCE,cAAAA,MAAM,CAACF,KAAD,CAAN,CAAce,cAAd,CAA6BH,KAA7B;AACA;AAT+C;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA/C,GAAF;AAYAlB,EAAE,CAAC,8CAAD,EAAiD,YAAM;AACxD,MAAMsB,GAAG,GAAG,WAAZ;AACA,MAAMlB,UAAU,GAAG,YAAEC,oBAAF,CAAnB;AACA,MAAME,UAAU,GAAG,IAAIH,UAAJ,CAAe;AAAEkB,IAAAA,GAAG,EAAHA;AAAF,GAAf,CAAnB;AACAd,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,WAAoCD,GAApC;AACA,CALC,CAAF;AAOAtB,EAAE,CAAC,+CAAD,EAAkD,YAAM;AACzD,MAAMI,UAAU,GAAG,YAAEC,qBAAeH,MAAf,CAAsB;AAAEC,IAAAA,SAAS,EAAE;AAAb,GAAtB,CAAF,CAAnB;AACA,MAAMI,UAAU,GAAG,IAAIH,UAAJ,EAAnB;AACAI,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,CAAiC,0BAAjC;AACA,CAJC,CAAF;AAMAvB,EAAE,CAAC,0CAAD,EAA6C,YAAM;AACpD,MAAMI,UAAU,GAAG,YAAEC,qBAAeH,MAAf,CAAsB;AAAEC,IAAAA,SAAS,EAAE;AAAb,GAAtB,CAAF,CAAnB;AACA,MAAMI,UAAU,GAAG,IAAIH,UAAJ,CAAe;AAAEkB,IAAAA,GAAG,EAAE;AAAP,GAAf,CAAnB;AACAd,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,CAAiC,0BAAjC;AACA,CAJC,CAAF;AAMAvB,EAAE,CAAC,qDAAD,EAAwD,YAAM;AAC/D,MAAMI,UAAU,GAAG,YAAEC,oBAAF,CAAnB;AACA,MAAME,UAAU,GAAG,IAAIH,UAAJ,CAAe;AAAEkB,IAAAA,GAAG,EAAE;AAAP,GAAf,CAAnB;AACAd,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,CAAiC,kCAAjC;AACA,CAJC,CAAF;AAMAvB,EAAE,CAAC,gEAAD,EAAmE,YAAM;AAC1E,MAAMI,UAAU,GAAG,YAAEC,oBAAF,CAAnB;AACA,MAAME,UAAU,GAAG,IAAIH,UAAJ,CAAe;AAAEkB,IAAAA,GAAG,EAAE;AAAP,GAAf,CAAnB;AACAd,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,CAAiC,kCAAjC;AACA,CAJC,CAAF;AAMAvB,EAAE,CAAC,gDAAD,EAAmD,YAAM;AAC1D,MAAMI,UAAU,GAAG,YAAEC,oBAAF,CAAnB;AACA,MAAME,UAAU,GAAG,IAAIH,UAAJ,CAClB;AACCkB,IAAAA,GAAG,EAAE;AADN,GADkB,EAIlB;AACCE,IAAAA,IAAI,EAAE;AACLC,MAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,IAAP;AADA;AADP,GAJkB,CAAnB;AAUAjB,EAAAA,MAAM,CAACD,UAAU,CAACe,GAAX,EAAD,CAAN,CAAyBC,OAAzB,CACC,mDADD;AAGA,CAfC,CAAF;AAiBAvB,EAAE,CAAC,4DAAD,EAA+D,YAAM;AACtE,MAAMkB,KAAK,GAAG,YAAEjB,gBAAF,EAAa,WAAb,CAAd;AACA,MAAMG,UAAU,GAAG,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,IAAAA,KAAK,EAAE;AAAT,GAAtB,CAAF,CAAnB;AACA,MAAMC,UAAU,GAAG,IAAIH,UAAJ,EAAnB;AACAI,EAAAA,MAAM,CAACD,UAAU,CAACD,KAAZ,CAAN,CAAyBiB,OAAzB,CAAiCL,KAAjC;AACA,CALC,CAAF;AAOAlB,EAAE,CAAC,8DAAD,EAAiE,YAAM;AACxE,cAAEC,gBAAF,EAAa,WAAb;AACA,MAAMG,UAAU,GAAG,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,IAAAA,KAAK,EAAE;AAAT,GAAtB,CAAF,CAAnB;AACA,MAAMoB,eAAe,GAAG,IAAItB,UAAJ,CAAe,CAAC;AAAEO,IAAAA,EAAE,EAAE;AAAN,GAAD,CAAf,CAAxB;AACA,MAAMgB,gBAAgB,GAAG,IAAIvB,UAAJ,CAAesB,eAAf,CAAzB;AACAlB,EAAAA,MAAM,CAACmB,gBAAgB,CAAClB,MAAjB,CAAwB,CAAxB,EAA2BE,EAA5B,CAAN,CAAsCY,OAAtC,CAA8C,CAA9C;AACA,CANC,CAAF;AAQAvB,EAAE,CAAC,+BAAD,EAAkC,YAAM;AACzC,cAAEC,gBAAF,EAAa,WAAb;AACA,MAAMG,UAAU,GAAG,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,IAAAA,KAAK,EAAE;AAAT,GAAtB,CAAF,CAAnB;AACA,MAAMC,UAAU,GAAG,IAAIH,UAAJ,EAAnB;AACAI,EAAAA,MAAM,CAACD,UAAU,CAACqB,MAAZ,CAAN,CAA0BL,OAA1B,CAAkC,CAAlC;AACA,CALC,CAAF;;AAOA,IAAMM,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,MAAD,EAAY;AACpCC,EAAAA,IAAI,CACFC,KADF,CACQC,iCAAoBC,SAD5B,EACuC,OADvC,EAEEC,kBAFF,CAEqB,UAACC,IAAD,EAAU;AAC7B,QAAMC,YAAY,GAAGP,MAAM,CAACM,IAAD,CAA3B;AACA,WAAOE,kBAAQC,OAAR,CAAgBF,YAAhB,CAAP;AACA,GALF;AAMA,CAPD;;AASAG,QAAQ,CAAC,UAAD,EAAa,YAAM;AAC1BxC,EAAAA,EAAE,CAAC,kCAAD,uFAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AACtC6B,YAAAA,gBAAgB,CAAC,YAAM;AACtB,qBAAO;AACNY,gBAAAA,OAAO,EAAE,CAAC;AAAE9B,kBAAAA,EAAE,EAAE;AAAN,iBAAD,EAAa;AAAEA,kBAAAA,EAAE,EAAE;AAAN,iBAAb,EAAyB;AAAEA,kBAAAA,EAAE,EAAE;AAAN,iBAAzB;AADH,eAAP;AAGA,aAJe,CAAhB;AAMA,wBAAEV,gBAAF,EAAa,WAAb;AACMG,YAAAA,UARgC,GAQnB,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,cAAAA,KAAK,EAAE;AAAT,aAAtB,CAAF,CARmB;AAShCoC,YAAAA,cATgC,GASf,IAAItC,UAAJ,EATe;AAAA;AAAA,mBAWhCsC,cAAc,CAACC,QAAf,EAXgC;;AAAA;AAatCnC,YAAAA,MAAM,CAACkC,cAAc,CAACd,MAAhB,CAAN,CAA8BL,OAA9B,CAAsC,CAAtC;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACE,KAAf,GAAuBjC,EAAxB,CAAN,CAAkCY,OAAlC,CAA0C,EAA1C;;AAdsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAArC,GAAF;AAiBAvB,EAAAA,EAAE,CAAC,kCAAD,uFAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AACtC6B,YAAAA,gBAAgB,CAAC,YAAM;AACtB,qBAAO;AACNY,gBAAAA,OAAO,EAAE,CAAC;AAAE9B,kBAAAA,EAAE,EAAE;AAAN,iBAAD;AADH,eAAP;AAGA,aAJe,CAAhB;AAMA,wBAAEV,gBAAF,EAAa,WAAb;AACMG,YAAAA,UARgC,GAQnB,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,cAAAA,KAAK,EAAE;AAAT,aAAtB,CAAF,CARmB;AAShCoC,YAAAA,cATgC,GASf,IAAItC,UAAJ,CAAe,CAAC;AAAEO,cAAAA,EAAE,EAAE;AAAN,aAAD,CAAf,CATe;AAAA;AAAA,mBAWhC+B,cAAc,CAACC,QAAf,EAXgC;;AAAA;AAatCnC,YAAAA,MAAM,CAACkC,cAAc,CAACd,MAAhB,CAAN,CAA8BL,OAA9B,CAAsC,CAAtC,EAbsC,CActC;;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACE,KAAf,GAAuBjC,EAAxB,CAAN,CAAkCY,OAAlC,CAA0C,EAA1C;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACG,IAAf,GAAsBlC,EAAvB,CAAN,CAAiCY,OAAjC,CAAyC,EAAzC;;AAhBsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAArC,GAAF;AAmBAvB,EAAAA,EAAE,CAAC,wBAAD,uFAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5B6B,YAAAA,gBAAgB,CAAC,UAACO,IAAD,EAAU;AAC1B,kBAAMU,IAAI,GAAGV,IAAI,CAACZ,IAAL,CAAUsB,IAAV,IAAkB,CAA/B;AACA,kBAAMT,YAAY,GAAG;AACpBU,gBAAAA,WAAW,EAAE,CADO;AAEpBD,gBAAAA,IAAI,EAAJA,IAFoB;AAGpBL,gBAAAA,OAAO,EAAE,CAAC;AAAE9B,kBAAAA,EAAE,EAAEmC,IAAI,GAAG;AAAb,iBAAD;AAHW,eAArB;AAKA,qBAAOR,kBAAQC,OAAR,CAAgBF,YAAhB,CAAP;AACA,aARe,CAAhB;AAUA,wBAAEpC,gBAAF,EAAa,WAAb;AACMG,YAAAA,UAZsB,GAYT,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,cAAAA,KAAK,EAAE;AAAT,aAAtB,CAAF,CAZS;AAatBoC,YAAAA,cAbsB,GAaL,IAAItC,UAAJ,EAbK;AAAA;AAAA,mBAetBsC,cAAc,CAACC,QAAf,EAfsB;;AAAA;AAiB5BnC,YAAAA,MAAM,CAACkC,cAAc,CAACd,MAAhB,CAAN,CAA8BL,OAA9B,CAAsC,CAAtC;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACE,KAAf,GAAuBjC,EAAxB,CAAN,CAAkCY,OAAlC,CAA0C,EAA1C;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACG,IAAf,GAAsBlC,EAAvB,CAAN,CAAiCY,OAAjC,CAAyC,EAAzC;;AAnB4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAA3B,GAAF;AAsBAvB,EAAAA,EAAE,CAAC,6CAAD,uFAAgD;AAAA;AAAA;AAAA;AAAA;AAAA;AACjD6B,YAAAA,gBAAgB,CAAC,UAACO,IAAD,EAAU;AAC1B,kBAAMU,IAAI,GAAGV,IAAI,CAACZ,IAAL,CAAUsB,IAAV,IAAkB,CAA/B;AACA,kBAAMT,YAAY,GAAG;AACpBU,gBAAAA,WAAW,EAAE,EADO;AAEpBD,gBAAAA,IAAI,EAAJA,IAFoB;AAGpBL,gBAAAA,OAAO,EAAE,CAAC;AAAE9B,kBAAAA,EAAE,EAAEmC,IAAI,GAAG;AAAb,iBAAD;AAHW,eAArB;AAKA,qBAAOR,kBAAQC,OAAR,CAAgBF,YAAhB,CAAP;AACA,aARe,CAAhB;AAUA,wBAAEpC,gBAAF,EAAa,WAAb;AACMG,YAAAA,UAZ2C,GAY9B,YAAEC,qBAAeH,MAAf,CAAsB;AAAEI,cAAAA,KAAK,EAAE;AAAT,aAAtB,CAAF,CAZ8B;AAa3CoC,YAAAA,cAb2C,GAa1B,IAAItC,UAAJ,EAb0B;AAAA;AAAA,mBAe3CsC,cAAc,CAACC,QAAf,EAf2C;;AAAA;AAiBjDnC,YAAAA,MAAM,CAACkC,cAAc,CAACd,MAAhB,CAAN,CAA8BL,OAA9B,CAAsC,EAAtC;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACE,KAAf,GAAuBjC,EAAxB,CAAN,CAAkCY,OAAlC,CAA0C,EAA1C;AACAf,YAAAA,MAAM,CAACkC,cAAc,CAACG,IAAf,GAAsBlC,EAAvB,CAAN,CAAiCY,OAAjC,CAAyC,EAAzC;;AAnBiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAhD,GAAF;AAqBA,CAhFO,CAAR","sourcesContent":["import { BaseCollection } from \"./base.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport AmpersandCollection from \"ampersand-rest-collection\";\nimport { G } from \"sp-test/api\";\nimport td from \"testdouble\";\nimport Promise from \"bluebird\";\n\nit(\"should parse an array of urls into models\", () => {\n\tG(BaseModel, \"TestModel\").extend({ modelName: \"tests\" });\n\tconst Collection = G(BaseCollection).extend({\n\t\tmodel: \"TestModel\",\n\t});\n\tconst collection = new Collection([\"/api/tests/1/\", \"/api/tests/2/\"]);\n\texpect(collection.models).toHaveLength(2);\n});\n\nit(\"should fetch the individual models in the collection\", async function () {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection).extend({ model: \"TestModel\" });\n\tconst collection = new Collection([{ id: 1 }, { id: 2 }]);\n\n\tconst model1Fetch = td.replace(collection.models[0], \"fetch\");\n\tconst model2Fetch = td.replace(collection.models[1], \"fetch\");\n\n\tawait collection.fetchModels();\n\n\ttd.verify(model1Fetch({}));\n\ttd.verify(model2Fetch({}));\n});\n\nit(\"should convert fetched urls into models\", async () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"test\" }), \"TestModel\");\n\tconst Collection = G(BaseCollection).extend({ model: \"TestModel\" });\n\tCollection.respondWith([\"/api/test/1/\", \"/api/test/2/\"]);\n\tconst collection = new Collection();\n\tawait collection.fetch();\n\texpect(collection.models).toHaveLength(2);\n\tfor (const model of collection.models) {\n\t\texpect(model).toBeInstanceOf(Model);\n\t}\n});\n\nit(\"should convert fetched objects into models\", async () => {\n\tconst Model = G(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tCollection.respondWith([{ id: 1 }, { id: 2 }]);\n\tconst collection = new Collection();\n\tawait collection.fetch();\n\texpect(collection.models).toHaveLength(2);\n\tfor (const model of collection.models) {\n\t\texpect(model).toBeInstanceOf(Model);\n\t}\n});\n\nit(\"should override url if passed to constructor\", () => {\n\tconst url = \"/api/foo/\";\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url });\n\texpect(collection.url()).toEqual(`${url}?per_page=1000`);\n});\n\nit(\"should return a api url based off of its name\", () => {\n\tconst Collection = G(BaseCollection.extend({ modelName: \"foos\" }));\n\tconst collection = new Collection();\n\texpect(collection.url()).toEqual(\"/api/foos/?per_page=1000\");\n});\n\nit(\"should not append a slash to a get query\", () => {\n\tconst Collection = G(BaseCollection.extend({ modelName: \"foos\" }));\n\tconst collection = new Collection({ url: \"/api/foos/?per_page=1000\" });\n\texpect(collection.url()).toEqual(\"/api/foos/?per_page=1000\");\n});\n\nit(\"should append a trailing slash to urls if not there\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url: \"/api/appointments\" });\n\texpect(collection.url()).toEqual(\"/api/appointments/?per_page=1000\");\n});\n\nit(\"should append a trailing slash to urls if not there with query\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url: \"/api/appointments?per_page=1000\" });\n\texpect(collection.url()).toEqual(\"/api/appointments/?per_page=1000\");\n});\n\nit(\"should query multiple values if using an array\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection(\n\t\t{\n\t\t\turl: \"/api/appointments/\",\n\t\t},\n\t\t{\n\t\t\tdata: {\n\t\t\t\tfoo: [1, 2, null],\n\t\t\t},\n\t\t}\n\t);\n\texpect(collection.url()).toEqual(\n\t\t\"/api/appointments/?per_page=1000&foo=1&foo=2&foo=\"\n\t);\n});\n\nit(\"should replace model as a string with the registered model\", () => {\n\tconst Model = G(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst collection = new Collection();\n\texpect(collection.model).toEqual(Model);\n});\n\nit(\"should allow passing in another collection into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst firstCollection = new Collection([{ id: 1 }]);\n\tconst secondCollection = new Collection(firstCollection);\n\texpect(secondCollection.models[0].id).toEqual(1);\n});\n\nit(\"should be empty on initialize\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst collection = new Collection();\n\texpect(collection.length).toEqual(0);\n});\n\nconst mockFetchResults = (dataFn) => {\n\tjest\n\t\t.spyOn(AmpersandCollection.prototype, \"fetch\")\n\t\t.mockImplementation((opts) => {\n\t\t\tconst fetchResults = dataFn(opts);\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n};\n\ndescribe(\"fetchAll\", () => {\n\tit(\"calls Collection.prototype.fetch\", async () => {\n\t\tmockFetchResults(() => {\n\t\t\treturn {\n\t\t\t\tresults: [{ id: 20 }, { id: 21 }, { id: 22 }],\n\t\t\t};\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(3);\n\t\texpect(baseCollection.first().id).toEqual(20);\n\t});\n\n\tit(\"adds results to existing results\", async () => {\n\t\tmockFetchResults(() => {\n\t\t\treturn {\n\t\t\t\tresults: [{ id: 22 }],\n\t\t\t};\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection([{ id: 15 }]);\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(2);\n\t\t// The models are sorted by ID\n\t\texpect(baseCollection.first().id).toEqual(15);\n\t\texpect(baseCollection.last().id).toEqual(22);\n\t});\n\n\tit(\"fetches multiple pages\", async () => {\n\t\tmockFetchResults((opts) => {\n\t\t\tconst page = opts.data.page || 1;\n\t\t\tconst fetchResults = {\n\t\t\t\ttotal_pages: 5,\n\t\t\t\tpage,\n\t\t\t\tresults: [{ id: page + 10 }],\n\t\t\t};\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(5);\n\t\texpect(baseCollection.first().id).toEqual(11);\n\t\texpect(baseCollection.last().id).toEqual(15);\n\t});\n\n\tit(\"stops fetching pages at the hardcoded limit\", async () => {\n\t\tmockFetchResults((opts) => {\n\t\t\tconst page = opts.data.page || 1;\n\t\t\tconst fetchResults = {\n\t\t\t\ttotal_pages: 50,\n\t\t\t\tpage,\n\t\t\t\tresults: [{ id: page + 10 }],\n\t\t\t};\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(20);\n\t\texpect(baseCollection.first().id).toEqual(11);\n\t\texpect(baseCollection.last().id).toEqual(30);\n\t});\n});\n"],"file":"base.spec.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/collections/base.spec.js"],"names":["it","BaseModel","extend","modelName","Collection","BaseCollection","model","collection","expect","models","toHaveLength","id","model1Fetch","td","replace","model2Fetch","fetchModels","verify","Model","respondWith","fetch","toBeInstanceOf","url","toEqual","data","foo","firstCollection","secondCollection","length","AppointmentCollection","areModelsFetched","toBe","mockFetchResults","dataFn","jest","spyOn","AmpersandCollection","prototype","mockImplementation","opts","fetchResults","Promise","resolve","describe","results","baseCollection","fetchAll","first","last","page","total_pages"],"mappings":"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","sourcesContent":["import AmpersandCollection from \"ampersand-rest-collection\";\nimport { BaseCollection } from \"./base.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport { G } from \"sp-test/api\";\nimport Promise from \"bluebird\";\nimport td from \"testdouble\";\n\nit(\"should parse an array of urls into models\", () => {\n\tG(BaseModel, \"TestModel\").extend({ modelName: \"tests\" });\n\tconst Collection = G(BaseCollection).extend({\n\t\tmodel: \"TestModel\",\n\t});\n\tconst collection = new Collection([\"/api/tests/1/\", \"/api/tests/2/\"]);\n\texpect(collection.models).toHaveLength(2);\n});\n\nit(\"should fetch the individual models in the collection\", async () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection).extend({ model: \"TestModel\" });\n\tconst collection = new Collection([{ id: 1 }, { id: 2 }]);\n\n\tconst model1Fetch = td.replace(collection.models[0], \"fetch\");\n\tconst model2Fetch = td.replace(collection.models[1], \"fetch\");\n\n\tawait collection.fetchModels();\n\n\ttd.verify(model1Fetch({}));\n\ttd.verify(model2Fetch({}));\n});\n\nit(\"should convert fetched urls into models\", async () => {\n\tconst Model = G(BaseModel.extend({ modelName: \"test\" }), \"TestModel\");\n\tconst Collection = G(BaseCollection).extend({ model: \"TestModel\" });\n\tCollection.respondWith([\"/api/test/1/\", \"/api/test/2/\"]);\n\tconst collection = new Collection();\n\tawait collection.fetch();\n\texpect(collection.models).toHaveLength(2);\n\tfor (const model of collection.models) {\n\t\texpect(model).toBeInstanceOf(Model);\n\t}\n});\n\nit(\"should convert fetched objects into models\", async () => {\n\tconst Model = G(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tCollection.respondWith([{ id: 1 }, { id: 2 }]);\n\tconst collection = new Collection();\n\tawait collection.fetch();\n\texpect(collection.models).toHaveLength(2);\n\tfor (const model of collection.models) {\n\t\texpect(model).toBeInstanceOf(Model);\n\t}\n});\n\nit(\"should override url if passed to constructor\", () => {\n\tconst url = \"/api/foo/\";\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url });\n\texpect(collection.url()).toEqual(`${url}?per_page=1000`);\n});\n\nit(\"should return a api url based off of its name\", () => {\n\tconst Collection = G(BaseCollection.extend({ modelName: \"foos\" }));\n\tconst collection = new Collection();\n\texpect(collection.url()).toEqual(\"/api/foos/?per_page=1000\");\n});\n\nit(\"should not append a slash to a get query\", () => {\n\tconst Collection = G(BaseCollection.extend({ modelName: \"foos\" }));\n\tconst collection = new Collection({ url: \"/api/foos/?per_page=1000\" });\n\texpect(collection.url()).toEqual(\"/api/foos/?per_page=1000\");\n});\n\nit(\"should append a trailing slash to urls if not there\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url: \"/api/appointments\" });\n\texpect(collection.url()).toEqual(\"/api/appointments/?per_page=1000\");\n});\n\nit(\"should append a trailing slash to urls if not there with query\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection({ url: \"/api/appointments?per_page=1000\" });\n\texpect(collection.url()).toEqual(\"/api/appointments/?per_page=1000\");\n});\n\nit(\"should query multiple values if using an array\", () => {\n\tconst Collection = G(BaseCollection);\n\tconst collection = new Collection(\n\t\t{\n\t\t\turl: \"/api/appointments/\",\n\t\t},\n\t\t{\n\t\t\tdata: {\n\t\t\t\tfoo: [1, 2, null],\n\t\t\t},\n\t\t}\n\t);\n\texpect(collection.url()).toEqual(\n\t\t\"/api/appointments/?per_page=1000&foo=1&foo=2&foo=\"\n\t);\n});\n\nit(\"should replace model as a string with the registered model\", () => {\n\tconst Model = G(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst collection = new Collection();\n\texpect(collection.model).toEqual(Model);\n});\n\nit(\"should allow passing in another collection into a collection\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst firstCollection = new Collection([{ id: 1 }]);\n\tconst secondCollection = new Collection(firstCollection);\n\texpect(secondCollection.models[0].id).toEqual(1);\n});\n\nit(\"should be empty on initialize\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst collection = new Collection();\n\texpect(collection.length).toEqual(0);\n});\n\nit(\"should be not 'areModelsFetched' if all models are just a url or integer\", () => {\n\tconst AppointmentCollection = G(\"AppointmentCollection\");\n\t// A string or an integer should be considered not fetched\n\tconst collection = new AppointmentCollection([\"/api/appointments/1/\", 2]);\n\texpect(collection.areModelsFetched()).toBe(false);\n});\n\nit(\"should be 'areModelsFetched' if models are objects\", () => {\n\tG(BaseModel, \"TestModel\");\n\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\tconst collection = new Collection([{ id: 1 }, { id: 2 }]);\n\texpect(collection.areModelsFetched()).toBe(true);\n});\n\nconst mockFetchResults = (dataFn) => {\n\tjest\n\t\t.spyOn(AmpersandCollection.prototype, \"fetch\")\n\t\t.mockImplementation((opts) => {\n\t\t\tconst fetchResults = dataFn(opts);\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n};\n\ndescribe(\"fetchAll\", () => {\n\tit(\"calls Collection.prototype.fetch\", async () => {\n\t\tmockFetchResults(() => {\n\t\t\treturn {\n\t\t\t\tresults: [{ id: 20 }, { id: 21 }, { id: 22 }],\n\t\t\t};\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(3);\n\t\texpect(baseCollection.first().id).toEqual(20);\n\t});\n\n\tit(\"adds results to existing results\", async () => {\n\t\tmockFetchResults(() => {\n\t\t\treturn {\n\t\t\t\tresults: [{ id: 22 }],\n\t\t\t};\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection([{ id: 15 }]);\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(2);\n\t\t// The models are sorted by ID\n\t\texpect(baseCollection.first().id).toEqual(15);\n\t\texpect(baseCollection.last().id).toEqual(22);\n\t});\n\n\tit(\"fetches multiple pages\", async () => {\n\t\tmockFetchResults((opts) => {\n\t\t\tconst page = opts.data.page || 1;\n\t\t\tconst fetchResults = {\n\t\t\t\ttotal_pages: 5,\n\t\t\t\tpage,\n\t\t\t\tresults: [{ id: page + 10 }],\n\t\t\t};\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(5);\n\t\texpect(baseCollection.first().id).toEqual(11);\n\t\texpect(baseCollection.last().id).toEqual(15);\n\t});\n\n\tit(\"stops fetching pages at the hardcoded limit\", async () => {\n\t\tmockFetchResults((opts) => {\n\t\t\tconst page = opts.data.page || 1;\n\t\t\tconst fetchResults = {\n\t\t\t\ttotal_pages: 50,\n\t\t\t\tpage,\n\t\t\t\tresults: [{ id: page + 10 }],\n\t\t\t};\n\t\t\treturn Promise.resolve(fetchResults);\n\t\t});\n\n\t\tG(BaseModel, \"TestModel\");\n\t\tconst Collection = G(BaseCollection.extend({ model: \"TestModel\" }));\n\t\tconst baseCollection = new Collection();\n\n\t\tawait baseCollection.fetchAll();\n\n\t\texpect(baseCollection.length).toEqual(20);\n\t\texpect(baseCollection.first().id).toEqual(11);\n\t\texpect(baseCollection.last().id).toEqual(30);\n\t});\n});\n"],"file":"base.spec.js"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.DeckVersionScreenshotCollection = void 0;
|
|
9
|
+
|
|
10
|
+
require("../models/deck-version-screenshot.js");
|
|
11
|
+
|
|
12
|
+
var _auth = _interopRequireDefault(require("../auth.js"));
|
|
13
|
+
|
|
14
|
+
var _base = require("./base.js");
|
|
15
|
+
|
|
16
|
+
var _stateRegister = require("../state-register.js");
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @constructor
|
|
20
|
+
* @alias collections.DeckVersionScreenshotCollection
|
|
21
|
+
* @extends collections.BaseCollection
|
|
22
|
+
* @see models.DeckVersionScreenshotModel
|
|
23
|
+
*/
|
|
24
|
+
var DeckVersionScreenshotCollection = _base.BaseCollection.extend(
|
|
25
|
+
/** @lends collections.DeckVersionScreenshotCollection# */
|
|
26
|
+
{
|
|
27
|
+
model: "DeckVersionScreenshotModel",
|
|
28
|
+
fetch: function fetch() {
|
|
29
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
30
|
+
var user = _auth.default.user;
|
|
31
|
+
|
|
32
|
+
if (!opts.data) {
|
|
33
|
+
opts.data = {};
|
|
34
|
+
} // Let's only add this if it's not already being set, in case a global user
|
|
35
|
+
// DOES want to see a specific team.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if (user && !opts.data.team) {
|
|
39
|
+
//
|
|
40
|
+
// Filter all global autoadjuncts, and only query teams that
|
|
41
|
+
// the authorized user is a part of. This is mostly for the case where
|
|
42
|
+
// a 'global' temp slide admin could end up seeing autoadjuncts for
|
|
43
|
+
// many teams - which would be increadibly confusing.
|
|
44
|
+
opts.data.team = [null].concat(user.team_set.map(function (team) {
|
|
45
|
+
return team.id;
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return _base.BaseCollection.prototype.fetch.call(this, opts);
|
|
50
|
+
},
|
|
51
|
+
url: function url() {
|
|
52
|
+
if (!this._url && this.parent) {
|
|
53
|
+
this._options.deckversion = this.parent;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return _base.BaseCollection.prototype.url.call(this);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
exports.DeckVersionScreenshotCollection = DeckVersionScreenshotCollection;
|
|
61
|
+
(0, _stateRegister.register)("DeckVersionScreenshotCollection", DeckVersionScreenshotCollection);
|
|
62
|
+
//# sourceMappingURL=deck-version-screenshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/collections/deck-version-screenshots.js"],"names":["DeckVersionScreenshotCollection","BaseCollection","extend","model","fetch","opts","user","Auth","data","team","concat","team_set","map","id","prototype","call","url","_url","parent","_options","deckversion"],"mappings":";;;;;;;;;AAAA;;AAEA;;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMA,+BAA+B,GAAGC,qBAAeC,MAAf;AAC9C;AAA2D;AAC1DC,EAAAA,KAAK,EAAE,4BADmD;AAG1DC,EAAAA,KAH0D,mBAGzC;AAAA,QAAXC,IAAW,uEAAJ,EAAI;AAChB,QAAQC,IAAR,GAAiBC,aAAjB,CAAQD,IAAR;;AAEA,QAAI,CAACD,IAAI,CAACG,IAAV,EAAgB;AACfH,MAAAA,IAAI,CAACG,IAAL,GAAY,EAAZ;AACA,KALe,CAOhB;AACA;;;AACA,QAAIF,IAAI,IAAI,CAACD,IAAI,CAACG,IAAL,CAAUC,IAAvB,EAA6B;AAC5B;AACA;AACA;AACA;AACA;AACAJ,MAAAA,IAAI,CAACG,IAAL,CAAUC,IAAV,GAAiB,CAAC,IAAD,EAAOC,MAAP,CAAcJ,IAAI,CAACK,QAAL,CAAcC,GAAd,CAAkB,UAACH,IAAD;AAAA,eAAUA,IAAI,CAACI,EAAf;AAAA,OAAlB,CAAd,CAAjB;AACA;;AAED,WAAOZ,qBAAea,SAAf,CAAyBV,KAAzB,CAA+BW,IAA/B,CAAoC,IAApC,EAA0CV,IAA1C,CAAP;AACA,GAtByD;AAwB1DW,EAAAA,GAxB0D,iBAwBpD;AACL,QAAI,CAAC,KAAKC,IAAN,IAAc,KAAKC,MAAvB,EAA+B;AAC9B,WAAKC,QAAL,CAAcC,WAAd,GAA4B,KAAKF,MAAjC;AACA;;AAED,WAAOjB,qBAAea,SAAf,CAAyBE,GAAzB,CAA6BD,IAA7B,CAAkC,IAAlC,CAAP;AACA;AA9ByD,CADb,CAAxC;;;AAmCP,6BAAS,iCAAT,EAA4Cf,+BAA5C","sourcesContent":["import \"../models/deck-version-screenshot.js\";\n\nimport Auth from \"../auth.js\";\nimport { BaseCollection } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias collections.DeckVersionScreenshotCollection\n * @extends collections.BaseCollection\n * @see models.DeckVersionScreenshotModel\n */\nexport const DeckVersionScreenshotCollection = BaseCollection.extend(\n\t/** @lends collections.DeckVersionScreenshotCollection# */ {\n\t\tmodel: \"DeckVersionScreenshotModel\",\n\n\t\tfetch(opts = {}) {\n\t\t\tconst { user } = Auth;\n\n\t\t\tif (!opts.data) {\n\t\t\t\topts.data = {};\n\t\t\t}\n\n\t\t\t// Let's only add this if it's not already being set, in case a global user\n\t\t\t// DOES want to see a specific team.\n\t\t\tif (user && !opts.data.team) {\n\t\t\t\t//\n\t\t\t\t// Filter all global autoadjuncts, and only query teams that\n\t\t\t\t// the authorized user is a part of. This is mostly for the case where\n\t\t\t\t// a 'global' temp slide admin could end up seeing autoadjuncts for\n\t\t\t\t// many teams - which would be increadibly confusing.\n\t\t\t\topts.data.team = [null].concat(user.team_set.map((team) => team.id));\n\t\t\t}\n\n\t\t\treturn BaseCollection.prototype.fetch.call(this, opts);\n\t\t},\n\n\t\turl() {\n\t\t\tif (!this._url && this.parent) {\n\t\t\t\tthis._options.deckversion = this.parent;\n\t\t\t}\n\n\t\t\treturn BaseCollection.prototype.url.call(this);\n\t\t},\n\t}\n);\n\nregister(\"DeckVersionScreenshotCollection\", DeckVersionScreenshotCollection);\n"],"file":"deck-version-screenshots.js"}
|
package/cjs/collections.js
CHANGED
|
@@ -173,6 +173,19 @@ Object.keys(_deckVersions).forEach(function (key) {
|
|
|
173
173
|
});
|
|
174
174
|
});
|
|
175
175
|
|
|
176
|
+
var _deckVersionScreenshots = require("./collections/deck-version-screenshots");
|
|
177
|
+
|
|
178
|
+
Object.keys(_deckVersionScreenshots).forEach(function (key) {
|
|
179
|
+
if (key === "default" || key === "__esModule") return;
|
|
180
|
+
if (key in exports && exports[key] === _deckVersionScreenshots[key]) return;
|
|
181
|
+
Object.defineProperty(exports, key, {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
get: function get() {
|
|
184
|
+
return _deckVersionScreenshots[key];
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
176
189
|
var _decks = require("./collections/decks");
|
|
177
190
|
|
|
178
191
|
Object.keys(_decks).forEach(function (key) {
|