Mercurial > bugzilla-dashboard
view js/modules/mocks.js @ 106:aad1c0a17ba4
added JSON support for iphone.
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Thu, 29 Apr 2010 11:11:04 -0700 |
parents | 00b02ba5236c |
children |
line wrap: on
line source
Require.modules["mocks/cache"] = function(exports, require) { function copy(obj) { if (typeof(obj) == "function") throw new Error("can't store functions"); if (typeof(obj) == "object") return JSON.parse(JSON.stringify(obj)); return obj; } function MockCache(delegate) { this.delegate = delegate; this.cache = {}; }; MockCache.prototype = { get: function get(key) { this.delegate("cache.get", [key]); if (key in this.cache) return copy(this.cache[key]); return null; }, set: function set(key, value) { this.delegate("cache.set", [key, value]); this.cache[key] = copy(value); }, clear: function clear() { this.delegate("cache.clear", []); this.cache = {}; } }; exports.create = function create(delegate) { return new MockCache(delegate); }; }; Require.modules["mocks/bugzilla/trivial"] = function(exports, require) { var bug = { 'summary': 'Application destroys computer on startup', 'last_change_time': '2010-04-13T18:02:00Z', 'status': 'NEW', 'priority': 'P1', 'severity': 'blocker', 'id': '558680' }; var user = { 'email': 'john@doe.com', 'real_name': 'John Doe', 'name': 'john@doe.com' }; var config = { product: { foo: { component: { caching: {}, passwords: {} } }, bar: { component: { "help system": {}, "curmudgeonry": {} } } } }; exports.makeAjaxImpl = function makeAjaxImpl(delegate, setTimeout) { return function ajaxImpl(options) { var authenticated = false; if (options.data && options.data.username) { if (!(options.data.username == 'john@doe.com' && options.data.password == 'test')) return {error: true, message: "wrong password, yo!"}; authenticated = true; } switch (options.url) { case "/bug": if (!('resolution' in options.data)) return {bugs: [bug]}; return {bugs: []}; case "/configuration": return config; case "/user": if (!authenticated) return {error: true, message: "needs login, yo!"}; if (user.email.indexOf(options.data.match) != -1 || user.real_name.indexOf(options.data.match) != -1) return {users: [user]}; return {users: []}; default: throw new Error("unexpected url: " + options.url); } }; }; }; Require.modules["mocks/bugzilla"] = function(exports, require) { const DEFAULT_RESPONSE_TIME = 500; function response(delegate, obj, time) { if (time === undefined) time = DEFAULT_RESPONSE_TIME; var req = require("mocks/xhr").create(delegate); require("window").setTimeout( function() { req.responseText = JSON.stringify(obj); req.status = 200; req.statusText = "OK"; req.mockTriggerEvent({type: "load", target: req}); }, time ); return req; } exports.create = function create(Bugzilla, ajaxImpl, delegate) { function MockBugzilla() { this.ajax = function ajax(options) { delegate("bugzilla.ajax", options); var obj = ajaxImpl(options, exports); var req = response(delegate, obj); req.addEventListener( "load", function onLoad() { var response = JSON.parse(req.responseText); if (!response.error) options.success(response); }, false ); return req; }; }; MockBugzilla.prototype = Bugzilla; return new MockBugzilla(); }; }; Require.modules["mocks/xhr"] = function(exports, require) { function MockXMLHttpRequest(delegate) { var self = this; var listeners = { "load": [], "progress": [], "error": [], "abort": [] }; function verifyEventType(eventType) { if (!(eventType in listeners)) throw new Error("unknown event type: " + eventType); } self.addEventListener = function(eventType, handler, useCapture) { verifyEventType(eventType); listeners[eventType].push(handler); delegate("xhr.addEventListener", [eventType, handler, useCapture]); }; self.removeEventListener = function(eventType, handler, useCapture) { verifyEventType(eventType); var index = listeners[eventType].indexOf(handler); if (index == -1) throw new Error("handler not registered for event: " + eventType); listeners[eventType].splice(index, 1); delegate("xhr.removeEventListener", [eventType, handler, useCapture]); }; self.setRequestHeader = function(header, value) { delegate("xhr.setRequestHeader", [header, value]); }; self.send = function(data) { delegate("xhr.send", [data]); }; self.open = function open(method, url) { delegate("xhr.open", [method, url]); }; self.mockTriggerEvent = function(event) { verifyEventType(event.type); listeners[event.type].forEach( function(listener) { listener(event); }); }; } exports.create = function create(delegate) { return new MockXMLHttpRequest(delegate); }; };