public void RemoveResidentialGateway_ValidateSuccessScenario()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();

                //Build FakeDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                //Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // Fake the HttpContext
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;

                // Fake the session state for HttpContext
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };

                // When the Fake HttpContext is called, provide the fake session state
                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                var fakeServiceAccount = myContext.GetFakeServiceAccountDto();
                var listFakeServiceAccounts = new List<ServiceAccountDto>
                {
                    fakeServiceAccount
                };

                //Expected result
                const string expectedBaseModelValue = "A5550";
                const string expectedSerialNumber = "PACE99999991";
                const string expectedLocationId = "locId";

                ShimCurrentSubscriber.AllInstances.PhoneServicesListGet = (o) => listFakeServiceAccounts;
                ShimCurrentSubscriber.AllInstances.ServiceAccountListGet = (myTest) => listFakeServiceAccounts;
                ShimCurrentSubscriber.AllInstances.CurrentServiceAccountGet = (myTest) => fakeServiceAccount;
                ShimCurrentSubscriber.AllInstances.SubIdGet = (o) => "89451";
                ShimCurrentSubscriber.AllInstances.LocationIdGet = (o) => expectedLocationId;

                // set WanIpAddress
                ShimCurrentSubscriber.AllInstances.WanIpAddressGet = o => "12:12:12:12";
                ShimRosettianClient.AllInstances.LoadSubscriberStringUserDto = (client, subId, userDto) => new SubscriberDto();
                ShimCurrentSubscriber.UpdateWanIpAddressString = (myWanIpAddress) => { };

                var RgType = new EquipmentTypeDto
                {
                    ONTModel = new ONTModelDto
                    {
                        BaseModel = expectedBaseModelValue
                    },
                    Category = EquipmentCategoryDto.RGDataPort
                };

                var equipmentDataDto = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "D01",
                    LocationId = expectedLocationId,
                    Type = RgType,
                    Status = "ACTIVE"
                };

                var equipmentPhoneDto01 = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "P01",
                    LocationId = expectedLocationId,
                    Type = RgType,
                    Status = "ACTIVE"
                };

                var equipmentPhoneDto02 = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "P02",
                    LocationId = expectedLocationId,
                    Type = RgType,
                    Status = "ACTIVE"
                };

                var searchEquipmentsResult = new List<EquipmentDto>();
                searchEquipmentsResult.Add(equipmentDataDto);
                searchEquipmentsResult.Add(equipmentPhoneDto01);
                searchEquipmentsResult.Add(equipmentPhoneDto02);

                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myTestClient, mySearchFields, myUserDto) => searchEquipmentsResult;

                ShimRosettianClient.AllInstances.ReturnToHeadendListOfStringUserDto = (myTestClient, mySerialNumberList, myUserDto) => true;

                var compositeEquipment = new CompositeEquipment
                {
                    ErrorDetails = new ErrorDetails()
                    {
                        Code = ResidentialGatewayErrorCode.GatewayNotFound.ToString(),
                        Message = @"Active RG not Found on Account. Provide the RG serial number and click the button below to associate."
                    }
                };
                ShimBusinessFacade.AllInstances.LoadCompositeEquipmentSearchFieldsDtoUserDto =
                    (myFacade, mySearchFields, arg3) => compositeEquipment;

                // First Act
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();
                var result = residentialController.RemoveResidentialGateway("deviceID");

                // First Assert
                Assert.IsNotNull(result, "Returned Json result with rendered partial view is null.");
                Assert.IsTrue(result is JsonResult, "result is not a JsonResult");

                // Second Act
                var resultJson = result as JsonResult;

                // Second Assert
                Assert.IsNotNull(resultJson, "Returned Json result is null.");
                dynamic resultData = resultJson.Data;
                var status = resultData.status as string;
                var errorMessage = string.Empty;
                if (status == "error")
                {
                    errorMessage = resultData.errorMessage;
                }
                Assert.AreEqual("valid", status, "RemoveResidentialGateway_HappyPath() - unexpected status from RemoveResidentialGateway() - {0}", errorMessage);
                var renderedPartial = resultData.returnedPartial as string;
                Assert.IsNotNull(renderedPartial, "Prerendered partial is null.");
            }
        }
        public void CVoipPhoneController_CreatePhone_With_Valid10Digit_PhoneNumber_CreateSubscriberPhone_In_Triad_Failed()
        {
            using (ShimsContext.Create())
            {
                // Fake the session state for HttpContext
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };

                //Arrange
                var myContext = new SIMPLTestContext();

                //Build FakeDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                //Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // Fake the HttpContext
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;

                // When the Fake HttpContext is called, provide the fake session state
                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                var fakeServiceAccount = myContext.GetFakeServiceAccountDto();
                var listFakeServiceAccounts = new List<ServiceAccountDto>
                {
                    fakeServiceAccount
                };

                ShimCurrentSubscriber.AllInstances.PhoneServicesListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.ServiceAccountListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.CurrentServiceAccountGet = delegate { return fakeServiceAccount; };
                ShimCurrentSubscriber.AllInstances.SubIdGet = delegate { return "89451"; };

                var phoneList = new List<PhoneDto>
                {
                    new PhoneDto()
                    {
                        PhoneNumber = "2068945100",
                        PhoneProvSpec = new PhoneProvSpecDto
                        {
                            LocalPIC = new PICDto(),
                            LongDistancePIC = new PICDto(),
                        }
                    }
                };

                //fake the loaded phones
                ShimRosettianClient.AllInstances.CreateSubscriberPhoneStringPhoneDtoUserDto = delegate { return false; };

                // create phone controller instance
                var phoneController = DependencyResolver.Current.GetService<CVoipPhoneController>();

                // Valid 10 digit Phone Number
                var result = phoneController.CreatePhone("2068945100");

                var jsonResult = result as JsonResult;

                // 1st Assert
                Assert.IsNotNull(jsonResult, "The result was not a JsonResult");

                // 2nd Assert
                Assert.AreEqual(((dynamic)jsonResult.Data).status, "error");

                // 3rd Assert
                Assert.AreEqual(((dynamic)jsonResult.Data).code, "500");

                // 4th Assert
                Assert.IsTrue(((dynamic)jsonResult.Data).errorMessage.Contains("Error creating phone in Triad"));
            }
        }
        public void CVoipPhoneController_CreatePhone_With_Valid10Digit_PhoneNumber_Successful()
        {
            using (ShimsContext.Create())
            {
                // Fake the session state for HttpContext
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };

                //Arrange
                var myContext = new SIMPLTestContext();

                //Build FakeDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                //Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // Fake the HttpContext
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;

                // When the Fake HttpContext is called, provide the fake session state
                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                var fakeServiceAccount = myContext.GetFakeServiceAccountDto();
                var listFakeServiceAccounts = new List<ServiceAccountDto>
                {
                    fakeServiceAccount
                };

                ShimCurrentSubscriber.AllInstances.PhoneServicesListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.ServiceAccountListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.CurrentServiceAccountGet = delegate { return fakeServiceAccount; };
                ShimCurrentSubscriber.SessionInstanceGet = () => new ShimCurrentSubscriber();

                var phoneList = new List<PhoneDto>
                {
                    new PhoneDto()
                    {
                        PhoneNumber = "2068945100",
                        PhoneProvSpec = new PhoneProvSpecDto
                        {
                            LocalPIC = new PICDto(),
                            LongDistancePIC = new PICDto(),
                        }
                    }
                };

                //fake the loaded phones
                ShimRosettianClient.AllInstances.CreateSubscriberPhoneStringPhoneDtoUserDto = delegate { return true; };
                ShimRosettianClient.AllInstances.LoadSubscriberPhonesStringUserDto = delegate { return phoneList; };
                ShimRosettianClient.AllInstances.UpdateSubscriberPhoneStringPhoneDtoUserDtoBoolean = delegate { return true; };

                // create phone controller instance
                var phoneController = DependencyResolver.Current.GetService<CVoipPhoneController>();

                // Valid 10 digit Phone Number
                var result = phoneController.CreatePhone("2068945100");

                // 1st Assert
                Assert.IsNotNull(result, "CVoipController CreatePhone returned null");

                var jsonResult = result as JsonResult;

                // 2nd Assert
                Assert.IsNotNull(jsonResult, "Cast to JsonResult result in null result");

                // 3rd Assert
                Assert.IsNotNull(jsonResult.Data, "jsonResult.Data is null");

                // 4th Assert
                Assert.AreEqual(((dynamic)jsonResult.Data).code, "200", "Invalid status code returned from controller");
            }
        }
        public void CVoipPhoneController_AddPhoneServices_Successful()
        {
            using (ShimsContext.Create())
            {
                // Fake the session state for HttpContext
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };

                //Arrange
                var myContext = new SIMPLTestContext();

                //Build FakeDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                //Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // Fake the HttpContext
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;

                // When the Fake HttpContext is called, provide the fake session state
                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                var fakeServiceAccount = myContext.GetFakeServiceAccountDto();
                var listFakeServiceAccounts = new List<ServiceAccountDto>
                {
                    fakeServiceAccount
                };

                ShimCurrentSubscriber.AllInstances.PhoneServicesListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.ServiceAccountListGet = delegate { return listFakeServiceAccounts; };
                ShimCurrentSubscriber.AllInstances.CurrentServiceAccountGet = delegate { return fakeServiceAccount; };
                ShimCurrentSubscriber.AllInstances.SubIdGet = delegate { return "89451"; };
                ShimCurrentSubscriber.AllInstances.VoiceProductTypeGet = delegate { return SubscriberEnums.VoiceProductType.CVoip; };

                var phoneList = new List<PhoneDto>
                {
                    new PhoneDto()
                    {

                        PhoneNumber = "2068945100",
                        PhoneProvSpec = new PhoneProvSpecDto
                        {
                            LocalPIC = new PICDto(),
                            LongDistancePIC = new PICDto(),
                            DSLUnitAddress = new List<DSLUnitAddressDto>
                            {
                                new DSLUnitAddressDto() {CLLICode = "ACME", HSIPort = "01-10-10"}
                            },
                            PrimaryNumber = "2068945100",
                            Services = new ServiceCollectionDto()
                            {
                                new DAL.DataTransfer.Provisioning.ServiceDto
                                {
                                    ClassName = "U-VERSE VOIP",
                                    Description = "METASWITCH SIP",
                                    Name = "FTRCFS"
                                }
                            }
                        }
                    }
                };

                //fake the loaded phones
                ShimRosettianClient.AllInstances.LoadSubscriberPhonesStringUserDto = delegate { return phoneList; };
                ShimRosettianClient.AllInstances.UpdateSubscriberPhoneStringPhoneDtoUserDtoBoolean = delegate { return true; };

                // create phone controller instance
                var phoneController = DependencyResolver.Current.GetService<CVoipPhoneController>();

                var result = phoneController.AddServices("2068945100", "[{\"className\":\"U-VERSE VOIP\",\"name\":\"FTRCFS\",\"description\":\"METASWITCH SIP\"}]", "[{\"className\":\"U-VERSE VOIP\",\"name\":\"FTRCFS\",\"description\":\"METASWITCH SIP\"}]");

                // 1st Assert
                Assert.IsNotNull(result, "CVoipController AddServices returned null");

                var jsonResult = result as JsonResult;

                // 2nd Assert
                Assert.IsNotNull(jsonResult, "Cast to JsonResult result in null result");

                // 3rd Assert
                Assert.IsNotNull(jsonResult.Data, "jsonResult.Data is null");

                // 4th Assert
                Assert.AreEqual(((dynamic)jsonResult.Data).code, "200", "Invalid status code returned from controller");
            }
        }