コード例 #1
0
		public async Task GetTemperatureSettingAsyncTest()
		{
			Int64 _Id = 0;
			Int32? _DayOfWeek = 0;
			Int32? _Month = 0;
			Boolean _IsTimeOnly = false;
			DateTimeOffset? _StartTime = DateTimeOffset.MinValue;
			DateTimeOffset? _EndTime = DateTimeOffset.MinValue;
			Double _HeatTemperatureC = 0;
			Double _CoolTemperatureC = 0;
			DateTimeOffset _DateCreated = DateTimeOffset.MinValue;
			DateTimeOffset _DateModified = DateTimeOffset.MinValue;
			// Setup Stub
			var stub = new StubITemperatureSetting();
			stub.Id_Get(() => _Id);
			stub.Id_Set((v) => _Id = v);
			stub.DayOfWeek_Get(() => _DayOfWeek);
			stub.DayOfWeek_Set((v) => _DayOfWeek = v);
			stub.Month_Get(() => _Month);
			stub.Month_Set((v) => _Month = v);
			stub.IsTimeOnly_Get(() => _IsTimeOnly);
			stub.IsTimeOnly_Set((v) => _IsTimeOnly = v);
			stub.StartTime_Get(() => _StartTime);
			stub.StartTime_Set((v) => _StartTime = v);
			stub.EndTime_Get(() => _EndTime);
			stub.EndTime_Set((v) => _EndTime = v);
			stub.HeatTemperatureC_Get(() => _HeatTemperatureC);
			stub.HeatTemperatureC_Set((v) => _HeatTemperatureC = v);
			stub.CoolTemperatureC_Get(() => _CoolTemperatureC);
			stub.CoolTemperatureC_Set((v) => _CoolTemperatureC = v);
			stub.DateCreated_Get(() => _DateCreated);
			stub.DateCreated_Set((v) => _DateCreated = v);
			stub.DateModified_Get(() => _DateModified);
			stub.DateModified_Set((v) => _DateModified = v);
			// create helper
			var create = new StubICreateHelper();
			create.CreateTemperatureSetting(() => stub);
			// settings 
			var settings = new StubIServerSettings();
			settings.ServerUri_Get(() => null);
			// Http Client
			var httpClient = new StubIHttpClient();
			// Server 
			var serverContext = new ServerContext(settings, create, httpClient);
			Int64 key = 51;
			// leading
			var results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.AreEqual(RequestStatus.ServerUriNotSet, results.Status);
			Assert.IsNull(results.Data, "Data should not be null");
			Assert.AreEqual(0, results.Key);
			// login exception
			settings.ServerUri_Get(() => new Uri("http://test"));
			httpClient.PostAsync((uri, d) =>
			{
				return Task.Run(() =>
				{
					return new HttpClientResult{StatusCode = HttpStatusCode.Ok, Content = ""};
				}

				).AsAsyncOperation();
			}

			);
			httpClient.GetCookieValue((u, name) => "Value");
			await serverContext.LoginAsync("user", "pass");
			settings.ServerUri_Get(() => new Uri("/cheese", UriKind.Relative));
			// invalid uri
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.AreEqual(RequestStatus.ServerUriIsNotValid, results.Status);
			Assert.IsNull(results.Data, "Data should not be null");
			Assert.AreEqual(0, results.Key);
			// Unable to connect to server
			key = 76;
			settings.ServerUri_Get(() => new Uri("http://test"));
			Exception expectedException = null;
			bool methodHit = false;
			httpClient.GetAsync((uri) =>
			{
				return Task.Run(() =>
				{
					methodHit = true;
					Assert.AreEqual(new Uri($"http://test/api/TemperatureSetting/{key}"), uri);
					expectedException = new COMException("Message1", -2147012867);
					throw expectedException;
					return new HttpClientResult();
				}

				).AsAsyncOperation();
			}

			);
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.IsTrue(methodHit, "Method not called");
			Assert.AreEqual(RequestStatus.UnableToConnectToServer, results.Status);
			Assert.IsNull(results.Data, "Data should not be null");
			Assert.AreEqual(key, results.Key);
			Assert.AreEqual(expectedException, results.Exception);
			// COMException 
			methodHit = false;
			httpClient.GetAsync((uri) =>
			{
				return Task.Run(() =>
				{
					methodHit = true;
					expectedException = new COMException("Message2");
					throw expectedException;
					return new HttpClientResult();
				}

				).AsAsyncOperation();
			}

			);
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.IsTrue(methodHit, "Method not called");
			Assert.AreEqual(RequestStatus.Exception, results.Status);
			Assert.IsNull(results.Data, "Data should be null");
			Assert.AreEqual(key, results.Key);
			Assert.AreEqual(expectedException, results.Exception);
			// Exception 
			methodHit = false;
			httpClient.GetAsync((uri) =>
			{
				return Task.Run(() =>
				{
					methodHit = true;
					expectedException = new Exception("Message3");
					throw expectedException;
					return new HttpClientResult();
				}

				).AsAsyncOperation();
			}

			);
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.IsTrue(methodHit, "Method not called");
			Assert.AreEqual(RequestStatus.Exception, results.Status);
			Assert.IsNull(results.Data, "Data should be null");
			Assert.AreEqual(key, results.Key);
			Assert.AreEqual(expectedException, results.Exception);
			// Unauthorized 
			methodHit = false;
			httpClient.GetAsync((uri) =>
			{
				return Task.Run(() =>
				{
					methodHit = true;
					return new HttpClientResult()
					{StatusCode = HttpStatusCode.Unauthorized, Content = "{Test: 'cheese'"};
				}

				).AsAsyncOperation();
			}

			);
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.IsTrue(methodHit, "Method not called");
			Assert.AreEqual(RequestStatus.Error, results.Status);
			Assert.IsNull(results.Data, "Data should be null");
			Assert.AreEqual(key, results.Key);
			Assert.IsInstanceOfType(results.Exception, typeof (JsonReaderException));
			// Success Test
			var exp = new StubITemperatureSetting();
			exp.Id_Get(() => key);
			exp.DayOfWeek_Get(() => 9);
			exp.Month_Get(() => 131);
			exp.IsTimeOnly_Get(() => true);
			exp.StartTime_Get(() => new DateTimeOffset(2007, 8, 16, 6, 43, 26, TimeSpan.FromHours(-6)));
			exp.EndTime_Get(() => new DateTimeOffset(2003, 7, 27, 5, 23, 23, TimeSpan.FromHours(-5)));
			exp.HeatTemperatureC_Get(() => 0.29844863586986842);
			exp.CoolTemperatureC_Get(() => 0.8659522150950284);
			exp.DateCreated_Get(() => new DateTimeOffset(2002, 2, 7, 8, 52, 43, TimeSpan.FromHours(-6)));
			exp.DateModified_Get(() => new DateTimeOffset(1985, 4, 19, 19, 36, 22, TimeSpan.FromHours(-7)));
			ITemperatureSetting expected = exp;
			var jobj = new JObject();
			jobj.Add(new JProperty(nameof(expected.Id), expected.Id));
			jobj.Add(new JProperty(nameof(expected.DayOfWeek), expected.DayOfWeek));
			jobj.Add(new JProperty(nameof(expected.Month), expected.Month));
			jobj.Add(new JProperty(nameof(expected.IsTimeOnly), expected.IsTimeOnly));
			jobj.Add(new JProperty(nameof(expected.StartTime), expected.StartTime));
			jobj.Add(new JProperty(nameof(expected.EndTime), expected.EndTime));
			jobj.Add(new JProperty(nameof(expected.HeatTemperatureC), expected.HeatTemperatureC));
			jobj.Add(new JProperty(nameof(expected.CoolTemperatureC), expected.CoolTemperatureC));
			jobj.Add(new JProperty(nameof(expected.DateCreated), expected.DateCreated));
			jobj.Add(new JProperty(nameof(expected.DateModified), expected.DateModified));
			methodHit = false;
			httpClient.GetAsync((uri) =>
			{
				return Task.Run(() =>
				{
					methodHit = true;
					return new HttpClientResult{StatusCode = HttpStatusCode.Ok, Content = jobj.ToString()};
				}

				).AsAsyncOperation();
			}

			);
			results = await serverContext.GetTemperatureSettingAsync(key);
			Assert.IsTrue(methodHit, "Method not called");
			Assert.AreEqual(RequestStatus.Success, results.Status);
			Assert.AreEqual(key, results.Key);
			Assert.IsNull(results.Exception, "Exception should be null");
			Assert.IsNotNull(results.Data, "Data should not be null");
			var actual = results.Data;
			Assert.AreEqual(expected.Id, actual.Id);
			Assert.AreEqual(expected.DayOfWeek, actual.DayOfWeek);
			Assert.AreEqual(expected.Month, actual.Month);
			Assert.AreEqual(expected.IsTimeOnly, actual.IsTimeOnly);
			Assert.AreEqual(expected.StartTime, actual.StartTime);
			Assert.AreEqual(expected.EndTime, actual.EndTime);
			Assert.AreEqual(expected.HeatTemperatureC, actual.HeatTemperatureC);
			Assert.AreEqual(expected.CoolTemperatureC, actual.CoolTemperatureC);
			Assert.AreEqual(expected.DateCreated, actual.DateCreated);
			Assert.AreEqual(expected.DateModified, actual.DateModified);
		}