# HG changeset patch # User cin # Date 1513000099 -10800 # Node ID aee8ea860e9b6955aa84f56310c6420bfa666f80 # Parent fb23f3c854dfaf1f2c31c6638eed03d6b1cf5aa3 added utest/store/mock - json based mock store diff -r fb23f3c854df -r aee8ea860e9b src/utest/store/mock.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/utest/store/mock.js Mon Dec 11 16:48:19 2017 +0300 @@ -0,0 +1,95 @@ +define([ + "dojo/_base/declare", + "dojo/_base/lang", + "dojo/request", + "dojo/store/Memory", + "dojo/Deferred", + "dojo/store/util/QueryResults" + +], function (declare, lang, request, Memory, Deferred, QueryResults) { + /** + * @amdplugin + * @usage + * + *
+ * require([
+ * "tests/store/mock!./data/sample.json"
+ * ], function(Store) {
+ * var store = new Store(); // will create a memory store
+ * });
+ *
+ */
+ var cache = {};
+ return {
+ load: function (id, require, callback) {
+ var url = require.toUrl(id);
+ if (url in cache) {
+ callback(cache[url]);
+ } else {
+ request(url).then(function (data) {
+ // handle result as text and parse it every time the
+ // store
+ // is created to get an independent copy
+ var f = cache[url] = function (opts) {
+ var store = new Memory(lang.mixin({
+ data: JSON.parse(data),
+ async: true,
+ delay: 100
+ }, opts || {}));
+
+ declare.safeMixin(store, {
+ query: function () {
+ var results = this.inherited(arguments);
+ if (this.async) {
+ var d = new Deferred();
+ setTimeout(function () {
+ d.resolve(results);
+ }, this.delay);
+ return new QueryResults(d.promise);
+ }
+ return results;
+ },
+
+ get: function () {
+ var results = this.inherited(arguments);
+ if (this.async) {
+ var d = new Deferred();
+ setTimeout(function () {
+ d.resolve(results);
+ }, this.delay);
+ return d.promise;
+ }
+ return results;
+ },
+
+ put: function () {
+ var me = this;
+
+ if (me.async) {
+ var inherited = me.getInherited(arguments);
+ var args = Array.prototype.slice.apply(arguments);
+ var d = new Deferred();
+
+ setTimeout(function () {
+ d.resolve(inherited.apply(me, args));
+ }, me.delay);
+
+ return d.promise;
+ }
+ return me.inherited(arguments);
+ }
+ });
+
+ return store;
+ };
+ callback(f);
+ }, function (err) {
+ require.signal("error", [{
+ error: err,
+ src: 'implab/store/mock'
+ }]);
+ });
+ }
+ }
+ };
+});
\ No newline at end of file