@livepreso/api 6.43.0 → 6.44.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/.rush/temp/build-cache-tar.log +2 -2
- package/.rush/temp/{package-deps_build.json → package-deps_test.json} +8 -8
- package/.rush/temp/shrinkwrap-deps.json +955 -844
- package/CHANGELOG.json +12 -0
- package/CHANGELOG.md +8 -1
- package/api.build.log +0 -11
- package/cjs/collections/activity.js +2 -2
- package/cjs/collections/appointments.js +2 -2
- package/cjs/collections/auto-adjuncts.js +2 -2
- package/cjs/collections/base.js +75 -2
- package/cjs/collections/base.js.map +1 -1
- package/cjs/collections/base.spec.js +160 -0
- package/cjs/collections/base.spec.js.map +1 -1
- package/cjs/collections/deck-versions.js +2 -2
- package/cjs/models/activity-item.js +2 -2
- package/cjs/models/appointment-duplicate.js +2 -2
- package/cjs/models/manifest-json.js +11 -3
- package/cjs/models/manifest-json.js.map +1 -1
- package/cjs/presentation/appointment-presentation.js +2 -2
- package/cjs/presentation/presentation-deck.js +2 -2
- package/cjs/presentation/presentation-section.js +2 -2
- package/cjs/presentation/presentation-slide.js +2 -2
- package/config/rush-project.json +1 -43
- package/package.json +6 -4
- package/src/collections/base.js +71 -0
- package/src/collections/base.spec.js +93 -0
- package/src/models/manifest-json.js +9 -0
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livepreso/api",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "6.44.0",
|
|
6
|
+
"tag": "@livepreso/api_v6.44.0",
|
|
7
|
+
"date": "Wed, 09 Feb 2022 23:10:24 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Add pagination to fetchAll"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
4
16
|
{
|
|
5
17
|
"version": "6.43.0",
|
|
6
18
|
"tag": "@livepreso/api_v6.43.0",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Change Log - @livepreso/api
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 09 Feb 2022 23:10:24 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 6.44.0
|
|
6
|
+
Wed, 09 Feb 2022 23:10:24 GMT
|
|
7
|
+
|
|
8
|
+
### Minor changes
|
|
9
|
+
|
|
10
|
+
- Add pagination to fetchAll
|
|
4
11
|
|
|
5
12
|
## 6.43.0
|
|
6
13
|
Mon, 13 Dec 2021 04:27:16 GMT
|
package/api.build.log
CHANGED
|
@@ -2,14 +2,3 @@ This project was not found in the build cache.
|
|
|
2
2
|
|
|
3
3
|
Invoking: run-p build:*
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
> @livepreso/api@6.42.1 build:cjs /home/liz/livepreso-dev/modules/api
|
|
7
|
-
> BABEL_ENV=cjs babel --delete-dir-on-start src/ --out-dir=cjs/ -s
|
|
8
|
-
|
|
9
|
-
Successfully compiled 148 files with Babel (3670ms).
|
|
10
|
-
Caching build output folders:
|
|
11
|
-
|
|
12
|
-
Trying to find "tar" binary
|
|
13
|
-
|
|
14
|
-
Successfully set cache entry.
|
|
15
|
-
|
|
@@ -27,9 +27,9 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
27
27
|
|
|
28
28
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
29
29
|
|
|
30
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
31
|
|
|
32
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
32
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* @constructor
|
|
@@ -21,9 +21,9 @@ var _moment = _interopRequireDefault(require("moment"));
|
|
|
21
21
|
|
|
22
22
|
var _stateRegister = require("../state-register.js");
|
|
23
23
|
|
|
24
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
25
|
|
|
26
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* @constructor
|
|
@@ -17,9 +17,9 @@ var _base = require("./base.js");
|
|
|
17
17
|
|
|
18
18
|
var _stateRegister = require("../state-register.js");
|
|
19
19
|
|
|
20
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
21
|
|
|
22
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* @constructor
|
package/cjs/collections/base.js
CHANGED
|
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.BaseCollection = void 0;
|
|
9
9
|
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
+
|
|
10
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
13
|
|
|
12
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
@@ -31,9 +33,9 @@ var _sync2 = require("../sync.js");
|
|
|
31
33
|
|
|
32
34
|
var _excluded = ["data"];
|
|
33
35
|
|
|
34
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
36
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
35
37
|
|
|
36
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
38
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
37
39
|
|
|
38
40
|
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; } } }; }
|
|
39
41
|
|
|
@@ -41,10 +43,14 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
41
43
|
|
|
42
44
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
43
45
|
|
|
46
|
+
// Current hardcoded limit for maximum number of pages fetched
|
|
47
|
+
// automatically by fetchAll
|
|
48
|
+
var pageLimit = 20;
|
|
44
49
|
/**
|
|
45
50
|
* @constructor
|
|
46
51
|
* @alias collections.BaseCollection
|
|
47
52
|
*/
|
|
53
|
+
|
|
48
54
|
var BaseCollection = _ampersandRestCollection.default.extend(
|
|
49
55
|
/** @lends collections.BaseCollection# */
|
|
50
56
|
{
|
|
@@ -270,6 +276,73 @@ var BaseCollection = _ampersandRestCollection.default.extend(
|
|
|
270
276
|
_this2._data = response;
|
|
271
277
|
});
|
|
272
278
|
},
|
|
279
|
+
fetchAll: function fetchAll() {
|
|
280
|
+
var _this3 = this;
|
|
281
|
+
|
|
282
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
283
|
+
|
|
284
|
+
var options = _lodash.default.cloneDeep(opts); // Add default params to the fetch (ie ?per_page=1000)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
options.data = _lodash.default.extend({}, this.queryData, options.data || {});
|
|
288
|
+
this._options = _lodash.default.extend({}, this._options, options);
|
|
289
|
+
this.queryData = _objectSpread({}, this._options.data);
|
|
290
|
+
|
|
291
|
+
if (this._options.url) {
|
|
292
|
+
this._url = options.url;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
var checkPages = function checkPages(response) {
|
|
296
|
+
var notLastPage = response.total_pages > response.page;
|
|
297
|
+
var belowPageLimit = response.page < pageLimit;
|
|
298
|
+
|
|
299
|
+
if (notLastPage && belowPageLimit) {
|
|
300
|
+
var _options = _objectSpread(_objectSpread({}, _this3._options), {}, {
|
|
301
|
+
data: _objectSpread(_objectSpread({}, _this3._options.data), {}, {
|
|
302
|
+
page: response.page + 1
|
|
303
|
+
})
|
|
304
|
+
}); // Update the collection with the new data & page number
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
_this3._options = _options;
|
|
308
|
+
_this3.queryData = _objectSpread({}, _options.data);
|
|
309
|
+
return _this3.fetchPage().then(function (response) {
|
|
310
|
+
checkPages(response);
|
|
311
|
+
});
|
|
312
|
+
} else {
|
|
313
|
+
// The collection's models are replaced with the latest
|
|
314
|
+
// batch of models every time a new page is fetched.
|
|
315
|
+
// Here we add back all of the previously-fetched models.
|
|
316
|
+
_this3.add(_this3._data.results);
|
|
317
|
+
|
|
318
|
+
return _this3._data;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
return this.fetchPage().then(function (response) {
|
|
323
|
+
return checkPages(response);
|
|
324
|
+
});
|
|
325
|
+
},
|
|
326
|
+
fetchPage: function fetchPage() {
|
|
327
|
+
var _this4 = this;
|
|
328
|
+
|
|
329
|
+
return _ampersandRestCollection.default.prototype.fetch.call(this, this._options).then(function (response) {
|
|
330
|
+
var _this4$_data$results;
|
|
331
|
+
|
|
332
|
+
// Add the response data to this._data - if we're fetching
|
|
333
|
+
// multiple pages, this._data.results will contain all of the
|
|
334
|
+
// results fetched from all pages so far
|
|
335
|
+
if ((_this4$_data$results = _this4._data.results) !== null && _this4$_data$results !== void 0 && _this4$_data$results.length) {
|
|
336
|
+
_this4._data = _objectSpread(_objectSpread({}, response), {}, {
|
|
337
|
+
results: [].concat((0, _toConsumableArray2.default)(_this4._data.results), (0, _toConsumableArray2.default)(response.results))
|
|
338
|
+
});
|
|
339
|
+
} else {
|
|
340
|
+
_this4._data = response;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return response;
|
|
344
|
+
});
|
|
345
|
+
},
|
|
273
346
|
toServer: function toServer() {
|
|
274
347
|
return this.map(function (model) {
|
|
275
348
|
if (model.toServer) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/base.js"],"names":["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","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/**\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\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","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"}
|
|
@@ -10,10 +10,14 @@ var _base = require("./base.js");
|
|
|
10
10
|
|
|
11
11
|
var _base2 = require("../models/base.js");
|
|
12
12
|
|
|
13
|
+
var _ampersandRestCollection = _interopRequireDefault(require("ampersand-rest-collection"));
|
|
14
|
+
|
|
13
15
|
var _api = require("sp-test/api");
|
|
14
16
|
|
|
15
17
|
var _testdouble = _interopRequireDefault(require("testdouble"));
|
|
16
18
|
|
|
19
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
20
|
+
|
|
17
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; } } }; }
|
|
18
22
|
|
|
19
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); }
|
|
@@ -220,4 +224,160 @@ it("should be empty on initialize", function () {
|
|
|
220
224
|
var collection = new Collection();
|
|
221
225
|
expect(collection.length).toEqual(0);
|
|
222
226
|
});
|
|
227
|
+
|
|
228
|
+
var mockFetchResults = function mockFetchResults(dataFn) {
|
|
229
|
+
jest.spyOn(_ampersandRestCollection.default.prototype, "fetch").mockImplementation(function (opts) {
|
|
230
|
+
var fetchResults = dataFn(opts);
|
|
231
|
+
return _bluebird.default.resolve(fetchResults);
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
describe("fetchAll", function () {
|
|
236
|
+
it("calls Collection.prototype.fetch", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
237
|
+
var Collection, baseCollection;
|
|
238
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
239
|
+
while (1) {
|
|
240
|
+
switch (_context4.prev = _context4.next) {
|
|
241
|
+
case 0:
|
|
242
|
+
mockFetchResults(function () {
|
|
243
|
+
return {
|
|
244
|
+
results: [{
|
|
245
|
+
id: 20
|
|
246
|
+
}, {
|
|
247
|
+
id: 21
|
|
248
|
+
}, {
|
|
249
|
+
id: 22
|
|
250
|
+
}]
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
(0, _api.G)(_base2.BaseModel, "TestModel");
|
|
254
|
+
Collection = (0, _api.G)(_base.BaseCollection.extend({
|
|
255
|
+
model: "TestModel"
|
|
256
|
+
}));
|
|
257
|
+
baseCollection = new Collection();
|
|
258
|
+
_context4.next = 6;
|
|
259
|
+
return baseCollection.fetchAll();
|
|
260
|
+
|
|
261
|
+
case 6:
|
|
262
|
+
expect(baseCollection.length).toEqual(3);
|
|
263
|
+
expect(baseCollection.first().id).toEqual(20);
|
|
264
|
+
|
|
265
|
+
case 8:
|
|
266
|
+
case "end":
|
|
267
|
+
return _context4.stop();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}, _callee4);
|
|
271
|
+
})));
|
|
272
|
+
it("adds results to existing results", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
273
|
+
var Collection, baseCollection;
|
|
274
|
+
return _regenerator.default.wrap(function _callee5$(_context5) {
|
|
275
|
+
while (1) {
|
|
276
|
+
switch (_context5.prev = _context5.next) {
|
|
277
|
+
case 0:
|
|
278
|
+
mockFetchResults(function () {
|
|
279
|
+
return {
|
|
280
|
+
results: [{
|
|
281
|
+
id: 22
|
|
282
|
+
}]
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
(0, _api.G)(_base2.BaseModel, "TestModel");
|
|
286
|
+
Collection = (0, _api.G)(_base.BaseCollection.extend({
|
|
287
|
+
model: "TestModel"
|
|
288
|
+
}));
|
|
289
|
+
baseCollection = new Collection([{
|
|
290
|
+
id: 15
|
|
291
|
+
}]);
|
|
292
|
+
_context5.next = 6;
|
|
293
|
+
return baseCollection.fetchAll();
|
|
294
|
+
|
|
295
|
+
case 6:
|
|
296
|
+
expect(baseCollection.length).toEqual(2); // The models are sorted by ID
|
|
297
|
+
|
|
298
|
+
expect(baseCollection.first().id).toEqual(15);
|
|
299
|
+
expect(baseCollection.last().id).toEqual(22);
|
|
300
|
+
|
|
301
|
+
case 9:
|
|
302
|
+
case "end":
|
|
303
|
+
return _context5.stop();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}, _callee5);
|
|
307
|
+
})));
|
|
308
|
+
it("fetches multiple pages", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
|
|
309
|
+
var Collection, baseCollection;
|
|
310
|
+
return _regenerator.default.wrap(function _callee6$(_context6) {
|
|
311
|
+
while (1) {
|
|
312
|
+
switch (_context6.prev = _context6.next) {
|
|
313
|
+
case 0:
|
|
314
|
+
mockFetchResults(function (opts) {
|
|
315
|
+
var page = opts.data.page || 1;
|
|
316
|
+
var fetchResults = {
|
|
317
|
+
total_pages: 5,
|
|
318
|
+
page: page,
|
|
319
|
+
results: [{
|
|
320
|
+
id: page + 10
|
|
321
|
+
}]
|
|
322
|
+
};
|
|
323
|
+
return _bluebird.default.resolve(fetchResults);
|
|
324
|
+
});
|
|
325
|
+
(0, _api.G)(_base2.BaseModel, "TestModel");
|
|
326
|
+
Collection = (0, _api.G)(_base.BaseCollection.extend({
|
|
327
|
+
model: "TestModel"
|
|
328
|
+
}));
|
|
329
|
+
baseCollection = new Collection();
|
|
330
|
+
_context6.next = 6;
|
|
331
|
+
return baseCollection.fetchAll();
|
|
332
|
+
|
|
333
|
+
case 6:
|
|
334
|
+
expect(baseCollection.length).toEqual(5);
|
|
335
|
+
expect(baseCollection.first().id).toEqual(11);
|
|
336
|
+
expect(baseCollection.last().id).toEqual(15);
|
|
337
|
+
|
|
338
|
+
case 9:
|
|
339
|
+
case "end":
|
|
340
|
+
return _context6.stop();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}, _callee6);
|
|
344
|
+
})));
|
|
345
|
+
it("stops fetching pages at the hardcoded limit", /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
|
|
346
|
+
var Collection, baseCollection;
|
|
347
|
+
return _regenerator.default.wrap(function _callee7$(_context7) {
|
|
348
|
+
while (1) {
|
|
349
|
+
switch (_context7.prev = _context7.next) {
|
|
350
|
+
case 0:
|
|
351
|
+
mockFetchResults(function (opts) {
|
|
352
|
+
var page = opts.data.page || 1;
|
|
353
|
+
var fetchResults = {
|
|
354
|
+
total_pages: 50,
|
|
355
|
+
page: page,
|
|
356
|
+
results: [{
|
|
357
|
+
id: page + 10
|
|
358
|
+
}]
|
|
359
|
+
};
|
|
360
|
+
return _bluebird.default.resolve(fetchResults);
|
|
361
|
+
});
|
|
362
|
+
(0, _api.G)(_base2.BaseModel, "TestModel");
|
|
363
|
+
Collection = (0, _api.G)(_base.BaseCollection.extend({
|
|
364
|
+
model: "TestModel"
|
|
365
|
+
}));
|
|
366
|
+
baseCollection = new Collection();
|
|
367
|
+
_context7.next = 6;
|
|
368
|
+
return baseCollection.fetchAll();
|
|
369
|
+
|
|
370
|
+
case 6:
|
|
371
|
+
expect(baseCollection.length).toEqual(20);
|
|
372
|
+
expect(baseCollection.first().id).toEqual(11);
|
|
373
|
+
expect(baseCollection.last().id).toEqual(30);
|
|
374
|
+
|
|
375
|
+
case 9:
|
|
376
|
+
case "end":
|
|
377
|
+
return _context7.stop();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}, _callee7);
|
|
381
|
+
})));
|
|
382
|
+
});
|
|
223
383
|
//# sourceMappingURL=base.spec.js.map
|
|
@@ -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"],"mappings":";;;;;;;;AAAA;;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","sourcesContent":["import { BaseCollection } from \"./base.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport { G } from \"sp-test/api\";\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 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"],"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","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 { 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"}
|
|
@@ -19,9 +19,9 @@ var _moment = _interopRequireDefault(require("moment"));
|
|
|
19
19
|
|
|
20
20
|
var _stateRegister = require("../state-register.js");
|
|
21
21
|
|
|
22
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
22
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
23
23
|
|
|
24
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
24
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* @constructor
|
|
@@ -21,9 +21,9 @@ var _base = require("../models/base.js");
|
|
|
21
21
|
|
|
22
22
|
var _stateRegister = require("../state-register.js");
|
|
23
23
|
|
|
24
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
25
|
|
|
26
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* @constructor
|
|
@@ -23,9 +23,9 @@ var _base = require("./base.js");
|
|
|
23
23
|
|
|
24
24
|
var _stateRegister = require("../state-register.js");
|
|
25
25
|
|
|
26
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
26
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
27
27
|
|
|
28
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
28
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* @constructor
|