dojo.provide("tests.webmap.AjaxManager");

dojo.require("webmap.AjaxManager");
dojo.require("webmap.MapManager");
dojo.require("tests.Util");
dojo.require("doh.runner");

originalXhrPost = dojo.xhrPost;

doh.register("tests.webmap.AjaxManager", 
	[
		{
			name: "constructAndDestroy",
			manager: null,
			conn: null,
			unsubscribes: 0,
			setUp: function(){
				this.manager = new webmap.AjaxManager();
				var _this = this;
				this.conn = dojo.connect(dojo, "unsubscribe", function(){_this.unsubscribes++;});
			},
			runTest: function(){
				tests.assertEqual([["webmap.MapManager.ajaxCalled", 1]], this.manager._subscriptions);
				tests.assertEqual(1, this.manager._subscriptions.length);
				this.manager.destroy();
				tests.assertEqual(1, this.unsubscribes);
				tests.assertEqual(null, this.manager._subscriptions);
			},
			tearDown: function(){
				dojo.disconnect(this.conn);
			}
		},
		{
			name: "_call;",
			manager: null,
			xhrPost: null,
			ioArgs: null,
			paramArgs: null,
			callback: function(){},
			setUp: function(){
				this.xhrPost = dojo.xhrPost;
				var _this = this;
				dojo.xhrPost = function(args){_this.ioArgs = args;};
				this.manager = new webmap.AjaxManager();
				this.manager._getParams = function(args){
					_this.paramArgs = args;
					return "formattedArgs";
				};
				window.undockedWin = "not null";
			},
			runTest: function(){
				dojo.publish("webmap.MapManager.ajaxCalled", [{scope:this, callback:"callback"}]);
				tests.assertEqual(null, this.paramArgs);
				tests.assertEqual(null, this.ioArgs); 
				window.undockedWin = null;
				dojo.publish("webmap.MapManager.ajaxCalled", [{scope:this, callback:"callback"}]);
				tests.assertEqual({scope:this, callback:"callback"}, this.paramArgs);
				tests.assertEqual(webmap.serviceUrl, this.ioArgs.url); 
				tests.assertEqual("json", this.ioArgs.handleAs);
				tests.assertEqual("formattedArgs", this.ioArgs.content);
			},
			tearDown: function(){
				dojo.xhrPost = this.xhrPost;
				this.manager.destroy();
				dojo.disconnect(this.conn);
				window.undockedWin = null;
			}
		},
		{
			name: "_getParams;",
			manager: null,
			args: null,
			setUp: function(){
				this.manager = new webmap.AjaxManager();
				this.args = new Object();
				this.args[webmap.config.method] = "method";
				this.args.scope = this;
				this.args.callback = "callback";
				this.args.point = {x:100, y:200};
				this.args.mapData = {data:"mapData"};
			},
			runTest: function(){
				var result = this.manager._getParams(this.args);
				tests.assertEqual(this.args[webmap.config.method], result[webmap.config.method]);
				tests.assertEqual(undefined, result.scope);
				tests.assertEqual(undefined, result.callback);
				tests.assertEqual(this.args.point, dojo.fromJson(result.point));
				tests.assertEqual(this.args.mapData, dojo.fromJson(result.mapData));
			},
			tearDown: function(){
				this.manager.destroy();
			}
		}
	]
);

