public void SyncPlantData_HappyPath()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                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;
                    }
                };

                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                 //Expected Result
                var expectedResult = new
                {
                    status = "valid",
                    message = "Success: DPI plant data will be updated in the next 10 minutes."
                };

                var fakeCurrentSubscriber = new ShimCurrentSubscriber
                {
                   LocationIdGet = () => "0089451",
                   DpiRegionGet = ()=>"CT"
                };

                ShimCurrentSubscriber.SessionInstanceGet = () => fakeCurrentSubscriber;

                // Call FacilitiesController SyncPlantData
                ShimEnterpriseClient.AllInstances.SyncPlantDataStringHeaderArgs = delegate { return true; };

                //Act
                var actualResult = FacilitiesControllerForTests.SyncPlantData() as JsonResult;

                // Test Validation
                Assert.IsNotNull(actualResult, "JsonResult returned is null");
                Assert.IsNotNull(actualResult.Data, "JsonResult Data returned is null");
                Assert.AreEqual(expectedResult.ToString(), actualResult.Data.ToString());
            }
        }
        public void ActivateResidentialGateway_ValidateSuccessScenario()
        {
            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 equipmentDto = new CompositeEquipment();

                ShimBusinessFacade.AllInstances.LoadCompositeEquipmentSearchFieldsDtoUserDto = (facade, dto, arg3) =>
                equipmentDto;

                ShimCurrentSubscriber.AllInstances.SubIdGet = o => "89451";
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => "0000453";
                ShimCurrentSubscriber.AllInstances.WanIpAddressGet = o => "12:12:12:12";
                ShimRosettianClient.AllInstances.LoadSubscriberStringUserDto = (client, subId, userDto) => new SubscriberDto();
                ShimCurrentSubscriber.UpdateWanIpAddressString = (myWanIpAddress) => { };

                ShimRosettianClient.AllInstances.ActivateResidentialGatewayStringStringUserDto =
                    (client, locationId, myDeviceId, userDto) => true;

                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (client, searchFields, userDto) => new List<EquipmentDto>();

                var deviceId = "PACE1122333";

                // create phone controller instance
                var controller = DependencyResolver.Current.GetService<ResidentialGatewayController>();
                var result = controller.ActivateResidentialGateway(deviceId, null);

                // 1st Assert
                Assert.IsNotNull(result, "ResidentialGateway.Update() 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("valid", ((dynamic)jsonResult.Data).status, "Invalid status code returned from controller");
            }
        }
        public void SyncPlantData_SadPath()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

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

                ShimCurrentUser.AsUserDto = () => new SIMPLTestContext().GetFakeUserDtoObject();

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

                ShimErrorLoggingService.AllInstances.LogErrorException = (myClient, myException) => { };

                // Expected Result
                var expectedResult = new
                {
                    status = "error",
                    errorMessage = "There was an error while updating the data -- please try again"
                };

                var fakeCurrentSubscriber = new ShimCurrentSubscriber
                {
                    DpiRegionGet = () => "CT"
                };

                ShimCurrentSubscriber.SessionInstanceGet = () => fakeCurrentSubscriber;

                // Call FacilitiesController SyncPlantData
                var actualResult = FacilitiesControllerForTests.SyncPlantData() as JsonResult;

                // Test Validation
                Assert.IsNotNull(actualResult, "JsonResult returned is null");
                Assert.IsNotNull(actualResult, "JsonResult Data returned is null");
                Assert.AreEqual(expectedResult.ToString(), actualResult.Data.ToString());
            }
        }
        public void Index_User_Is_Shown_Index2_View_With_A_Single_ONT_And_A_Single_RG()
        {
            using (ShimsContext.Create())
            {
                // Arrange
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate { return new LocationDto(); };
                ShimRosettianClient.AllInstances.GetServicesUserDto = delegate { return new ServiceCollectionDto(); };
                const string subscriberID = "999999999999";
                const string subscriberContactPhone = "9999999999";
                const string firstName = "Test";
                const string lastName = "Account";
                const string deviceID = "11111111";
                var myContext = new SIMPLTestContext();

                // Build Fake UserDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                // Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "abc123",
                };

                ShimCurrentUser.AllInstances.RolesGet = delegate { return new List<int> { 1 }; };

                // Shim Permissions.UserHasGrant
                ShimPermissions.UserHasGrantGrant = delegate { return true; };

                // Shim feature flag
                ShimFeatureFlags.IsEnabledString = delegate { return true; };

                // Build Fake AccountDto
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();

                // Build Fake CustomFieldDto
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();

                // Build Fake SubscriberDto
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberID, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);

                // Build Fake PhoneNumberAsIdDto (internally builds the Fake TelephoneNumberDto)
                var fakePhoneNumberAsIdDto = myContext.GetFakePhoneNumberAsIdDto(subscriberContactPhone);

                // Build Fake BillingAccountIdDto
                var fakeBillingAccountIdDto = myContext.GetFakeBillingAccountIdDto(subscriberID, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountIdDto
                var fakeCustomerAccountIdDto = myContext.GetFakeCustomerAccountIdDto(subscriberID, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountDto (internaly builds the Fake IndividualNameDto,
                // the Fake IndividualDto, and the Fake CustomerDto)
                var fakeCustomerAccountDto = myContext.GetFakeCustomerAccountDto(firstName, lastName, subscriberID, fakeBillingAccountIdDto, fakeCustomerAccountIdDto);

                // A single ONT
                var fakeEquipmentTypeDtoONT = new EquipmentTypeDto
                {
                    ONTModel = new ONTModelDto(),
                    Category = EquipmentCategoryDto.ONTDataPort
                };

                var myEquipmentDto1 = new EquipmentDto()
                {
                    Type = fakeEquipmentTypeDtoONT
                };

                // A single ONT
                var fakeEquipmentTypeDtoRG = new EquipmentTypeDto
                {
                    ONTModel = new ONTModelDto(),
                    Category = EquipmentCategoryDto.RGDataPort
                };

                var myEquipmentDto2 = new EquipmentDto()
                {
                    Type = fakeEquipmentTypeDtoRG
                };

                // A single Video Device
                var fakeEquipmentTypeDtoVideoDevice = new EquipmentTypeDto
                {
                    ONTModel = null
                };

                var myEquipmentDto3 = new EquipmentDto()
                {
                    Type = fakeEquipmentTypeDtoVideoDevice
                };

                fakeSubscriberDto.Accounts[0].Equipment = new EquipmentCollectionDto();
                fakeSubscriberDto.Accounts[0].Equipment.Add(myEquipmentDto1);
                fakeSubscriberDto.Accounts[0].Equipment.Add(myEquipmentDto2);
                fakeSubscriberDto.Accounts[0].Equipment.Add(myEquipmentDto3);

                // Build Fake CompositeSubscriber
                var fakeCompositeSubscriber = new CompositeSubscriber()
                {
                    SubscriberTriad = fakeSubscriberDto,
                    SubscriberDpi = fakeCustomerAccountDto
                };

                // Fake the BusinessFacade.LoadCompositeSubscriber call
                ShimBusinessFacade.AllInstances.LoadCompositeSubscriberStringStringUserDto =
                    delegate { return fakeCompositeSubscriber; };

                // Build Fake fakeEquipmentDto
                var fakeEquipmentDto = new List<EquipmentDto>();
                fakeEquipmentDto.Add(myEquipmentDto1);
                fakeEquipmentDto.Add(myEquipmentDto2);
                fakeEquipmentDto.Add(myEquipmentDto3);

                // Fake the RosettianClient.SearchEquipment call
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myRosettianClient, mySubscriberID, myUserObject) => fakeEquipmentDto;

                // A single ONT
                var fakeONT = new ONT
                {
                    Type = fakeEquipmentTypeDtoONT
                };

                // A single RG
                var fakeRG = new ONT
                {
                    Type = fakeEquipmentTypeDtoRG
                };

                var fakeONTAndRGList = new List<ONT>();
                fakeONTAndRGList.Add(fakeONT);
                fakeONTAndRGList.Add(fakeRG);

                var fakeONTList = new List<ONT>();
                fakeONTList.Add(fakeONT);

                var fakeRGList = new List<ONT>();
                fakeRGList.Add(fakeRG);

                // Fake the EquipmentExtension.ToONTList call
                SIMPL.Areas.Common.Extensions.Fakes.ShimEquipmentExtension.ToONTListIEnumerableOfEquipmentDto =
                    (myEquipmentList) =>
                    {
                        if (myEquipmentList != null)
                        {
                            var items = myEquipmentList.ToList();

                            if (items.Any())
                            {
                                if (items.Count == 2)
                                {
                                    return fakeONTAndRGList;
                                }
                                if (items[0].Type.Category == EquipmentCategoryDto.ONTDataPort)
                                {
                                    return fakeONTList;
                                }
                                if (items[0].Type.Category == EquipmentCategoryDto.RGDataPort)
                                {
                                    return fakeRGList;
                                }
                            }
                        }

                        return new List<ONT>();
                    };

                // A single Video Device
                var fakeVideoDevice = new SerializableVideoDevice();
                var fakeVideoDeviceList = new List<SerializableVideoDevice>();
                fakeVideoDeviceList.Add(fakeVideoDevice);

                // Fake the EquipmentExtension.ToVideoDeviceList call
                ShimEquipmentExtension.ToVideoDeviceListIEnumerableOfEquipmentDto =
                    (myVideoDeviceList) => fakeVideoDeviceList;

                var currentSubscriber = new ShimCurrentSubscriber
                {
                    SubIdGet = () => "SubId",
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;

                // Fake the CurrentSubscriber.SetInstance call
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.DataProductTypeGet = (myResult) => SubscriberEnums.DataProductType.Ftth;

                // Fake the CurrentSubscriber.VideoProductType call
                ShimCurrentSubscriber.AllInstances.VideoProductTypeGet = (myResult) => SubscriberEnums.VideoProductType.FiberRf;

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.VoiceProductTypeGet = (myResult) => SubscriberEnums.VoiceProductType.FiberPots;

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.StateGet = (myResult) => "CT";

                ShimCurrentUser.RetrieveUserRolesString = (myUniqueId) => new List<int>() { 1 };

                //Fake DB call to get Headends
                var headends = new List<HeadEnd>()
                {
                    new HeadEnd()
                    {
                        EntityKey = new EntityKey(),
                        headend_code = "1",
                        headend_loc = "1",
                        headend_name = "1",
                        headend_nbr = 1,
                        location_id = "1",
                        location_nbr = 1
                    }
                };

                ShimDBCache.HeadEndCodesGet = delegate { return headends; };

                //Fake Line Results DB Call.
                var testResultsDbSet = new ShimDbSet<test_results>();

                testResultsDbSet.Bind(new List<test_results>().AsQueryable());

                ShimLineTestEntities.AllInstances.test_resultsGet = delegate { return testResultsDbSet; };

                // 1st Act
                var result = SubscriberControllerForTests.Index(subscriberID, deviceID) as ViewResult;

                // 1st set of Asserts
                Assert.IsNotNull(result, "SubscriberController Index method returned null");
                Assert.IsNotNull(result.ViewName, "result.ViewName method is null");
                const string expectedViewName = "Index2";
                Assert.IsTrue(expectedViewName == result.ViewName, "Expected: " + expectedViewName + ", Actual: " + result.ViewName);
                Assert.IsTrue(result.ViewName.Equals(expectedViewName));
                Assert.IsTrue(result.Model is SubscriberModel, "Not SubscriberModel");

                // 2nd Act
                var testSubscriberModel = result.Model as SubscriberModel;

                // 2nd set of Asserts
                var successCode = "200";
                Assert.AreEqual(successCode, testSubscriberModel.ActionResponse.Code, "Test threw an exception {0}{0}{1}", Environment.NewLine, testSubscriberModel.ActionResponse.Message);

                var jss = new JavaScriptSerializer();
                var expectedModel = fakeCompositeSubscriber.MapToSubscriberModel();
                expectedModel.SubEquipmentModel = new SubscriberEquipmentModel
                {
                    ONTList = fakeONTAndRGList,
                    ONTOnlyList = fakeONTList,
                    RGOnlyList = fakeRGList,
                    VideoDeviceList = fakeVideoDeviceList,
                    AccessDeviceList = fakeONTAndRGList,
                    LoadedSubID = subscriberID,
                    LoadedLocID = expectedModel.SubLocationModel.LocationID,
                    WanIpAddress = string.Empty,
                    MaxStb = string.Empty
                };
                expectedModel.SubLocationModel.LoadedDeviceID = deviceID;
                Assert.AreEqual(jss.Serialize(expectedModel.ActionResponse), jss.Serialize(testSubscriberModel.ActionResponse), "SubscriberModel");
                Assert.AreEqual(jss.Serialize(expectedModel.SubDetailsModel), jss.Serialize(testSubscriberModel.SubDetailsModel), "SubscriberDetailsModel");
                Assert.AreEqual(jss.Serialize(expectedModel.SubLocationModel), jss.Serialize(testSubscriberModel.SubLocationModel), "SubscriberLocationModel");

                // Since deviceID is not null, check to verify that LoadedDeviceID has the expected value
                Assert.AreEqual(deviceID, expectedModel.SubLocationModel.LoadedDeviceID, "LoadedDeviceID should not be string.Empty is deviceID is {0}", deviceID);
                Assert.AreEqual(jss.Serialize(expectedModel.SubServicesModel), jss.Serialize(testSubscriberModel.SubServicesModel), "SubscriberServicesModel");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.ONTList), jss.Serialize(testSubscriberModel.SubEquipmentModel.ONTList), "SubscriberEquipmentModel ONTList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.ONTOnlyList), jss.Serialize(testSubscriberModel.SubEquipmentModel.ONTOnlyList), "SubscriberEquipmentModel ONTOnlyList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.RGOnlyList), jss.Serialize(testSubscriberModel.SubEquipmentModel.RGOnlyList), "SubscriberEquipmentModel RGOnlyList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.VideoDeviceList), jss.Serialize(testSubscriberModel.SubEquipmentModel.VideoDeviceList), "SubscriberEquipmentModel VideoDeviceList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel), jss.Serialize(testSubscriberModel.SubEquipmentModel), "SubscriberEquipmentModel entire object");
            }
        }
        public void Index_SubscriberDetails_AccountType()
        {
            using (ShimsContext.Create())
            {
                // Arrange
                const string subscriberId = "1234567890";
                const string subscriberContactPhone = "4250010001";
                const string firstName = "JAMES";
                const string lastName = "SMITH";
                const AccountTypeDto accountType = AccountTypeDto.Business;
                var myContext = new SIMPLTestContext();

                // Build Fake UserDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                // Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "abc123"
                };

                // Build Fake AccountDto
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();
                fakeAccountDto.AccountType = accountType;

                // Build Fake CustomFieldDto
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();

                // Build Fake SubscriberDto
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberId, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);

                // Build Fake PhoneNumberAsIdDto (internally builds the Fake TelephoneNumberDto)
                var fakePhoneNumberAsIdDto = myContext.GetFakePhoneNumberAsIdDto(subscriberContactPhone);

                // Build Fake BillingAccountIdDto
                var fakeBillingAccountIdDto = myContext.GetFakeBillingAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountIdDto
                var fakeCustomerAccountIdDto = myContext.GetFakeCustomerAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountDto (internaly builds the Fake IndividualNameDto,
                // the Fake IndividualDto, and the Fake CustomerDto)
                var fakeCustomerAccountDto = myContext.GetFakeCustomerAccountDto(firstName, lastName, subscriberId, fakeBillingAccountIdDto, fakeCustomerAccountIdDto);

                // Build Fake CompositeSubscriber
                var fakeCompositeSubscriber = new CompositeSubscriber()
                {
                    SubscriberTriad = fakeSubscriberDto,
                    SubscriberDpi = fakeCustomerAccountDto
                };

                // Fake the BusinessFacade.LoadCompositeSubscriber call
                ShimBusinessFacade.AllInstances.LoadCompositeSubscriberStringStringUserDto =
                    delegate { return fakeCompositeSubscriber; };
                //TODO: Figure out why it is failing without below
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto = delegate
                {
                    return new List<EquipmentDto>();
                };
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate
                {
                    return new LocationDto();
                };

                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto = delegate
                {
                    return new List<EquipmentDto>();
                };
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate
                {
                    return new LocationDto();
                };

                var currentSubscriber = new ShimCurrentSubscriber
                {
                    SubIdGet = () => subscriberId,
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;

                // Fake the CurrentSubscriber.SetInstance call
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };

                // Call Index
                var result = SubscriberControllerForTests.Index(subscriberId, string.Empty) as ViewResult;

                // Validate view
                Assert.IsNotNull(result);
                Assert.AreEqual("Index2", result.ViewName, "ViewName does not match!");

                // Validate subscriber details account type
                var testSubscriberModel = result.Model as SubscriberModel ?? new SubscriberModel();

                var successCode = "200";
                Assert.AreEqual(successCode, testSubscriberModel.ActionResponse.Code, "Test threw an exception {0}{0}{1}", Environment.NewLine, testSubscriberModel.ActionResponse.Message);

                var actualSubDetailsModel = testSubscriberModel.SubDetailsModel;
                Assert.IsNotNull(actualSubDetailsModel, "SubscriberDetailsModel is null");
                Assert.AreEqual(subscriberId, actualSubDetailsModel.USI, "USI does not match");
                Assert.AreEqual(accountType, actualSubDetailsModel.AccountType, "AccountType does not match");
            }
        }
        public void User_receives_an_error_when_trying_to_load_a_location_with_an_invalid_locationid()
        {
            //Setup
            var myContext = new SIMPLTestContext();

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // And a invalid location id
                var locationId = string.Empty;

                // 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");
                Assert.IsNotNull(actionResult.ViewData, "actionResult.ViewData, actionResult.ViewData method returned null");

                // And the response is an error
                Assert.AreEqual("The Location Id cannot be null or empty.", actionResult.ViewData["error"], string.Format("The response should have been Error Message, but was {0}", actionResult.ViewData["error"]));
            }
        }
        public void Can_load_a_device_that_is_at_a_provisioned_location_with_no_subscriber()
        {
            //Setup
            var myContext = new SIMPLTestContext();
            const string locationId = "123345";
            const string deviceId = "MRCC12341234D01";

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // And a known device
                var fakeEquipmentDto = new List<EquipmentDto>()
                {
                    new EquipmentDto(){LocationId = "123345", SerialNumber = "MRCC12341234D01", Type = new EquipmentTypeDto(){ONTModel = new ONTModelDto()}}

                };

                // And the device is associated to a provisioned location
                var fakeLocationDto = myContext.GetFakeLocationDtoObject(locationId);
                var fakeLocationDtoList = new LocationCollectionDto()
                {
                    fakeLocationDto
                };

                // And the provisioned location is not associated to a subscriber

                ShimRosettianClient.AllInstances.SearchLocationsSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchCriteria, myUserDto) => fakeLocationDtoList;
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate { return fakeLocationDto; };

                // And the location has no devices
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchFields, myUser) => fakeEquipmentDto;

                // And the location is not associated to a subscriber
                var fakeSubscriberDto = new List<SubscriberDto>();
                ShimRosettianClient.AllInstances.SearchSubscribersSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchFields, myUserDto) => fakeSubscriberDto;

                ShimDBCache.LocationsGet = delegate { return new List<Location>(); };

                // When loading that device
                var actionResult = SubscriberControllerForTests.LoadEquipment(deviceId) as ViewResult;

                // Then the user receives a response
                Assert.IsNotNull(actionResult, "SubscriberController LoadLocation method returned null");

                // And the response is successful
                Assert.IsNotNull(actionResult.Model, "Model was null");
                var actualModel = actionResult.Model as SubscriberModel;

                Assert.IsNotNull(actualModel, "Model was null");
                Assert.IsNotNull(actualModel.ActionResponse, "actualModel.ActionResponse was null");
                Assert.AreNotEqual("500", actualModel.ActionResponse.Code, "We received a 500 code as the actionresponse.");
                Assert.AreEqual("Index2", actionResult.ViewName, "actionResult.RouteValues[\"action\"]");

                // And the selected tab is the OSP/CPE tab
                Assert.AreEqual(3, actualModel.SelectedTabIndex, "The default tab was not the notes tab");
            }
        }
        public void User_can_load_a_subscriber_that_is_billed_but_not_provisioned()
        {
            using (ShimsContext.Create())
            {
                // Setup
                const string subscriberID = "999999999999";
                string deviceID = null;
                const string state = "";
                const string region = "PA";
                const string subscriberName = "Billed Subscriber";
                const string expectedTN = "5551231234";

                var myContext = new SIMPLTestContext();

                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimRosettianClient.AllInstances.LoadSubscriberStringUserDto = delegate
                {
                    return new SubscriberDto();
                };
                ShimRosettianClient.AllInstances.LoadSubscriberPhonesStringUserDto = delegate
                {
                    return new List<PhoneDto>();
                };
                ShimEnterpriseClient.AllInstances.GetBillingServiceAccountsStringHeaderArgs = delegate
                {
                    var billingAccount = new BillingandServiceAccountDto();
                    billingAccount.ServiceAccounts = new List<ServiceAccountDto>();
                    var customerAccount = new CustomerAccountDto();
                    var customer = new CustomerDto();
                    customer.ContactName = subscriberName;
                    customerAccount.Customer = customer;
                    billingAccount.CustomerAccount = customerAccount;
                    var serviceAccountDto = new ServiceAccountDto
                    {
                        SubscriberName = subscriberName,
                        TN = expectedTN,
                        USI = subscriberID,
                    };
                    billingAccount.ServiceAccounts.Add(serviceAccountDto);
                    return billingAccount;
                };
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber
                {
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };
                // When loading that subscriber
                var result = SubscriberControllerForTests.Index(subscriberID, deviceID, state, region) as ViewResult;

                //Then the user receives a successful response
                Assert.IsNotNull(result, "SubscriberController Index method returned null");
                Assert.IsNotNull(result.Model, "result.Model method returned null");
                var testSubscriberModel = result.Model as SubscriberModel;

                Assert.IsNotNull(testSubscriberModel, "Subscriber Model returned null");
                Assert.AreEqual("200", testSubscriberModel.ActionResponse.Code, "Test threw an exception {0}{0}{1}", Environment.NewLine, testSubscriberModel.ActionResponse.Message);

                var subDetials = testSubscriberModel.SubDetailsModel;
                Assert.AreEqual(subscriberID, subDetials.USI, string.Format("Billing USI not used: Actual-{0}, Expected-{1}", subDetials.USI, subscriberID));
                Assert.AreEqual(subscriberName, subDetials.DisplayedName, string.Format("Billing Subscriber Name not used: Actual-{0}, Expected-{1}", subDetials.DisplayedName, subscriberName));
                Assert.AreEqual(region, subDetials.BillingRegion, string.Format("Billing Region is incorrect: Actual-{0}, Expected-{1}", subDetials.BillingRegion, region));
                Assert.AreEqual(expectedTN, subDetials.WTN, "WTN do not match billing TN");
            }
        }
        public void Index_HappyPath()
        {
            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;

                // SIMPL.Session.Fakes.ShimCurrentSubscriber.SessionInstanceGet = () => new ShimCurrentSubscriber();

                // 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;

                //Expected result
                const string expectedIpAddressLabel = "WAN_IP_ADDR";
                const string expectedIpAddressValue = "10.143.22.1";
                const string expectedBaseModelValue = "A5550";
                const string expectedSerialNumber = "PACE99999991";
                const string expectedUnitAddress = "0D-U9-M6-D2-D7";
                const string expectedLocationId = "locId";
                const string expectedRoomLocationLabel = "ROOM_LOCATION";
                const string expectedRoomLocationValue = "TEST ROOM";
                const string expectedMacAddressLable = "ENET_MAC_ADDR";
                const string expectedMacAddressValue = "A0B1C2D3E4F5";

                var customFieldsDto = new List<CustomFieldDto>();
                var expectedIpAddressCustomField = new CustomFieldDto
                {
                    Label = expectedIpAddressLabel,
                    Value = expectedIpAddressValue,
                };
                customFieldsDto.Add(expectedIpAddressCustomField);

                var expectedRoomLocationCustomField = new CustomFieldDto
                {
                    Label = expectedRoomLocationLabel,
                    Value = expectedRoomLocationValue
                };
                customFieldsDto.Add(expectedRoomLocationCustomField);

                var expectedMacAddressCustomField = new CustomFieldDto
                {
                    Label = expectedMacAddressLable,
                    Value = expectedMacAddressValue
                };
                customFieldsDto.Add(expectedMacAddressCustomField);

                var customFieldsCollection = new CustomFieldCollectionDto
                {
                    expectedIpAddressCustomField,
                    expectedRoomLocationCustomField,
                    expectedMacAddressCustomField
                };

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

                var IPVideoType = new EquipmentTypeDto
                {
                    ONTModel = new ONTModelDto
                    {
                        BaseModel = expectedBaseModelValue
                    },
                    Category = EquipmentCategoryDto.DVR,
                    IptvCapable = true
                };

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

                var equipmentPhoneDto = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "P01",
                    CustomFields = customFieldsDto,
                    UnitAddress = expectedUnitAddress,
                    LocationId = expectedLocationId,
                    Type = RgType,
                    Status = "ACTIVE"
                };

                var ipVideoDevice = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "P01",
                    CustomFields = customFieldsDto,
                    UnitAddress = expectedUnitAddress,
                    LocationId = expectedLocationId,
                    Type = IPVideoType,
                    Status = "ACTIVE"
                };

                var searchEquipmentsResult = new List<EquipmentDto>();
                searchEquipmentsResult.Add(equipmentDataDto);
                searchEquipmentsResult.Add(equipmentPhoneDto);
                searchEquipmentsResult.Add(ipVideoDevice);

                var loadSubscriberPhonesResult = new List<PhoneDto>();

                // shim CurrentSubscriber WanIpAddress
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber
                {
                    WanIpAddressGet = () => expectedIpAddressValue,
                    ProvisionedPhonesListGet = () => loadSubscriberPhonesResult
                };

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

                equipmentDataDto.CustomFields = customFieldsDto;

                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => equipmentDataDto;

                ShimRosettianClient.AllInstances.GetCustomFieldsUserDto =
                    (myTestClient, myUserDto) => customFieldsCollection;

                ShimVirtualPathUtility.ToAbsoluteString =
                    (myTestString) => @"http://testapp/images/DVR.png";

                ShimDBCache.LocationsGet = delegate { return new List<Location>(); };

                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();
                var result = residentialController.Index("subID", "locID", "devID") as PartialViewResult ?? new PartialViewResult();
                Assert.IsNotNull(result, "Partial view result returned is null.");
                Assert.IsTrue(result.ViewName.Equals("Index"), "View names do not match.");
                Assert.AreEqual(expectedIpAddressValue, ((ResidentialGatewayModel)(result.Model)).IPAddress, "Expected IP does not match with actual IP.");
                Assert.AreEqual(expectedUnitAddress, ((ResidentialGatewayModel)(result.Model)).UnitAddress, "Expected UnitAddress does not match with actual Unit Address.");
                Assert.AreEqual(expectedMacAddressValue, ((ResidentialGatewayModel)(result.Model)).MacAddress, "Expected MacAddress does not match with actual Mac Address.");
                Assert.AreEqual(expectedBaseModelValue, ((ResidentialGatewayModel)(result.Model)).Model, "Expected Model number does not match with actual Model number.");
                Assert.AreEqual(expectedSerialNumber, ((ResidentialGatewayModel)(result.Model)).ID, "Expected serial number does not match with actual serial number.");
                Assert.IsTrue(((ResidentialGatewayModel)(result.Model)).VideoDevices.Any(), "No video devices found.");
                Assert.IsTrue(((ResidentialGatewayModel)(result.Model)).VideoDevices.First().Type.Equals("DVR"), "IP Video device type mismatch.");
                Assert.IsTrue(((ResidentialGatewayModel)(result.Model)).VideoDevices.First().RoomLocation.Any(), "No Room locations found.");
            }
        }
        public void If_TiVo_Only_Subscriber_Redirect_to_RF_Video_Partial()
        {
            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;

                // SIMPL.Session.Fakes.ShimCurrentSubscriber.SessionInstanceGet = () => new ShimCurrentSubscriber();

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

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

                ShimCurrentSubscriber.AllInstances.HasTivoServiceOnlyGet = delegate { return true; };

                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();
                var result = residentialController.Index("subID", "locID", "devID");

                Assert.IsNotNull(result);
                Assert.IsTrue(result is RedirectToRouteResult);

                var action = result as RedirectToRouteResult;

                Assert.AreEqual("LoadVideoMgmt", action.RouteValues["action"], string.Format("The redirect should have been to the LoadVideoMgmt action, instead it redirected to {0}", action.RouteValues["action"]));
                Assert.AreEqual("VideoDevice", action.RouteValues["controller"], string.Format("The redirect should have been to the VideoDevice controller, instead it redirected to {0}", action.RouteValues["controller"]));

            }
        }
        public void ActivateResidentialGateway_hasNoMainRg_hasListOtherRgs_hasIpVideoDevice_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;

                //Expected result
                const string expectedIpAddressLabel = "WAN_IP_ADDR";
                const string expectedIpAddressValue = "10.143.22.1";
                const string expectedBaseModelValue = "A5550";
                const string expectedSerialNumber = "PACE99999991";
                const string expectedUnitAddress = "001E46";
                const string expectedLocationId = "123456789";
                const string expectedRoomLocationLabel = "ROOM_LOCATION";
                const string expectedRoomLocationValue = "TEST ROOM";
                const string expectedMacAddressLable = "ENET_MAC_ADDR";
                const string expectedMacAddressValue = "A0B1C2D3E4F5";
                const string expectedSelectedRoomLabel = "SELECTED_ROOM";
                const string expectedSelectedRoomValue = "MASTER BED ROOM";

                var customFieldsDto = new List<CustomFieldDto>();
                // RG custom fields
                var expectedIpAddressCustomField = new CustomFieldDto
                {
                    Label = expectedIpAddressLabel,
                    Value = expectedIpAddressValue,
                };
                customFieldsDto.Add(expectedIpAddressCustomField);

                var expectedMacAddressCustomField = new CustomFieldDto
                {
                    Label = expectedMacAddressLable,
                    Value = expectedMacAddressValue
                };
                customFieldsDto.Add(expectedMacAddressCustomField);

                // ip video device custom fields
                var expectedRoomLocationCustomField = new CustomFieldDto
                {
                    Label = expectedRoomLocationLabel,
                    Value = expectedRoomLocationValue
                };
                customFieldsDto.Add(expectedRoomLocationCustomField);

                var expectedSelectedRoomCustomField = new CustomFieldDto
                {
                    Label = expectedSelectedRoomLabel,
                    Value = expectedSelectedRoomValue
                };
                customFieldsDto.Add(expectedSelectedRoomCustomField);

                var customFieldsCollection = new CustomFieldCollectionDto
                {
                    expectedIpAddressCustomField,
                    expectedRoomLocationCustomField,
                    expectedMacAddressCustomField
                };

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

                var ipVideoType = new EquipmentTypeDto
                {
                    Model = "ISP7500",
                    Category = EquipmentCategoryDto.DVR,
                    IptvCapable = true
                };

                // main active RG
                var equipmentDataDto = new EquipmentDto
                {
                    SerialNumber = expectedSerialNumber + "D01",
                    CustomFields = customFieldsDto,
                    UnitAddress = expectedUnitAddress,
                    LocationId = expectedLocationId,
                    Type = rgType,
                    Status = "ACTIVE"
                };
                var mainRg = new List<EquipmentDto>
                {
                    equipmentDataDto,
                    new EquipmentDto
                    {
                        SerialNumber = expectedSerialNumber + "P01",
                        CustomFields = customFieldsDto,
                        UnitAddress = expectedUnitAddress,
                        LocationId = expectedLocationId,
                        Type = rgType,
                        Status = "ACTIVE"
                    },
                    new EquipmentDto
                    {
                        SerialNumber = expectedSerialNumber + "P02",
                        CustomFields = customFieldsDto,
                        UnitAddress = expectedUnitAddress,
                        LocationId = expectedLocationId,
                        Type = rgType,
                        Status = "ACTIVE"
                    }
                };

                // ip video device
                var ipVideoDevice = new EquipmentDto
                {
                    SerialNumber = "STBTEST1234",
                    CustomFields = new List<CustomFieldDto> { expectedRoomLocationCustomField },
                    UnitAddress = "1234567890",
                    LocationId = expectedLocationId,
                    Type = ipVideoType,
                    Status = "ACTIVE"
                };

                // other RGs on the account
                var otherRgs = new List<EquipmentDto>
                {
                    new EquipmentDto
                    {
                        SerialNumber = "RGCREATE1234" + "D01",
                        CustomFields = customFieldsDto,
                        UnitAddress = expectedUnitAddress,
                        LocationId = expectedLocationId,
                        Type = rgType,
                        Status = "IGNORE"
                    },
                    new EquipmentDto
                    {
                        SerialNumber = "RGCREATE2345" + "D01",
                        CustomFields = customFieldsDto,
                        UnitAddress = expectedUnitAddress,
                        LocationId = expectedLocationId,
                        Type = rgType,
                        Status = "IGNORE"
                    },
                    new EquipmentDto
                    {
                        SerialNumber = "RGCREATE3456" + "D01",
                        CustomFields = customFieldsDto,
                        UnitAddress = expectedUnitAddress,
                        LocationId = expectedLocationId,
                        Type = rgType,
                        Status = "IGNORE"
                    },
                };

                // set location
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => expectedLocationId;

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

                // set activate residential gateway to true
                ShimRosettianClient.AllInstances.ActivateResidentialGatewayStringStringUserDto =
                    (myTestclient, mylocationId, myDeviceId, userDto) => true;

                // expected search results after Activate RG
                var searchEquipmentsResult = new List<EquipmentDto>();
                searchEquipmentsResult.AddRange(mainRg);
                searchEquipmentsResult.AddRange(otherRgs);
                searchEquipmentsResult.Add(ipVideoDevice);

                // set search results to expected
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myTestClient, mySearchFields, myUserDto) => searchEquipmentsResult;

                // expected custom fields
                equipmentDataDto.CustomFields = customFieldsDto;

                // set load eqiupment for main RG
                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => equipmentDataDto;

                // set custom fields
                ShimRosettianClient.AllInstances.GetCustomFieldsUserDto = (myTestClient, myUserDto) => customFieldsCollection;

                // set ip video device path
                ShimVirtualPathUtility.ToAbsoluteString = (myTestString) => @"http://testapp/images/DVR.png";

                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // call ActivateResidentialGateway of ResidentialGatewayController
                var result = residentialController.ActivateResidentialGateway(expectedSerialNumber, expectedLocationId) as JsonResult;

                // validate json result
                Assert.IsNotNull(result, "Returned Json result is null");

                dynamic resultData = result.Data;
                var status = resultData.status as string;
                var errorMessage = string.Empty;
                if (status == "error")
                {
                    errorMessage = resultData.errorMessage;
                }
                Assert.AreEqual("valid", status, "status is not valid - {0}", errorMessage);
                var renderedPartial = resultData.returnedPartial as string;
                Assert.IsNotNull(renderedPartial, "Prerendered partial is null.");
            }
        }
        public void EditResidentialGateway_hasMainRg_hasListOtherRgs_hasIpVideoDevice_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;

                // current location
                const string expectedLocationId = "123456789";

                // expected all devices on current location
                var customFieldsDto = RgTestData_CustomFieldsCollection();
                var mainRg = RgTestData_MainRg(customFieldsDto, expectedLocationId);
                var ipVideoDevice = RgTestData_IpVideoDevice(customFieldsDto, expectedLocationId);
                var otherRgs = RgTestData_OtherRgList(customFieldsDto, expectedLocationId);

                // rg to be updated
                var rgTobeUpdated = otherRgs.First();
                rgTobeUpdated.UnitAddress = "12345678";

                // set location and sub
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => expectedLocationId;
                ShimCurrentSubscriber.AllInstances.SubIdGet = o => "1234567";
                ShimCurrentSubscriber.AllInstances.WanIpAddressGet = o => "10.10.10.10";

                // set eidt residential gateway to true
                ShimRosettianClient.AllInstances.UpdateONTPortsEquipmentCriteriaCollectionDtoUserDto = (myTestclient, myEquipmentCriteriaDto, userDto) => true;

                // expected search results after Update RG
                var searchEquipmentsResult = new List<EquipmentDto>();
                searchEquipmentsResult.AddRange(mainRg);
                searchEquipmentsResult.AddRange(otherRgs);
                searchEquipmentsResult.Add(ipVideoDevice);

                // set search results to expected
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myTestClient, mySearchFields, myUserDto) => searchEquipmentsResult;

                // expected custom fields
                var equipmentDataDto = mainRg.First(x => x.SerialNumber.EndsWith("D01"));
                equipmentDataDto.CustomFields = customFieldsDto.ToList();

                // set load eqiupment for main RG
                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => equipmentDataDto;

                // set custom fields
                ShimRosettianClient.AllInstances.GetCustomFieldsUserDto = (myTestClient, myUserDto) => customFieldsDto;

                // set ip video device path
                ShimVirtualPathUtility.ToAbsoluteString = (myTestString) => @"http://testapp/images/DVR.png";

                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // RG to be updated
                var model4Update = new ResidentialGatewayModel
                {
                    ID = rgTobeUpdated.SerialNumber,
                    UnitAddress = rgTobeUpdated.UnitAddress
                };

                // call EditResidentialGateway of ResidentialGatewayController
                var result = residentialController.EditResidentialGateway(model4Update) as JsonResult;

                // validate json result
                Assert.IsNotNull(result, "Returned Json result is null");

                dynamic resultData = result.Data;
                var status = resultData.status as string;
                var errorMessage = string.Empty;
                if (status == "error")
                {
                    errorMessage = resultData.errorMessage;
                }
                Assert.AreEqual("valid", status, "status is not valid - {0}", errorMessage);
                var renderedPartial = resultData.returnedPartial as string;
                Assert.IsNotNull(renderedPartial, "Prerendered partial is null.");
            }
        }
        public void AddVideoDevice_ValidateSuccessScenario()
        {
            using (ShimsContext.Create())
            {
                // arrange
                var myContext = new SIMPLTestContext();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };
                ShimHttpContext.AllInstances.SessionGet = o => session;

                // current subscriber
                const string currentSubscriberId = "CURRENTSUBSCRIBER";

                // current location
                const string currentLocationId = "CURRENTLOCATION";

                // new IP video device to be added
                var customFieldsDto = RgTestData_CustomFieldsCollection();
                var ipVideoDevice = RgTestData_IpVideoDevice(customFieldsDto, "ADIFFERENTLOCATION");

                // set location Id
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => currentLocationId;

                // set subscriber id
                ShimCurrentSubscriber.AllInstances.SubIdGet = o => currentSubscriberId;

                // set Rosettian LoadEquipment with ipVideoDevice
                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => ipVideoDevice;

                // set Rosettian UpdateEquipment to success
                ShimRosettianClient.AllInstances.UpdateEquipmentEquipmentDtoUserDto =
                    (myTestClient, myEquipmentDto, myUserDto) => true;

                // set Rosettian SearchEquipment to return ipVideoDevice
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myTestClient, myEquipmentDto, myUserDto) => new List<EquipmentDto> { ipVideoDevice };

                //Get Custom Fields
                ShimRosettianClient.AllInstances.GetCustomFieldsUserDto = delegate { return new CustomFieldCollectionDto(); }
                    ;
                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // call AddVideoDevice action method
                var result = residentialController.AddVideoDevice(ipVideoDevice.SerialNumber) as JsonResult;

                // validate returned results
                Assert.IsNotNull(result, "ActionResult is null");
                Assert.IsNotNull(result.Data, "Data is null");
                dynamic actualResult = result.Data;
                Assert.AreEqual("200", actualResult.code);
                Assert.AreEqual("valid", actualResult.status);
            }
        }
        public void AddVideoDevice_DeviceIdDoesNotExist_ValidateFailedScenario()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };
                ShimHttpContext.AllInstances.SessionGet = o => session;

                // current subscriber
                const string currentSubscriberId = "SUBIDWITHANYVALUE";

                // current location
                const string currentLocationId = "LOCIDWITHANYVALUE";

                // deviceId to be added
                const string deviceId = "DEVICEIDDOESNOTEXIST";

                // set location Id
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => currentLocationId;

                // set subscriber id
                ShimCurrentSubscriber.AllInstances.SubIdGet = o => currentSubscriberId;

                // set LoadEquipment for the IP device to be empty since it does not exist
                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => new EquipmentDto();

                // expected AddVideoDevice Json result
                var expectedResult = new
                {
                    status = "error",
                    errorMessage = string.Format("Error adding device [{0}]: Activation is not allowed, device [{0}] does not exist",
                        deviceId)
                };

                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // call AddVideoDevice action method
                var actualResult = residentialController.AddVideoDevice(deviceId) as JsonResult;

                // validate result
                Assert.IsNotNull(actualResult, "AddVideoDevice Json result is null");
                Assert.IsTrue(actualResult != null && actualResult.Data != null);
                Assert.AreEqual(expectedResult.ToJSON(), actualResult.Data.ToJSON());
            }
        }
        public void UpdateVideoDevices_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;

                ShimBusinessFacade.AllInstances.LoadVideoDevicesSearchFieldsDtoUserDto = (facade, dto, arg3) =>
                    new List<EquipmentDto>();

                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto = (client, s, arg3, arg4) => new EquipmentDto
                {
                    CustomFields = new List<CustomFieldDto> { new CustomFieldDto { Label = "ROOM_LOCATION" } }
                };

                ShimRosettianClient.AllInstances.UpdateEquipmentEquipmentDtoUserDto = (client, dto, arg3) => true;
                ShimErrorLoggingService.AllInstances.LogErrorException = (myClient, myException) => { };

                ShimCurrentSubscriber.AllInstances.LocationIdGet = (mySubscriber) => "0089451";
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();
                var result = residentialController.UpdateVideoDevices("[{\"ID\":\"M77441GA1002\",\"Status\":\"DISABLED\",\"SelectedRoom\":\"GARAGE\",\"GuidInfo\":{\"Guid\":\"454f676e...\",\"Tooltip\":\"454f676e-a1af-474a-a508-8044d505790f\"},\"Model\":{\"ImagePath\":\"/Images/CiscoDVR.png\",\"ModelName\":\"ISB7500\"},\"Type\":\"DVR\"}]");
                Assert.IsNotNull(result, "Partial view result returned is null.");
                Assert.IsTrue(result is JsonResult, "result is not JsonResult");

                var resultJsonResult = result as JsonResult;
                Assert.IsNotNull(resultJsonResult, "Partial view result returned is null.");
                dynamic dynResult = resultJsonResult.Data;
                Assert.AreEqual("valid", dynResult.status, "Status doesn't match expected");
            }
        }
        public void RefreshSubscriber_ValidateSuccessScenario()
        {
            using (ShimsContext.Create())
            {
                var myContext = new SIMPLTestContext();
                var currentSubscriber = new ShimCurrentSubscriber();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // current sub
                currentSubscriber.FoundInBillingGet = () => true;
                var subModel = new SubscriberDetailsModel()
                {
                    Name = "JAMES SMITH",
                    USI = "123456789",
                    AccountType = AccountTypeDto.Residential,
                    CurrentServiceStatus = true
                };
                currentSubscriber.NameGet = () => subModel.Name;
                currentSubscriber.SubIdGet = () => subModel.USI;
                currentSubscriber.AccountTypeGet = () => subModel.AccountType;
                currentSubscriber.ServiceEnabledGet = () => subModel.CurrentServiceStatus;

                // fakes
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = (myCurrentSubscriber) => new SubscriberDto();

                // fake ROZ PerformSubscriberOperation result
                ShimRosettianClient.AllInstances.PerformSubscriberOperationStringSubscriberOperationDtoUserDto =
                    (myRosettianClient, mySubId, mySubscriberOperationDto, myUserDto) => true;

                // expected json result
                var expectedJsonResult = new
                {
                    status = "valid",
                    message = string.Format("Successfully refreshed subscriber for USI [{0}]", subModel.USI)
                }.ToJSON();

                // call RefreshSubscriber action method
                var actualResult = SubscriberControllerForTests.RefreshSubscriber() as JsonResult;

                // validate result
                Assert.IsNotNull(actualResult, "JsonResult returned is null");
                Assert.IsNotNull(actualResult.Data, "JsonResult Data returned is null");
                Assert.AreEqual(expectedJsonResult, actualResult.Data.ToJSON());
            }
        }
        public void User_can_load_a_location_that_is_not_associated_to_a_subscriber_with_no_devices()
        {
            //Setup
            var myContext = new SIMPLTestContext();
            const string locationId = "9999999";

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // Fake the session state for HttpContext
                // http://blog.christopheargento.net/2013/02/02/testing-untestable-code-thanks-to-ms-fakes/
                var session = new ShimHttpSessionState();
                session.ItemGetString = (key) => { if (key == "LoadedLocation") return null; return null; };

                // 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;

                ShimCurrentSubscriber.UpdateSubscriberLocationModel = delegate { };

                // And a known location
                var fakeLocationDto = myContext.GetFakeLocationDtoObject(locationId);

                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = (myRosettianClient, myLocationId, myUserDto) => fakeLocationDto;

                // And the location has no devices
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto = (myRosettianClient, mySearchFields, myUser) => new List<EquipmentDto>();

                // And the location is not associated to a subscriber
                var fakeSubscriberDto = new List<SubscriberDto>();
                ShimRosettianClient.AllInstances.SearchSubscribersSearchFieldsDtoUserDto = (myRosettianClient, mySearchFields, myUserDto) => fakeSubscriberDto;

                // When loading that location
                var actionResult = SubscriberControllerForTests.LoadLocation(locationId) as ViewResult;

                // Then the user receives a response
                Assert.IsNotNull(actionResult, "SubscriberController LoadLocation method returned null");

                // And the response is successful
                Assert.AreEqual("Index2", actionResult.ViewName, "actionResult.RouteValues[\"action\"]");

                // And the response returns the location information
                var expectedModel = fakeLocationDto.MapToSubscriberModel();
                var actualModel = actionResult.Model as SubscriberModel;
                Assert.IsNotNull(actualModel, "The model returned was empty");
                Assert.IsNotNull(actualModel.SubLocationModel, "The sub location model returned was empty");
                Assert.IsTrue(expectedModel.SubLocationModel.Address1.Equals(actualModel.SubLocationModel.Address1), "The Address was different");

                // And the location matches the requested location
                Assert.AreEqual(locationId, actualModel.SubLocationModel.LocationID, "Location Id did not match the one that was searched for.");

                // And the notes tab is the selected tab
                Assert.AreEqual(5, actualModel.SelectedTabIndex, "The default tab was not the notes tab");
            }
        }
        public void Index_hasIpVideoDevices_IpVideoDeviceHasBadUnitAddress()
        {
            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;
                ShimCurrentSubscriber.AllInstances.HasTivoServiceOnlyGet = delegate { return false; };

                // current location
                const string expectedLocationId = "123456789";

                // expected all devices on current location
                var customFieldsDto = RgTestData_CustomFieldsCollection();
                var mainRg = RgTestData_MainRg(customFieldsDto, expectedLocationId);
                var otherRgs = RgTestData_OtherRgList(customFieldsDto, expectedLocationId);
                var ipVideoDevices = new List<EquipmentDto>
                {
                    RgTestData_IpVideoDevice(customFieldsDto, expectedLocationId),
                    RgTestData_IpVideoDevice2(customFieldsDto, expectedLocationId)
                };
                Assert.IsTrue(ipVideoDevices.Any(x => string.IsNullOrWhiteSpace(x.UnitAddress)), "1 of IP video devices should have null or empty unit address");

                // expected search results
                var searchEquipmentsResult = new List<EquipmentDto>();
                searchEquipmentsResult.AddRange(mainRg);
                searchEquipmentsResult.AddRange(otherRgs);
                searchEquipmentsResult.AddRange(ipVideoDevices);

                // set search results to expected search results
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myTestClient, mySearchFields, myUserDto) => searchEquipmentsResult;

                // set load phones shim
                var loadSubscriberPhonesResult = new List<PhoneDto>();
                ShimCurrentSubscriber.AllInstances.ProvisionedPhonesListGet = o => loadSubscriberPhonesResult;

                // expected custom fields
                var equipmentDataDto = mainRg.First(x => x.SerialNumber.EndsWith("D01"));
                equipmentDataDto.CustomFields = customFieldsDto.ToList();

                // epected RG details
                var expectedIpAddressValue = equipmentDataDto.CustomFields.First(x => x.Label == "WAN_IP_ADDR").Value;
                var expectedBaseModelValue = equipmentDataDto.Type.ONTModel.BaseModel;
                var expectedSerialNumber = equipmentDataDto.SerialNumber.Substring(0, equipmentDataDto.SerialNumber.Length - 3);
                var expectedUnitAddress = equipmentDataDto.UnitAddress;
                var expectedMacAddressValue = equipmentDataDto.CustomFields.First(x => x.Label == "ENET_MAC_ADDR").Value;

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

                // set load equipment for main RG
                ShimRosettianClient.AllInstances.LoadEquipmentStringBooleanUserDto =
                    (myTestClient, myEquipmentId, returnExtraData, myUserDto) => equipmentDataDto;

                ShimRosettianClient.AllInstances.GetCustomFieldsUserDto = (myTestClient, myUserDto) => customFieldsDto;
                ShimVirtualPathUtility.ToAbsoluteString = (myTestString) => @"http://testapp/images/DVR.png";
                ShimDBCache.LocationsGet = delegate { return new List<Location>(); };

                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // call Index of ResidentialGatewayController
                var result = residentialController.Index("12345", expectedLocationId, null) as PartialViewResult ?? new PartialViewResult();

                // validate partial view and model is not null
                Assert.IsNotNull(result, "Partial view result returned is null.");
                Assert.IsTrue(result.ViewName.Equals("Index"), "View names do not match.");

                var residentialGatewayModel = (ResidentialGatewayModel)(result.Model);
                Assert.IsNotNull(residentialGatewayModel);

                // validate the ErrorInfo is null
                Assert.IsNull(residentialGatewayModel.ErrorInfo);

                // validate main RG details
                Assert.AreEqual(expectedIpAddressValue, residentialGatewayModel.IPAddress, "IP does not match.");
                Assert.AreEqual(expectedUnitAddress, residentialGatewayModel.UnitAddress, "UnitAddress does not match.");
                Assert.AreEqual(expectedMacAddressValue, residentialGatewayModel.MacAddress, "MacAddress does not match.");
                Assert.AreEqual(expectedBaseModelValue, residentialGatewayModel.Model, "Model number does not match.");
                Assert.AreEqual(expectedSerialNumber, residentialGatewayModel.ID, "Serial number does not match.");

                // validate other RGs list
                Assert.IsTrue(residentialGatewayModel.OtherRGList.Any(), "No other RGs found.");
                Assert.AreEqual(otherRgs.Count, residentialGatewayModel.OtherRGList.Count, "Other RGs count does not match.");
                otherRgs = otherRgs.OrderBy(x => x.SerialNumber).ToList();
                residentialGatewayModel.OtherRGList = residentialGatewayModel.OtherRGList.OrderBy(x => x.ID).ToList();
                for (int i = 0; i < otherRgs.Count; i++)
                {
                    var expected = otherRgs[i];
                    var actual = residentialGatewayModel.OtherRGList[i];
                    Assert.AreEqual(expected.SerialNumber.Substring(0, expected.SerialNumber.Length - 3), actual.ID, "Other RG serial number does not match.");
                    Assert.AreEqual(expected.LocationId, actual.LocationID, "Other RG location id does not match.");
                    Assert.AreEqual(expected.Status, actual.Status, "Other RG status does not match.");
                    Assert.AreEqual(expected.UnitAddress, actual.UnitAddress, "Other RG UnitAddress does not match.");
                    Assert.AreEqual(expected.Type.ONTModel.BaseModel, actual.Model, "Other RG UnitAddress does not match.");
                }

                // validate ip video device
                Assert.IsTrue(residentialGatewayModel.VideoDevices.Any(), "No video devices found.");
                Assert.AreEqual(ipVideoDevices.Count, residentialGatewayModel.VideoDevices.Count, "IP Video devices count does not match.");
                ipVideoDevices = ipVideoDevices.OrderBy(x => x.SerialNumber).ToList();
                residentialGatewayModel.VideoDevices = residentialGatewayModel.VideoDevices.OrderBy(x => x.ID).ToList();

                Assert.IsTrue(ipVideoDevices.Any(x => string.IsNullOrWhiteSpace(x.UnitAddress)), "1 of expected IP video devices should have null or empty unit address");
                for (var i = 0; i < ipVideoDevices.Count; i++)
                {
                    var expected = ipVideoDevices[i];
                    var actual = residentialGatewayModel.VideoDevices[i];
                    Assert.AreEqual(expected.Type.Category.ToString(), actual.Type, "IP Video device type mismatch.");
                    Assert.AreEqual(expected.Type.Model, actual.Model.ModelName, "IP Video device model mismatch.");
                    Assert.AreEqual(expected.SerialNumber, actual.ID, "IP Video device serial number does not match.");
                    Assert.AreEqual(expected.Status, actual.Status, "IP Video device  does not match.");
                    Assert.AreEqual(expected.UnitAddress, actual.GuidInfo.Tooltip, "IP Video device UnitAddress does not match.");
                    if (string.IsNullOrWhiteSpace(expected.UnitAddress))
                    {
                        Assert.IsTrue(string.IsNullOrWhiteSpace(actual.GuidInfo.Tooltip), "Actual unit address should be null for {0}", actual.ID);
                        Assert.AreEqual("No Data", actual.GuidInfo.Guid, "GUID should be displayed as No Data if unit address is null or empty");
                    }
                }
            }
        }
        public void User_can_load_a_subscriber_that_is_provisioned_but_not_billed()
        {
            using (ShimsContext.Create())
            {
                // Setup
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate { return new LocationDto(); };
                ShimRosettianClient.AllInstances.GetServicesUserDto = delegate { return new ServiceCollectionDto();};
                const string subscriberID = "999999999999";
                const string subscriberContactPhone = "9999999999";
                string firstName = "Test";
                string lastName = "Account";
                string deviceID = null;
                SIMPLTestContext myContext = new SIMPLTestContext();

                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // And a known subscriber
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberID, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto = (myRosettianClient, mySubscriberID, myUserObject) => new List<EquipmentDto>();

                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber
                {
                    DataProductTypeGet = () => SubscriberEnums.DataProductType.Unknown,
                    VideoProductTypeGet = () => SubscriberEnums.VideoProductType.Unknown,
                    VoiceProductTypeGet = () => SubscriberEnums.VoiceProductType.Unknown,
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };

                //And the subscriber is not billed
                ShimEnterpriseClient.AllInstances.GetBillingServiceAccountsStringHeaderArgs = delegate { return null; };

                // And the subscriber is provisioned
                ShimRosettianClient.AllInstances.LoadSubscriberStringUserDto = (myRosettianClient, mySubId, myUser) => fakeSubscriberDto;
                ShimRosettianClient.AllInstances.LoadSubscriberPhonesStringUserDto = delegate { return new List<PhoneDto>();};

                //Fake DB call to get Headends
                var headends = new List<HeadEnd>()
                {
                    new HeadEnd()
                    {
                        EntityKey = new EntityKey(),
                        headend_code = "1",
                        headend_loc = "1",
                        headend_name = "1",
                        headend_nbr = 1,
                        location_id = "1",
                        location_nbr = 1
                    }
                };

                ShimDBCache.HeadEndCodesGet = delegate { return headends; };

                //Fake Line Results DB Call.
                var testResultsDbSet = new ShimDbSet<test_results>();

                testResultsDbSet.Bind(new List<test_results>().AsQueryable());

                ShimLineTestEntities.AllInstances.test_resultsGet = delegate { return testResultsDbSet; };

                // When loading that subscriber
                var result = SubscriberControllerForTests.Index(subscriberID, deviceID) as ViewResult;

                //Then the user receives a successful response
                Assert.IsNotNull(result, "SubscriberController Index method returned null");
                Assert.IsNotNull(result.Model, "result.Model method returned null");
                var testSubscriberModel = result.Model as SubscriberModel;
                Assert.IsNotNull(testSubscriberModel, "Subscriber Model returned null");
                Assert.IsNotNull(testSubscriberModel.ActionResponse, "Subscriber Model returned null");
                Assert.AreEqual("200", testSubscriberModel.ActionResponse.Code, "Test threw an exception {0}{0}{1}", Environment.NewLine, testSubscriberModel.ActionResponse.Message);

                // And the response contains the subscriber name
                var subscriberFullName = string.Format("{0} {1}", firstName, lastName);
                Assert.AreEqual(subscriberFullName, testSubscriberModel.SubDetailsModel.DisplayedName, "Provisioned Name was missing or incorrect");
                // And the response contains the subscriber id
                Assert.AreEqual(subscriberID, testSubscriberModel.SubDetailsModel.USI, "USI was missing or incorrect");

                // And the response does not contain the WTN
                Assert.IsTrue(string.IsNullOrEmpty(testSubscriberModel.SubDetailsModel.WTN), "Reponse contained a WTN");
                // And the response also contains a message that indicated the subscriber was not found in DPI
                Assert.IsFalse(testSubscriberModel.SubDetailsModel.FoundInBilling,"The found in DPI flag was set to true when it should have been false.");

            }
        }
        public void Index_When_DeviceID_IsNull_User_Is_Shown_Index2_View()
        {
            using (ShimsContext.Create())
            {
                // Arrange
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto = delegate { return new LocationDto(); };
                ShimRosettianClient.AllInstances.GetServicesUserDto = delegate { return new ServiceCollectionDto(); };
                const string subscriberID = "999999999999";
                const string subscriberContactPhone = "9999999999";
                const string firstName = "Test";
                const string lastName = "Account";
                const string deviceID = null;
                var myContext = new SIMPLTestContext();

                // Build Fake UserDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                // Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "abc123"
                };

                ShimCurrentUser.AllInstances.RolesGet = delegate { return new List<int> {1}; };

                // Shim Permissions.UserHasGrant
                ShimPermissions.UserHasGrantGrant = delegate { return true; };

                // Shim feature flag
                ShimFeatureFlags.IsEnabledString = delegate { return true; };

                // Build Fake AccountDto
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();

                // Build Fake CustomFieldDto
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();

                // Build Fake SubscriberDto
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberID, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);

                // Build Fake PhoneNumberAsIdDto (internally builds the Fake TelephoneNumberDto)
                var fakePhoneNumberAsIdDto = myContext.GetFakePhoneNumberAsIdDto(subscriberContactPhone);

                // Build Fake BillingAccountIdDto
                var fakeBillingAccountIdDto = myContext.GetFakeBillingAccountIdDto(subscriberID, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountIdDto
                var fakeCustomerAccountIdDto = myContext.GetFakeCustomerAccountIdDto(subscriberID, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountDto (internaly builds the Fake IndividualNameDto,
                // the Fake IndividualDto, and the Fake CustomerDto)
                var fakeCustomerAccountDto = myContext.GetFakeCustomerAccountDto(firstName, lastName, subscriberID, fakeBillingAccountIdDto, fakeCustomerAccountIdDto);

                // Build Fake CompositeSubscriber
                var fakeCompositeSubscriber = new CompositeSubscriber()
                {
                    SubscriberTriad = fakeSubscriberDto,
                    SubscriberDpi = fakeCustomerAccountDto,
                };

                // Fake the BusinessFacade.LoadCompositeSubscriber call
                ShimBusinessFacade.AllInstances.LoadCompositeSubscriberStringStringUserDto =
                    delegate { return fakeCompositeSubscriber; };

                // Build Fake fakeEquipmentDto
                var fakeEquipmentDto = new List<EquipmentDto>();

                // Fake the RosettianClient.SearchEquipment call
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myRosettianClient, mySubscriberID, myUserObject) => fakeEquipmentDto;

                // Fake the EquipmentExtension.ToONTList call
                // Returning new List<ONT> as this is valid for this test as the subscriber doesn't have any equipment
                SIMPL.Areas.Common.Extensions.Fakes.ShimEquipmentExtension.ToONTListIEnumerableOfEquipmentDto =
                    (myEquipmentList) => new List<ONT>();

                // No Video Devices
                var fakeVideoDeviceList = new List<SerializableVideoDevice>();

                // Fake the EquipmentExtension.ToVideoDeviceList call
                ShimEquipmentExtension.ToVideoDeviceListIEnumerableOfEquipmentDto =
                    (myVideoDeviceList) => fakeVideoDeviceList;

                var currentSubscriber = new ShimCurrentSubscriber
                {
                    SubIdGet = () => "SubId",
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;

                // Fake the CurrentSubscriber.SetInstance call
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.DataProductTypeGet = (myResult) => SubscriberEnums.DataProductType.Ftth;

                // Fake the CurrentSubscriber.VideoProductType call
                ShimCurrentSubscriber.AllInstances.VideoProductTypeGet = (myResult) => SubscriberEnums.VideoProductType.FiberRf;

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.VoiceProductTypeGet = (myResult) => SubscriberEnums.VoiceProductType.FiberPots;

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.StateGet = (myResult) => "CT";

                //Fake DB call to get Headends
                var headends = new List<HeadEnd>()
                {
                    new HeadEnd()
                    {
                        EntityKey = new EntityKey(),
                        headend_code = "1",
                        headend_loc = "1",
                        headend_name = "1",
                        headend_nbr = 1,
                        location_id = "1",
                        location_nbr = 1
                    }
                };

                ShimDBCache.HeadEndCodesGet = delegate { return headends; };

                //Fake Line Results DB Call.
                var testResultsDbSet = new ShimDbSet<test_results>();

                testResultsDbSet.Bind(new List<test_results>().AsQueryable());

                ShimLineTestEntities.AllInstances.test_resultsGet = delegate { return testResultsDbSet; };

                ShimCurrentUser.RetrieveUserRolesString = (myUniqueId) => new List<int>() { 1 };

                // 1st Act
                var result = SubscriberControllerForTests.Index(subscriberID, deviceID) as ViewResult;

                // 1st set of Asserts
                Assert.IsNotNull(result, "SubscriberController Index method returned null");
                Assert.IsNotNull(result.ViewName, "result.ViewName method returned null");
                Assert.IsTrue(result.ViewName.Equals("Index2"));
                Assert.IsTrue(result.Model is SubscriberModel, "Not SubscriberModel");

                // 2nd Act
                var testSubscriberModel = result.Model as SubscriberModel;

                // 2nd set of Asserts
                var successCode = "200";
                Assert.AreEqual(successCode, testSubscriberModel.ActionResponse.Code, "Test threw an exception {0}{0}{1}", Environment.NewLine, testSubscriberModel.ActionResponse.Message);

                var jss = new JavaScriptSerializer();
                var expectedModel = fakeCompositeSubscriber.MapToSubscriberModel();
                expectedModel.SubEquipmentModel.ONTOnlyList = new List<ONT>();
                expectedModel.SubEquipmentModel.RGOnlyList = new List<ONT>();
                expectedModel.SubEquipmentModel.LoadedSubID = subscriberID;
                expectedModel.SubEquipmentModel.LoadedLocID = expectedModel.SubLocationModel.LocationID;
                expectedModel.SubEquipmentModel.WanIpAddress = string.Empty;
                expectedModel.SubEquipmentModel.MaxStb = string.Empty;
                Assert.AreEqual(jss.Serialize(expectedModel.ActionResponse), jss.Serialize(testSubscriberModel.ActionResponse));

                Assert.AreEqual(jss.Serialize(expectedModel.SubDetailsModel), jss.Serialize(testSubscriberModel.SubDetailsModel));
                Assert.AreEqual(jss.Serialize(expectedModel.SubLocationModel),jss.Serialize(testSubscriberModel.SubLocationModel));

                // Since deviceID is null, check to verify that LoadedDeviceID is string.Empty
                Assert.AreEqual(string.Empty, expectedModel.SubLocationModel.LoadedDeviceID, "LoadedDeviceID should be string.Empty is deviceID is null");
                Assert.AreEqual(jss.Serialize(expectedModel.SubServicesModel),jss.Serialize(testSubscriberModel.SubServicesModel));
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.ONTList), jss.Serialize(testSubscriberModel.SubEquipmentModel.ONTList), "SubscriberEquipmentModel ONTList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.ONTOnlyList), jss.Serialize(testSubscriberModel.SubEquipmentModel.ONTOnlyList), "SubscriberEquipmentModel ONTOnlyList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.RGOnlyList), jss.Serialize(testSubscriberModel.SubEquipmentModel.RGOnlyList), "SubscriberEquipmentModel RGOnlyList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel.VideoDeviceList), jss.Serialize(testSubscriberModel.SubEquipmentModel.VideoDeviceList), "SubscriberEquipmentModel VideoDeviceList");
                Assert.AreEqual(jss.Serialize(expectedModel.SubEquipmentModel), jss.Serialize(testSubscriberModel.SubEquipmentModel));
            }
        }
        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 LoadEditSubContent()
        {
            using (ShimsContext.Create())
            {
                // Arrange
                const string subscriberId = "1234567890";
                const string subscriberContactPhone = "4250010001";
                const string firstName = "JAMES";
                const string lastName = "SMITH";
                const AccountTypeDto accountType = AccountTypeDto.Business;
                var myContext = new SIMPLTestContext();

                // Build Fake UserDto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                // Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "abc123"
                };

                // Build Fake AccountDto
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();
                fakeAccountDto.AccountType = accountType;

                // Build Fake CustomFieldDto
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();

                // Build Fake SubscriberDto
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberId, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);

                // Build Fake PhoneNumberAsIdDto (internally builds the Fake TelephoneNumberDto)
                var fakePhoneNumberAsIdDto = myContext.GetFakePhoneNumberAsIdDto(subscriberContactPhone);

                // Build Fake BillingAccountIdDto
                var fakeBillingAccountIdDto = myContext.GetFakeBillingAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountIdDto
                var fakeCustomerAccountIdDto = myContext.GetFakeCustomerAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountDto (internaly builds the Fake IndividualNameDto,
                // the Fake IndividualDto, and the Fake CustomerDto)
                var fakeCustomerAccountDto = myContext.GetFakeCustomerAccountDto(firstName, lastName, subscriberId, fakeBillingAccountIdDto, fakeCustomerAccountIdDto);

                // Build Fake CompositeSubscriber
                var fakeCompositeSubscriber = new CompositeSubscriber()
                {
                    SubscriberTriad = fakeSubscriberDto,
                    SubscriberDpi = fakeCustomerAccountDto
                };

                // Fake the BusinessFacade.LoadCompositeSubscriber call
                ShimBusinessFacade.AllInstances.LoadCompositeSubscriberStringStringUserDto =
                    delegate { return fakeCompositeSubscriber; };

                var currentSubscriber = new ShimCurrentSubscriber
                {
                    SubIdGet = () => "SubId",
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;

                // Fake the CurrentSubscriber.SetInstance call
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.StateGet = (myResult) => "CT";

                ShimCurrentUser.RetrieveUserRolesString = (myUniqueId) => new List<int>() { 1 };

                // Expected subscriber details model
                var expectedSubDetailsModel =
                    (fakeCompositeSubscriber.MapToSubscriberModel() ?? new SubscriberModel()).SubDetailsModel;
                Assert.IsNotNull(expectedSubDetailsModel, "Expected SubscriberDetailsModel is null");
                Assert.AreEqual(subscriberId, expectedSubDetailsModel.USI, "Expected USI does not match");
                Assert.AreEqual(accountType, expectedSubDetailsModel.AccountType, "Expected AccountType does not match");

                // Call LoadEditSubContent Action Method
                var result = SubscriberControllerForTests.LoadEditSubContent(expectedSubDetailsModel) as PartialViewResult;

                // Validate Action Method result
                Assert.IsNotNull(result, "LoadEditSubContent returned partial view is null");
                Assert.AreEqual("EditSub_Partial", result.ViewName, "LoadEditSubContent ViewName does not match!");

                // Validate returned subscriber details model
                var actualSubDetailsModel = result.Model as SubscriberDetailsModel;
                Assert.IsNotNull(actualSubDetailsModel, "Actual SubscriberDetailsModel is null");
                var jss = new JavaScriptSerializer();
                Assert.AreEqual(jss.Serialize(expectedSubDetailsModel), jss.Serialize(actualSubDetailsModel),
                    "SubscriberDetailsModel does not match");
            }
        }
        public void When_searching_by_location_can_load_a_subscriber()
        {
            //Setup
            var myContext = new SIMPLTestContext();
            const string subscriberID = "999999999999";
            const string subscriberContactPhone = "9999999999";
            const string firstName = "Test";
            const string lastName = "Account";
            const string locationId = "9999999";

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // And a known location
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();
                fakeAccountDto.Location = myContext.GetFakeLocationDtoObject(locationId);

                // And the location is associated to a subscriber
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();
                var fakeSubscriberDto = new List<SubscriberDto>();
                fakeSubscriberDto.Add(myContext.GetFakeSubscriberDto(subscriberID, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto));

                ShimRosettianClient.AllInstances.SearchSubscribersSearchFieldsDtoUserDto = (myRosettianClient, mySearchFields, myUserDto) => fakeSubscriberDto;

                // When loading that location
                var actionResult = SubscriberControllerForTests.LoadLocation(locationId) as RedirectToRouteResult;

                // Then the user receives a response
                Assert.IsNotNull(actionResult, "SubscriberController LoadLocation method returned null");
                Assert.IsNotNull(actionResult.RouteValues, "actionResult.RouteValues is null");
                // And the response is successful
                // And the response redirects them to the subscriber index
                Assert.AreEqual(2, actionResult.RouteValues.Count, "actionResult.RouteValues.Count");
                Assert.AreEqual("Index", actionResult.RouteValues["action"], "actionResult.RouteValues[\"action\"]");

                // And the usi returned matches the billing usi
                Assert.AreEqual(subscriberID, actionResult.RouteValues["subID"], "actionResult.RouteValues[\"subID\"]");
            }
        }
        public void LoadEditSubContent_AccountTypeShowsUnknownInSubDetails_AccountTypeSelectListExcludesUnknown()
        {
            using (ShimsContext.Create())
            {
                // subscriber data
                const string subscriberId = "1234567890";
                const string subscriberContactPhone = "4250010001";
                const string firstName = "JAMES";
                const string lastName = "SMITH";
                const AccountTypeDto accountType = AccountTypeDto.Unknown;
                var myContext = new SIMPLTestContext();

                // fake userdto
                var fakeUserDto = myContext.GetFakeUserDtoObject();

                // set current instance
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "abc123"
                };

                // fake account
                var fakeAccountDto = myContext.GetFakeAccountDtoObject();
                fakeAccountDto.AccountType = accountType;

                // fake custome field
                var fakeCustomFieldDto = myContext.GetFakeCustomFieldDto();

                // fake subscriber
                var fakeSubscriberDto = myContext.GetFakeSubscriberDto(subscriberId, firstName, lastName, subscriberContactPhone, fakeCustomFieldDto, fakeAccountDto);

                // fake PhoneNumberAsIdDto (internally builds the Fake TelephoneNumberDto)
                var fakePhoneNumberAsIdDto = myContext.GetFakePhoneNumberAsIdDto(subscriberContactPhone);

                // fake BillingAccountIdDto
                var fakeBillingAccountIdDto = myContext.GetFakeBillingAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // fake CustomerAccountIdDto
                var fakeCustomerAccountIdDto = myContext.GetFakeCustomerAccountIdDto(subscriberId, fakePhoneNumberAsIdDto);

                // Build Fake CustomerAccountDto (internaly builds the Fake IndividualNameDto,
                // the Fake IndividualDto, and the Fake CustomerDto)
                var fakeCustomerAccountDto = myContext.GetFakeCustomerAccountDto(firstName, lastName, subscriberId, fakeBillingAccountIdDto, fakeCustomerAccountIdDto);

                // Build Fake CompositeSubscriber
                var fakeCompositeSubscriber = new CompositeSubscriber()
                {
                    SubscriberTriad = fakeSubscriberDto,
                    SubscriberDpi = fakeCustomerAccountDto
                };

                // Fake the BusinessFacade.LoadCompositeSubscriber call
                ShimBusinessFacade.AllInstances.LoadCompositeSubscriberStringStringUserDto =
                    delegate { return fakeCompositeSubscriber; };

                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber
                {
                    SubIdGet = () => "SubId",
                    ProvisionedServicesListGet = () => new List<ServiceDto>()
                };

                // Fake the CurrentSubscriber.SetInstance call
                ShimCurrentSubscriber.SetInstanceCompositeSubscriberSubscriberModel = (myCompositeSubscriber, mySubscriberModel) => { };

                // Fake the CurrentSubscriber.DataProductType call
                ShimCurrentSubscriber.AllInstances.StateGet = (myResult) => "CT";

                ShimCurrentUser.RetrieveUserRolesString = (myUniqueId) => new List<int>() { 1 };

                // expected subscriber details model
                var expectedSubDetailsModel =
                    (fakeCompositeSubscriber.MapToSubscriberModel() ?? new SubscriberModel()).SubDetailsModel;
                Assert.IsNotNull(expectedSubDetailsModel, "Expected SubscriberDetailsModel is null");
                Assert.AreEqual(subscriberId, expectedSubDetailsModel.USI, "Expected USI does not match");
                Assert.AreEqual(accountType, expectedSubDetailsModel.AccountType, "Expected AccountType does not match");

                // call LoadEditSubContent Action Method
                var result = SubscriberControllerForTests.LoadEditSubContent(expectedSubDetailsModel) as PartialViewResult;

                // validate view
                Assert.IsNotNull(result, "LoadEditSubContent returned partial view is null");
                Assert.AreEqual("EditSub_Partial", result.ViewName, "LoadEditSubContent ViewName does not match!");

                // validate returned subscriber details model
                var actualSubDetailsModel = result.Model as SubscriberDetailsModel;
                Assert.IsNotNull(actualSubDetailsModel, "Actual SubscriberDetailsModel is null");
                var jss = new JavaScriptSerializer();
                Assert.AreEqual(jss.Serialize(expectedSubDetailsModel), jss.Serialize(actualSubDetailsModel),
                    "SubscriberDetailsModel does not match");

                // validate the account type is still unknown
                Assert.AreEqual(AccountTypeDto.Unknown, actualSubDetailsModel.AccountType, "AccountType should be Unknown");

                // validate the account type select list used for "Edit" contains no unknown even the account type shows unknown in sub details
                Assert.IsTrue(
                    actualSubDetailsModel.AccountTypeSelectList.All(x => x.Value != AccountTypeDto.Unknown.ToString()),
                        "AccountType dropdownlist should not contain a list item of Unknown");
            }
        }
        public void Can_edit_a_billed_and_provisioned_subscriber_information()
        {
            using (ShimsContext.Create())
            {
                var myContext = new SIMPLTestContext();
                var currentSubscriber = new ShimCurrentSubscriber();

                //Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                //And the subscriber is billed
                currentSubscriber.FoundInBillingGet = () => true;

                //And the subscriber is provisioned
                var subModel = new SubscriberDetailsModel()
                {
                    Name = "New Name",
                    USI = "ID",
                    CBR = "CBR",
                    TriadEmail = "Email",
                };
                currentSubscriber.NameGet = () => subModel.Name;
                currentSubscriber.SubIdGet = () => subModel.USI;
                currentSubscriber.EmailGet = () => subModel.Email;
                currentSubscriber.CbrGet = () => subModel.CBR;

                //And the name needs to be changed on the provisioned account
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;
                currentSubscriber.NameSetString = (myName) => { };
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = (myCurrentSubscriber) => new SubscriberDto();
                ShimRosettianClient.AllInstances.UpdateSubscriberSubscriberDtoBooleanUserDto = (myRosettianClient, mySubscriber, overwrite, myUserDto) => true;
                ShimCurrentSubscriber.UpdateSubscriberDto = (mySubDto) => { };

                //When editing the subscriber
                var result = SubscriberControllerForTests.UpdateSubscriber(subModel) as JsonResult;

                //Then the user receives a response
                Assert.IsNotNull(result, "Update Subscriber test - null ActionResult");
                Assert.IsNotNull(result.Data, "Update Subscriber test - null ActionResult.Data");

                //And the response is successful
                dynamic resultStatus = result.Data;
                var status = resultStatus.status as string;
                Assert.IsNotNull(status);
                Assert.AreEqual("valid", status, "Reponse Status was error, it should have been valid.");
            }
        }
        public void Can_load_a_device_that_is_at_a_inventory_location()
        {
            //Setup
            var myContext = new SIMPLTestContext();
            const string locationId = "HEADEND";
            const string deviceId = "MRCC12341234D01";

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // And a known device
                var fakeEquipmentDto = new List<EquipmentDto>()
                {
                    new EquipmentDto(){LocationId = locationId, SerialNumber = deviceId, Type = new EquipmentTypeDto(){ONTModel = new ONTModelDto()}}

                };

                // And the device is associated to a provisioned location
                var fakeLocationDto = myContext.GetFakeLocationDtoObject(locationId);
                var fakeLocationDtoList = new LocationCollectionDto()
                {
                    fakeLocationDto
                };

                // And the provisioned location is not associated to a subscriber
                fakeLocationDtoList[0].HasSubscriber = false;
                ShimRosettianClient.AllInstances.SearchLocationsSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchCriteria, myUserDto) => fakeLocationDtoList;

                // And the location has no devices
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchFields, myUser) => fakeEquipmentDto;

                // And the location has no devices
                ShimRosettianClient.AllInstances.LoadLocationStringUserDto =
                    (myRosettianClient, myLocId, myUser) => fakeLocationDto;

                // And the location is not associated to a subscriber
                var fakeSubscriberDto = new List<SubscriberDto>();
                ShimRosettianClient.AllInstances.SearchSubscribersSearchFieldsDtoUserDto =
                    (myRosettianClient, mySearchFields, myUserDto) => fakeSubscriberDto;

                // When loading that device
                var actionResult = SubscriberControllerForTests.LoadEquipment(deviceId) as ViewResult;

                // Then the user receives a response
                Assert.IsNotNull(actionResult, "SubscriberController LoadLocation method returned null");

                // And the response is successful
                Assert.IsNotNull(actionResult.Model, "Model was null");
                var actualModel = actionResult.Model as SubscriberModel;
                Assert.IsNotNull(actualModel, "Model was null");
                Assert.IsNotNull(actualModel.ActionResponse, "ActionResponse was null");
                Assert.IsNotNull(actualModel.ActionResponse.Code, "actualModelActionResponse.Code was null");
                Assert.AreNotEqual("500", actualModel.ActionResponse.Code, "We received a 500 code as the actionresponse.");
                Assert.AreEqual("Index2", actionResult.ViewName, "actionResult.RouteValues[\"action\"]");

                // And the selected tab is the OSP/CPE tab
                Assert.AreEqual(3, actualModel.SelectedTabIndex, "The default tab was not the notes tab");

                // And no equipment is returned
                Assert.IsTrue((actualModel.SubEquipmentModel.ONTList.Count == 0 && actualModel.SubEquipmentModel.VideoDeviceList.Count == 0), "Devices were returned in the model");

                //And the Loaded Device Id is the same as the searched for device
                Assert.AreEqual(deviceId, actualModel.SubLocationModel.LoadedDeviceID, "The returned loaded device ID was different then the one passed in");
            }
        }
