public void While_trying_to_unlock_a_DSLAM_user_receives_error_message_when_a_FaultException_is_raised() { using (ShimsContext.Create()) { // ARRANGE const DslamPortEnable newLockState = DslamPortEnable.PortStateUnknown; var servicesControllerForTest = ServicesControllerForTests; var testContext = new SIMPLTestContext(); // fake local current subscriber object var fakeCurrentSubscriber = new FakeCurrentSubscriber(); // fake SubscriberDto var fakeSubscriberData = TestContext.DataRow["MapToSubscriberDtoAsJSON"]; Assert.IsNotNull(fakeSubscriberData); var fakeSubscriberDtoAsJson = fakeSubscriberData.ToString().Replace("\r\n", ""); var fakeSubscriberDto = JsonConvert.DeserializeObject<SubscriberDto>(fakeSubscriberDtoAsJson, new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }); // Create copy of minimal DSL provisioned services list for use as expected services reference. var expectedServicesList = fakeSubscriberDto.Accounts.First().Services.ToList(); // Add DSLOFF to expected as this is the only additional service expected. expectedServicesList.Add(new ServiceDto { ClassName = "OVERRIDE", Name = "DSLOFF", Description = "SUSPEND DSL PORT" }); // fake CurrentSubscriber and Rosettian method calls ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber(); ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = delegate { return fakeSubscriberDto; }; ShimCurrentUser.AsUserDto = testContext.GetFakeUserDtoObject; const string expectedErrorMessage = "This is a fault exception message"; var faultDetail = new ValidationDetailDto() { Message = expectedErrorMessage }; var faultDetails = new List<ValidationDetailDto>(); faultDetails.Add(faultDetail); var validationFault = new ValidationFaultDto() { Details = faultDetails }; var fault = new FaultException<ValidationFaultDto>(validationFault); ShimRosettianClient.AllInstances.UpdateSubscriberSubscriberDtoBooleanUserDto = delegate { throw fault; }; ShimCurrentSubscriber.UpdateSubscriberDto = delegate(SubscriberDto subscriber) { fakeCurrentSubscriber.SubIpType = subscriber.GetIPType(); fakeCurrentSubscriber.ProvisionedServicesList = subscriber.Accounts.First().Services; }; ShimSubscriberExtension.MapToSubDetailsModelCurrentSubscriber = delegate { return new SubscriberDetailsModel { IPType = fakeCurrentSubscriber.SubIpType }; }; var wasLoggingCalled = false; ShimErrorLoggingService.AllInstances.LogErrorException = (myClient, myException) => { wasLoggingCalled = true; }; // ACT var actualResult = servicesControllerForTest.UpdateDslamPortGate(newLockState); // ASSERT Assert.IsNotNull(actualResult); var actualJsonResult = actualResult as JsonResult; Assert.IsNotNull(actualJsonResult); Assert.IsTrue(wasLoggingCalled, "An Exception was expected and the logger was expected to have been called"); // verify the returned Json dynamic actualJson = actualJsonResult.Data; var actualStatus = actualJson.status as string; var actualErrorMessage = actualJson.errorMessage as string; Assert.AreEqual("error", actualStatus, "UpdateDslamPortGate() returned Json has unexpected failing result status"); Assert.AreEqual(expectedErrorMessage, actualErrorMessage, "UpdateDslamPortGate() returned errorMessage that doesn't have the expected value"); } }
public void User_receives_an_error_when_trying_to_load_an_unknown_location() { //Setup var myContext = new SIMPLTestContext(); const string locationId = "9999999"; using (ShimsContext.Create()) { // Given a user var fakeUserDto = myContext.GetFakeUserDtoObject(); ShimCurrentUser.AsUserDto = () => fakeUserDto; // And an unknown location var fakeSubscriberDto = new List<SubscriberDto>(); ShimRosettianClient.AllInstances.SearchSubscribersSearchFieldsDtoUserDto = (myRosettianClient, mySearchFields, myUserDto) => fakeSubscriberDto; var fakeLocationDto = myContext.GetFakeLocationDtoObject(locationId); var fakeValidationFault = new ValidationFaultDto() { Details = new List<ValidationDetailDto>() { new ValidationDetailDto() { Key = "NA", Message = "Error Message", Tag = "NA" } } }; ShimRosettianClient.AllInstances.LoadLocationStringUserDto = (myRosettianClient, myLocationId, myUserDto) => { throw new FaultException<ValidationFaultDto>(fakeValidationFault); }; // When loading that location var actionResult = SubscriberControllerForTests.LoadLocation(locationId) as PartialViewResult; // Then the user receives a response Assert.IsNotNull(actionResult, "SubscriberController LoadLocation method returned null"); // And the response is an error Assert.AreEqual("Error Message", actionResult.ViewData["error"], string.Format("The response should have been Error Message, but was {0}", actionResult.ViewData["error"])); } }
public void PerformOperation_SadPath() { using (ShimsContext.Create()) { //Arrange var myContext = new SIMPLTestContext(); //Build FakeDto var fakeUserDto = myContext.GetFakeUserDtoObject(); //Fake call to CurrentUser.AsUserDto() SIMPL.Session.Fakes.ShimCurrentUser.AsUserDto = () => fakeUserDto; // Fake the HttpContext var context = new ShimHttpContext(); ShimHttpContext.CurrentGet = () => context; // Fake the session state for HttpContext var session = new System.Web.SessionState.Fakes.ShimHttpSessionState { ItemGetString = s => { if (s == "") return null; return null; } }; var fakeValidationFault = new ValidationFaultDto() { Details = new List<ValidationDetailDto>() { new ValidationDetailDto() { Key = "NA", Message = "Error Message", Tag = "NA" } } }; ShimRosettianClient.AllInstances.PerformEquipmentOperationListOfEquipmentOperationDtoUserDto = (myTestClient, myEquipOpsList, myUserDto) => { throw new FaultException<ValidationFaultDto>(fakeValidationFault); }; // TestingShim is a class that is inside the EquipmentController.cs file ShimTestingShim.HandleExceptionByEnvironmentException = (myException) => { throw new FaultException<ValidationFaultDto>(fakeValidationFault); }; JavaScriptSerializer serializer = new JavaScriptSerializer(); var deviceIDs = new List<string> { "deviceID" }; var deviceIDsAsJSON = serializer.Serialize(deviceIDs); ShimErrorLoggingService.AllInstances.LogErrorException = (myClient, myException) => { }; // First Act var operationsController = DependencyResolver.Current.GetService<OperationsController>(); var result = operationsController.PerformOperation(deviceIDsAsJSON, "Reboot"); // First Assert Assert.IsNotNull(result, "Partial view result returned is null."); Assert.IsTrue(result is PartialViewResult, "result is not a PartialViewResult"); // Second Act var resultPartialResult = result as PartialViewResult; // Second Assert Assert.AreEqual("LoadQueryResults_Partial", resultPartialResult.ViewName, "ViewName doesn't match expected value"); Assert.IsTrue(resultPartialResult.Model is DeviceQueryResultsViewModel, "partialViewResult is not EquipmentOperationsModel"); // Third Act var operationModel = resultPartialResult.Model as DeviceQueryResultsViewModel; // Third Assert Assert.AreEqual("500", operationModel.QueryResponse.Code, "Response Code doesn't match expected value"); Assert.AreEqual("Error Message", operationModel.QueryResponse.Message, "Response Message doesn't match expected value"); } }