Esempio n. 27
0
        public void Remarks_HappyPath()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();

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

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

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

                // 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 remarks = new List<PlantRemarkDto>();
                remarks.Add(new PlantRemarkDto
                {
                    ServiceOrderNumber = "#1234",
                    RemarkText = "Remarks"
                });

                ShimEnterpriseClient.AllInstances.GetPlantRemarksGetPlantRemarksRequestDtoHeaderArgs =
                    delegate { return remarks; };

                var accountsController = DependencyResolver.Current.GetService<AccountsController>();
                var result = accountsController.Remarks("usi","tn");
                Assert.IsInstanceOfType(result, typeof(PartialViewResult));
                Assert.IsInstanceOfType(result.Model, typeof (IEnumerable<string>));
                var remarkList = new List<string>(((IEnumerable<string>) result.Model));
                Assert.IsTrue(remarkList[0].Contains("#1234") && remarkList[0].Contains("Remarks"));
            }
        }
        public void RefreshDevices_HappyPath()
        {
            //Setup
            var myContext = new SIMPLTestContext();

            using (ShimsContext.Create())
            {
                // Given a user
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                ShimCurrentSubscriber.AllInstances.LocationIdGet = (currentSubscriber) => "FakeLocationId";
                ShimCurrentSubscriber.AllInstances.MaxStbGet = (currentSubscriber) => "4";

                // 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;

                ShimCurrentSubscriber.SessionInstanceGet = () =>  new ShimCurrentSubscriber();

                // A single ONT
                EquipmentDto myEquipmentDto1 = new EquipmentDto();
                myEquipmentDto1.Status = "ACTIVE";
                myEquipmentDto1.Type = new EquipmentTypeDto();
                myEquipmentDto1.Type.ONTModel = new ONTModelDto();
                myEquipmentDto1.Type.ONTModel.Model = "Model";
                myEquipmentDto1.SerialNumber = "SerialNumber1";

                // A single Video Device
                EquipmentDto myEquipmentDto2 = new EquipmentDto();
                myEquipmentDto2.Status = "IGNORE";
                myEquipmentDto2.Type = new EquipmentTypeDto();
                myEquipmentDto2.Type.ONTModel = null;
                myEquipmentDto2.SerialNumber = "SerialNumber2";

                var equipments = new List<EquipmentDto>();
                equipments.Add(myEquipmentDto1);
                equipments.Add(myEquipmentDto2);

                // Fake the RosettianClient.SearchEquipment call
                ShimRosettianClient.AllInstances.SearchEquipmentSearchFieldsDtoUserDto =
                    (myRosettianClient, mySubscriberID, myUserObject) => equipments;

                // When loading that device
                var actionResult = SubscriberControllerForTests.RefreshDevices() as PartialViewResult;

                Assert.IsNotNull(actionResult, "ViewResult is null.");
                var equipmentModel = actionResult.Model as SubscriberEquipmentModel;
                Assert.IsNotNull(equipmentModel, "ViewModel is null.");
                Assert.IsNotNull(equipmentModel.ONTList, "ONTList is null");
                Assert.IsTrue(equipmentModel.ONTList.Count >= 0);
                Assert.IsNotNull(equipmentModel.VideoDeviceList, "VideoDeviceList is null");
                Assert.IsTrue(equipmentModel.VideoDeviceList.Count >= 0);
            }
        }
        public void RefreshSubscriber_ValidateErrorScenario()
        {
            using (ShimsContext.Create())
            {
                var myContext = new SIMPLTestContext();
                var currentSubscriber = new ShimCurrentSubscriber();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;

                // current sub
                currentSubscriber.FoundInBillingGet = () => true;
                var subModel = new SubscriberDetailsModel()
                {
                    Name = "JAMES SMITH",
                    USI = "USIDOESNOTEXIST",
                    CurrentServiceStatus = true
                };
                currentSubscriber.NameGet = () => subModel.Name;
                currentSubscriber.SubIdGet = () => subModel.USI;
                currentSubscriber.AccountTypeGet = () => subModel.AccountType;
                currentSubscriber.ServiceEnabledGet = () => subModel.CurrentServiceStatus;

                // fakes
                ShimCurrentSubscriber.GetInstance = () => currentSubscriber;
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = (myCurrentSubscriber) => new SubscriberDto();

                // fake ROZ PerformSubscriberOperation exception
                var errorMessage = string.Format("Subscriber Id {0} does not exist", subModel.USI);
                ShimRosettianClient.AllInstances.PerformSubscriberOperationStringSubscriberOperationDtoUserDto =
                    (myRosettianClient, mySubId, mySubscriberOperationDto, myUserDto) =>
                    {
                        throw new Exception(errorMessage);
                    };

                // expected json result
                var expectedJsonResult = new
                {
                    status = "error",
                    errorMessage = string.Format("Error refreshing subscriber: {0}", errorMessage)
                }.ToJSON();

                // call RefreshSubscriber action method
                var actualResult = SubscriberControllerForTests.RefreshSubscriber() as JsonResult;

                // validate result
                Assert.IsNotNull(actualResult, "JsonResult returned is null");
                Assert.IsNotNull(actualResult.Data, "JsonResult Data returned is null");
                Assert.AreEqual(expectedJsonResult, actualResult.Data.ToJSON());
            }
        }
        public void SwapResidentialGateway_NewRGDoesNotExist_ValidateFailedScenario()
        {
            using (ShimsContext.Create())
            {
                //Arrange
                var myContext = new SIMPLTestContext();
                var fakeUserDto = myContext.GetFakeUserDtoObject();
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;
                var session = new ShimHttpSessionState
                {
                    ItemGetString = s =>
                    {
                        if (s == "")
                            return null;
                        return null;
                    }
                };
                ShimHttpContext.AllInstances.SessionGet = o => session;

                // current location
                const string currentLocationId = "123456789";

                // Set location Id
                ShimCurrentSubscriber.AllInstances.LocationIdGet = o => currentLocationId;

                // expected all devices on current location
                var customFieldsDto = RgTestData_CustomFieldsCollection();
                var mainRg = RgTestData_MainRg(customFieldsDto, currentLocationId);

                // old RG serial number
                var oldRgSerialNumber = mainRg[0].SerialNumber;

                // new RG serial number
                const string newRgSerialNumber = "NONEXISTRGSERIALNUMBER";

                // expected ROZ error message
                var expectedRozErrorMessage =
                    string.Format("Swap is not allowed: New residential gateway [NONEXISTRGSERIALNUMBER] does not exist");

                // set ROZ SwapResidentialGateway exception
                ShimRosettianClient.AllInstances.SwapResidentialGatewayStringStringStringUserDto =
                    (myTestClient, myLocationId, myOldRgSerialNumber, myNewRgSerialNumber, myUserDto) =>
                    {
                        throw new Exception(expectedRozErrorMessage);
                    };

                // expected SwapResidentialGateway Json result
                var expectedResult = new
                {
                    status = "error",
                    errorMessage = string.Format
                    (
                        "Error swapping old Residential Gateway {0} with new Residential Gateway {1}: {2}",
                        oldRgSerialNumber, newRgSerialNumber, expectedRozErrorMessage
                    )
                };

                // get service for ResidentialGatewayController
                var residentialController = DependencyResolver.Current.GetService<ResidentialGatewayController>();

                // call SwapResidentialGateway action method
                var actualResult = residentialController.SwapResidentialGateway(currentLocationId, oldRgSerialNumber, newRgSerialNumber) as JsonResult;

                // validate result
                Assert.IsNotNull(actualResult, "SwapResidentialGateway Json result is null");
                Assert.IsTrue(actualResult != null && actualResult.Data != null);
                Assert.AreEqual(expectedResult.ToJSON(), actualResult.Data.ToJSON());
            }
        }