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());
            }
        }
Esempio n. 2
0
        public void TestCleanup()
        {
            _simplTestContext = null;

            _controller.Dispose();
            _controller = null;

            ShimCurrentSubscriber.GetInstance = null;

            _shimsContext.Dispose();
            _shimsContext = null;
        }
        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 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 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 UpdateIpType_ReturnsCorrectData_WhenChangingFromStaticToDynamic()
        {
            using (ShimsContext.Create())
            {
                // ARRANGE
                const string expectedViewName = "~/Areas/SIMPLNET/Views/Subscriber/SubDetails_Partial.cshtml";
                const IPTypeDto newIpType = IPTypeDto.Dynamic;
                var servicesControllerForTest = ServicesControllerForTests;
                var testContext = new SIMPLTestContext();

                // fake local current subscriber object
                var fakeCurrentSubscriber = new FakeCurrentSubscriber();

                // fake SubscriberDto
                var fakeSubscriberData = TestContext.DataRow["MapToSubscriberDtoAsJSON"];
                Assert.IsNotNull(fakeSubscriberData);
                var fakeSubscriberDtoAsJson = fakeSubscriberData.ToString().Replace("\r\n", "");
                var fakeSubscriberDto = JsonConvert.DeserializeObject<SubscriberDto>(fakeSubscriberDtoAsJson, new JsonSerializerSettings
                {
                    MissingMemberHandling = MissingMemberHandling.Ignore
                });

                // set expected provisioned services list
                var expectedServicesList = fakeSubscriberDto.Accounts.First().Services.ToList();
                var staticService = expectedServicesList.FirstOrDefault(s => s.Name.Equals("STATIC", StringComparison.OrdinalIgnoreCase));
                Assert.IsNotNull(staticService);
                expectedServicesList.Remove(staticService);

                // fake CurrentSubscriber and Rosettian method calls
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber();
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = delegate { return fakeSubscriberDto; };
                ShimCurrentUser.AsUserDto = testContext.GetFakeUserDtoObject;
                ShimRosettianClient.AllInstances.UpdateSubscriberSubscriberDtoBooleanUserDto = delegate { return true; };
                ShimCurrentSubscriber.UpdateSubscriberDto = delegate(SubscriberDto subscriber)
                {
                    fakeCurrentSubscriber.SubIpType = subscriber.GetIPType();
                    fakeCurrentSubscriber.ProvisionedServicesList = subscriber.Accounts.First().Services;
                };
                ShimSubscriberExtension.MapToSubDetailsModelCurrentSubscriber = delegate
                {
                    return new SubscriberDetailsModel
                    {
                        IPType = fakeCurrentSubscriber.SubIpType
                    };
                };

                // ACT
                var actualResult = servicesControllerForTest.UpdateIpType(newIpType);

                // ASSERT
                Assert.IsNotNull(actualResult);
                var actualPartialView = actualResult as PartialViewResult;
                Assert.IsNotNull(actualPartialView);
                Assert.AreEqual(expectedViewName, actualPartialView.ViewName);
                var actualViewModel = actualPartialView.Model as SubscriberDetailsModel;
                Assert.IsNotNull(actualViewModel);
                Assert.AreEqual(newIpType, actualViewModel.IPType);
                Assert.IsTrue(expectedServicesList.SequenceEqual(fakeCurrentSubscriber.ProvisionedServicesList, new ServiceComparer()));
            }
        }
        public void Technicians_See_Only_Voice_Related_Data_In_Change_Subscriber_Services_Window()
        {
            using (ShimsContext.Create())
            {
                SIMPLTestContext testContext = new SIMPLTestContext();
                var session = GetShimmedSession();
                var context = new ShimHttpContext();
                ShimHttpContext.CurrentGet = () => context;
                ShimHttpContext.AllInstances.SessionGet = (o) => session;

                //set up the services
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber
                {
                    DataProductTypeGet = () => SubscriberEnums.DataProductType.XDsl,
                    VideoProductTypeGet = () => SubscriberEnums.VideoProductType.IpTv,
                    StateGet = () => "CT",
                    WtnGet = () => "2061272727",
                    ProvisionedServicesListGet = () => GetProvisionedServices()
                };

                ShimCurrentUser.AsUserDto = () => new UserDto()
                {
                    Email = "fake_Email",
                    Name = "fake_Name",
                    Role = "Tech"
                };

                //User is in Tech role
                ShimCurrentUser.GetInstance = () => new ShimCurrentUser
                {
                    UniqueIdGet = () => "Tech",
                };

                ShimCurrentUser.RetrieveUserRolesString = (x) => new List<int>
                {
                    Convert.ToInt32(SIMPLDbEnums.RoleTypeEnum.Tech)
                };

                ShimCurrentUser.AllInstances.RolesGet = (x) => new List<int>
                {
                    Convert.ToInt32(SIMPLDbEnums.RoleTypeEnum.Tech)
                };

                //Shimming the web.config read where it will specify which services are available for Tech's edit functionality
                var serviceToBeFilteredOut = "RNGDWN";
                var appCollection = new NameValueCollection();
                appCollection.Add("AvailableServicesForTechEdit", "ADSL,VDSL,VOICE");
                appCollection.Add("FilteredChildServicesForTechEdit", serviceToBeFilteredOut);
                ShimConfigurationManager.AppSettingsGet = () => appCollection;

                ShimServices.ProvisioningServicesGet = delegate
                {
                    return GetAvailableServices(); //This are the services which will be available for the subscriber
                };

                ShimSubscriberServicesModel.AllInstances._provisionedServicesGet = delegate
                {
                    return GetProvisionedServices(); //These are all the provisioned sercives for the subscriber
                };

                var expectedAvailableServices = GetAvailableServicesForTechRole();
                var expectedProvisionedServices = GetProvisionedServicesForTechRole();

                //Need to call this to instantiate the subscriber service model properly.
                var initialModel = ServicesControllerForTests.Index();
                Assert.IsNotNull(initialModel,"Controller returned null for index request");

                var result = ServicesControllerForTests.EditServices(initialModel.Model as SubscriberServicesModel);
                Assert.IsNotNull(result, "Controller returned null for 'EditServices_Partial' request");
                Assert.IsTrue(result is PartialViewResult);
                Assert.AreEqual((result as PartialViewResult).ViewName, "EditServices_Partial","Retured view is not 'EditServices_Partial'");

                var viewModel = (result as PartialViewResult).Model as SubscriberServicesModel;
                Assert.IsNotNull(viewModel);
                var availableSvcs = viewModel.AvailableServicesDictionary;
                var provisionedSvcs = viewModel.ProvisionedServicesDictionary;

                Assert.IsNotNull(availableSvcs,"Available services object is null");
                Assert.IsNotNull(provisionedSvcs, "Provisioned services object is null");

                //Just counting the retuned available and provisioned services will suffice
                int actualNumberOfProvisionedServices = 0;
                int actualNumberOfAvailableServices = 0;

                foreach (var className in availableSvcs.Keys)
                {
                    foreach (var child in availableSvcs[className])
                    {
                        actualNumberOfAvailableServices++;
                    }
                }

                foreach (var className in provisionedSvcs.Keys)
                {
                    foreach (var child in provisionedSvcs[className])
                    {
                        actualNumberOfProvisionedServices++;
                    }
                }

                Assert.AreEqual(expectedAvailableServices.Count,actualNumberOfAvailableServices,String.Format("Available services don't match. Expected: {0} and Returned: {1}",expectedAvailableServices.Count,actualNumberOfAvailableServices));
                Assert.AreEqual(expectedProvisionedServices.Count, actualNumberOfProvisionedServices, String.Format("Provisioned services don't match. Expected: {0} and Returned: {1}", expectedProvisionedServices.Count, actualNumberOfProvisionedServices));

                var actualAvailableServices = availableSvcs.SelectMany(x => x.Value).ToList();
                var actualProvisionedServices = provisionedSvcs.SelectMany(x => x.Value).ToList();

                Assert.AreEqual(0,actualAvailableServices.Where(x => x.Name == serviceToBeFilteredOut).ToList().Count(),"Available services contains value. It should be empty.");
                Assert.AreEqual(0,actualProvisionedServices.Where(x => x.Name == serviceToBeFilteredOut).ToList().Count(),"Provisioned services contains value. It should be empty. Count");
            }
        }
        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 While_trying_to_unlock_a_DSLAM_user_receives_error_message_when_a_FaultException_is_raised()
        {
            using (ShimsContext.Create())
            {
                // ARRANGE
                const DslamPortEnable newLockState = DslamPortEnable.PortStateUnknown;
                var servicesControllerForTest = ServicesControllerForTests;
                var testContext = new SIMPLTestContext();

                // fake local current subscriber object
                var fakeCurrentSubscriber = new FakeCurrentSubscriber();

                // fake SubscriberDto
                var fakeSubscriberData = TestContext.DataRow["MapToSubscriberDtoAsJSON"];
                Assert.IsNotNull(fakeSubscriberData);
                var fakeSubscriberDtoAsJson = fakeSubscriberData.ToString().Replace("\r\n", "");
                var fakeSubscriberDto = JsonConvert.DeserializeObject<SubscriberDto>(fakeSubscriberDtoAsJson, new JsonSerializerSettings
                {
                    MissingMemberHandling = MissingMemberHandling.Ignore
                });

                // Create copy of minimal DSL provisioned services list for use as expected services reference.
                var expectedServicesList = fakeSubscriberDto.Accounts.First().Services.ToList();
                // Add DSLOFF to expected as this is the only additional service expected.
                expectedServicesList.Add(new ServiceDto
                {
                    ClassName = "OVERRIDE",
                    Name = "DSLOFF",
                    Description = "SUSPEND DSL PORT"
                });

                // fake CurrentSubscriber and Rosettian method calls
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber();
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = delegate { return fakeSubscriberDto; };
                ShimCurrentUser.AsUserDto = testContext.GetFakeUserDtoObject;

                const string expectedErrorMessage = "This is a fault exception message";
                var faultDetail = new ValidationDetailDto()
                {
                    Message = expectedErrorMessage
                };

                var faultDetails = new List<ValidationDetailDto>();
                faultDetails.Add(faultDetail);

                var validationFault = new ValidationFaultDto()
                {
                    Details = faultDetails
                };

                var fault = new FaultException<ValidationFaultDto>(validationFault);
                ShimRosettianClient.AllInstances.UpdateSubscriberSubscriberDtoBooleanUserDto = delegate { throw fault; };
                ShimCurrentSubscriber.UpdateSubscriberDto = delegate(SubscriberDto subscriber)
                {
                    fakeCurrentSubscriber.SubIpType = subscriber.GetIPType();
                    fakeCurrentSubscriber.ProvisionedServicesList = subscriber.Accounts.First().Services;
                };
                ShimSubscriberExtension.MapToSubDetailsModelCurrentSubscriber = delegate
                {
                    return new SubscriberDetailsModel
                    {
                        IPType = fakeCurrentSubscriber.SubIpType
                    };
                };

                var wasLoggingCalled = false;
                ShimErrorLoggingService.AllInstances.LogErrorException = (myClient, myException) =>
                {
                    wasLoggingCalled = true;
                };

                // ACT
                var actualResult = servicesControllerForTest.UpdateDslamPortGate(newLockState);

                // ASSERT
                Assert.IsNotNull(actualResult);
                var actualJsonResult = actualResult as JsonResult;
                Assert.IsNotNull(actualJsonResult);
                Assert.IsTrue(wasLoggingCalled, "An Exception was expected and the logger was expected to have been called");
                // verify the returned Json
                dynamic actualJson = actualJsonResult.Data;
                var actualStatus = actualJson.status as string;
                var actualErrorMessage = actualJson.errorMessage as string;
                Assert.AreEqual("error", actualStatus, "UpdateDslamPortGate() returned Json has unexpected failing result status");
                Assert.AreEqual(expectedErrorMessage, actualErrorMessage, "UpdateDslamPortGate() returned errorMessage that doesn't have the expected value");
            }
        }
        public void 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 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 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 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 MyTestInitialize()
        {
            // Setup context
            var mySimplTestContext = new SIMPLTestContext();
            HttpContext.Current = mySimplTestContext.GetHttpSession();

            var userName = mySimplTestContext.GetNameFromWindowsIdentity();
            CurrentUser.SetInstance(userName);
            RosettianUser = CurrentUser.AsUserDto();

            // Instantiate FacilitiesController used for tests implemented in this class

            BusinessFacadeforTests = DependencyResolver.Current.GetService<IBusinessFacade>();
            FacilitiesController4Test = DependencyResolver.Current.GetService<FacilitiesController>();
            FacilitiesController4Test.ControllerContext = new ControllerContext
            (
                new HttpContextWrapper(HttpContext.Current),
                new RouteData(),
                FacilitiesController4Test
            );
        }
        public void Index_When_Subscriber_Has_CopperFacility_And_Should_Be_Redirected_To_CopperFacility_Page_One_XBox_Multiple_DropTerm_Not_In_The_Correct_Order()
        {
            using (ShimsContext.Create())
            {
                const string subscriberID = "999000795553";
                const string locationID = "";
                const string deviceID = "";

                var session = GetShimmedSession();

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

                var mySIMPLTestContext = new SIMPLTestContext();

                var expectedTDMSwitch = mySIMPLTestContext.GetFakeTDMSwitch();

                var expectedGWR = mySIMPLTestContext.GetFakeGWRDto();

                var expectedDSLAM = mySIMPLTestContext.GetFakeDSLAM();

                const int numberOfXConnectItems = 1;
                var previousXConnectTerminalNames = new string[]
                {
                    "TerminalAssignmentDtoXbox0{0}_PreviousTerminalNameValue"
                };
                var currentXConnectTerminalNames = new string[]
                {
                    "TerminalAssignmentDtoXbox0{0}_TerminalNameValue"
                };
                var expectedXConnectList = mySIMPLTestContext.GetFakeListXConnect(numberOfXConnectItems, previousXConnectTerminalNames, currentXConnectTerminalNames);

                const int numberOfDropTermItems = 3;
                var previousDropTermTerminalNames = new string[]
                {
                    "TerminalAssignmentDtoXbox01_TerminalNameValue",
                    "TerminalAssignmentDtoDropTerm01_TerminalNameValue",
                    "TerminalAssignmentDtoDropTerm02_TerminalNameValue"
                };
                var currentDropTermTerminalNames = new string[]
                {
                    "TerminalAssignmentDtoDropTerm01_TerminalNameValue",
                    "TerminalAssignmentDtoDropTerm02_TerminalNameValue",
                    "TerminalAssignmentDtoDropTerm03_TerminalNameValue",
                };
                var expectedDropTermList = mySIMPLTestContext.GetFakeListDropTerm(numberOfDropTermItems, previousDropTermTerminalNames, currentDropTermTerminalNames);

                var expectedDropTermSequenceList = new List<List<DropTerm>>
                {
                    expectedDropTermList
                };

                var expectedFacilityAddress = mySIMPLTestContext.GetFakeFacilityAddress();

                var localServicePathList = mySIMPLTestContext.GetFakeListServicePath();

                var expectedServiceLocation = mySIMPLTestContext.GetFakeServiceLocation(expectedFacilityAddress, localServicePathList, subscriberID);

                var expectedMappedData = new CopperFacilityViewModel
                {
                    Environment = "Parent_Environment",
                    TDMSwitch = expectedTDMSwitch,
                    GWR = expectedGWR,
                    DSLAM = expectedDSLAM,
                    XConnectList = expectedXConnectList,
                    DropTermSequenceList = expectedDropTermSequenceList,
                    ServiceLocation = expectedServiceLocation
                };

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

                // Fake the CurrentSubscriber.SubId call
                ShimCurrentSubscriber.AllInstances.SubIdGet = (myProperty) => subscriberID;

                // Fake the CurrentSubscriber.SubId call
                ShimCurrentSubscriber.AllInstances.LocationIdGet = (myProperty) => locationID;
                ShimCurrentSubscriber.AllInstances.DpiRegionGet = delegate { return "CT"; };

                var numberOfXBoxItems = numberOfXConnectItems;
                var previousXBoxTerminalNames = previousXConnectTerminalNames;
                var currentXBoxTerminalNames = currentXConnectTerminalNames;
                var fakeListTerminalAssignmentDtoForXBox = mySIMPLTestContext.GetFakeListTerminalAssignmentDtoForXBox(numberOfXBoxItems, previousXBoxTerminalNames, currentXBoxTerminalNames);

                var fakeListTerminalAssignmentDto = fakeListTerminalAssignmentDtoForXBox.ToList();

                var fakeListTerminalAssignmentDtoForDropTerm = mySIMPLTestContext.GetFakeListTerminalAssignmentDtoForDropTerm(numberOfDropTermItems, previousDropTermTerminalNames, currentDropTermTerminalNames);

                // swamp all of the items in the fakeListTerminalAssignmentDtoForDropTerm
                var tempDropTermTerminalAssignmentDto = fakeListTerminalAssignmentDtoForDropTerm[0];
                fakeListTerminalAssignmentDtoForDropTerm[0] = fakeListTerminalAssignmentDtoForDropTerm[1];
                fakeListTerminalAssignmentDtoForDropTerm[1] = fakeListTerminalAssignmentDtoForDropTerm[2];
                fakeListTerminalAssignmentDtoForDropTerm[2] = tempDropTermTerminalAssignmentDto;

                fakeListTerminalAssignmentDto.AddRange(fakeListTerminalAssignmentDtoForDropTerm);

                var fakePairAssignmentDto = mySIMPLTestContext.GetFakePairAssignmentDto(fakeListTerminalAssignmentDto);

                var fakeListPairAssignmentDto = new List<PairAssignmentDto>
                {
                    fakePairAssignmentDto
                };

                var fakeCopperPlantDataDto = mySIMPLTestContext.GetFakeCopperPlantDataDto(fakeListPairAssignmentDto);

                var fakePlantDataDto = new PlantDataDto
                {
                    CopperPlantData = fakeCopperPlantDataDto
                };

                var fakeServiceAddressDto = mySIMPLTestContext.GetFakeServiceAddressDto();

                var fakeGetFacilitiesResponseDto = mySIMPLTestContext.GetFakeGetFacilitiesResponseDto(subscriberID, fakeServiceAddressDto, fakePlantDataDto);

                ShimEnterpriseClient.AllInstances.GetFacilitiesDataGetFacilitiesRequestDtoHeaderArgs =
                    delegate { return fakeGetFacilitiesResponseDto; };

                ShimCurrentSubscriber.AllInstances.FacilitiesDataGet = (myProperty) => fakeGetFacilitiesResponseDto;

                // Fake the FacilityViewModel.ShouldShowFiber call
                ShimFacilityViewModel.AllInstances.GetFacilityTypeStringString = delegate { return FacilityType.Copper; };

                // A single ONT
                EquipmentDto myEquipmentDto1 = new EquipmentDto();
                myEquipmentDto1.Type = new EquipmentTypeDto();
                myEquipmentDto1.Type.ONTModel = new ONTModelDto();
                myEquipmentDto1.SerialNumber = "123456";

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

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

                var fakeUserDto = new UserDto()
                {
                    Email = "FakeEmail",
                    Name = "FakeName",
                    Role = "FakeRole"
                };

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

                //Fake call to CurrentUser.AsUserDto()
                ShimCurrentUser.AsUserDto = () => fakeUserDto;
                // 1st Act
                var result = EquipmentControllerForTests.Index(subscriberID, locationID, deviceID);

                // 1st set of Asserts
                Assert.IsNotNull(result, "EquipmentController Index returned null");
                Assert.IsTrue(result is PartialViewResult, "Not a PartialViewResult");

                // 2nd Act
                var resultPartialViewResult = (PartialViewResult)result;

                // 2nd set of Asserts
                Assert.IsNotNull(resultPartialViewResult, "Cast to PartialViewResult is null");
                Assert.IsNotNull(resultPartialViewResult.Model, "Model is null");
                Assert.IsTrue(resultPartialViewResult.Model is CopperFacilityViewModel, "Model not CopperFacilityViewModel");

                // 3rd Act
                var resultPartialViewResultModel = (CopperFacilityViewModel)resultPartialViewResult.Model;

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

                // 4th Act
                var jss = new JavaScriptSerializer();

                // 4th set of Asserts
                Assert.AreEqual(jss.Serialize(expectedMappedData.DropTermSequenceList), jss.Serialize(resultPartialViewResultModel.DropTermSequenceList), "DropTermSequenceList didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.DSLAM), jss.Serialize(resultPartialViewResultModel.DSLAM), "DSLAM didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.Environment), jss.Serialize(resultPartialViewResultModel.Environment), "Enviroment didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.GWR), jss.Serialize(resultPartialViewResultModel.GWR), "GWR didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.PathCount), jss.Serialize(resultPartialViewResultModel.PathCount), "PathCount didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.ServiceLocation), jss.Serialize(resultPartialViewResultModel.ServiceLocation), "ServiceLocation didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.TDMSwitch), jss.Serialize(resultPartialViewResultModel.TDMSwitch), "TDMSwitch didn't match");
                Assert.AreEqual(jss.Serialize(expectedMappedData.XConnectList), jss.Serialize(resultPartialViewResultModel.XConnectList), "XConnectList didn't match");
            }
        }
        public void MyTestInitialize()
        {
            // Setup context
            var mySimplTestContext = new SIMPLTestContext();
            HttpContext.Current = mySimplTestContext.GetHttpSession();

            var userName = mySimplTestContext.GetNameFromWindowsIdentity();
            CurrentUser.SetInstance(userName);
            RosettianUser = CurrentUser.AsUserDto();

            // Setup ResidentialGatewayController
            BusinessFacadeforTests = DependencyResolver.Current.GetService<IBusinessFacade>();
            EquipmentControllor4Test = DependencyResolver.Current.GetService<EquipmentController>();
            EquipmentControllor4Test.ControllerContext = new ControllerContext(new HttpContextWrapper(HttpContext.Current),
                new RouteData(), EquipmentControllor4Test);
        }
        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 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");
            }
        }
        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 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 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\"]");
            }
        }
Esempio n. 22
0
        public void MyTestInitialize()
        {
            // Helper code to get the HttpContext
            var mySIMPLTestContext = new SIMPLTestContext();
            HttpContext.Current = mySIMPLTestContext.GetHttpSession();

            // Helper Code to get the user logged into Windows
            var userName = mySIMPLTestContext.GetNameFromWindowsIdentity();

            // Calling actual production code to set the instance for this username
            CurrentUser.SetInstance(userName);

            // Calling actual production code to get the Rosettian User Object
            RosettianUser = CurrentUser.AsUserDto();

            BusinessFacadeforTests = DependencyResolver.Current.GetService<IBusinessFacade>();
            SubscriberHelperforTests = DependencyResolver.Current.GetService<SubscriberHelper>();

            // Set up the LocationController
            LocationController4Tests = DependencyResolver.Current.GetService<LocationController>();

            LocationController4Tests.ControllerContext = new ControllerContext(new HttpContextWrapper(HttpContext.Current), new RouteData(), LocationController4Tests);
        }
        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);
            }
        }
Esempio n. 24
0
        public void User_receives_success_message_when_trying_to_lock_DSLAM_when_the_port_state_is_Unknown()
        {
            using (ShimsContext.Create())
            {
                // ARRANGE
                const DslamPortEnable newLockState = DslamPortEnable.PortStateUnknown;
                var servicesControllerForTest = ServicesControllerForTests;
                var testContext = new SIMPLTestContext();

                // fake local current subscriber object
                var fakeCurrentSubscriber = new FakeCurrentSubscriber();

                // fake SubscriberDto
                var fakeSubscriberData = TestContext.DataRow["MapToSubscriberDtoAsJSON"];
                Assert.IsNotNull(fakeSubscriberData);
                var fakeSubscriberDtoAsJson = fakeSubscriberData.ToString().Replace("\r\n", "");
                var fakeSubscriberDto = JsonConvert.DeserializeObject<SubscriberDto>(fakeSubscriberDtoAsJson, new JsonSerializerSettings
                {
                    MissingMemberHandling = MissingMemberHandling.Ignore
                });

                // Create copy of minimal DSL provisioned services list for use as expected services reference.
                var expectedServicesList = fakeSubscriberDto.Accounts.First().Services.ToList();
                // Add DSLOFF to expected as this is the only additional service expected.
                expectedServicesList.Add(new ServiceDto
                {
                    ClassName = "OVERRIDE",
                    Name = "DSLOFF",
                    Description = "SUSPEND DSL PORT"
                });

                // fake CurrentSubscriber and Rosettian method calls
                ShimCurrentSubscriber.GetInstance = () => new ShimCurrentSubscriber();
                ShimSubscriberExtension.MapToSubscriberCurrentSubscriber = delegate { return fakeSubscriberDto; };
                ShimCurrentUser.AsUserDto = testContext.GetFakeUserDtoObject;
                ShimRosettianClient.AllInstances.UpdateSubscriberSubscriberDtoBooleanUserDto = delegate { return true; };
                ShimCurrentSubscriber.UpdateSubscriberDto = delegate(SubscriberDto subscriber)
                {
                    fakeCurrentSubscriber.SubIpType = subscriber.GetIPType();
                    fakeCurrentSubscriber.ProvisionedServicesList = subscriber.Accounts.First().Services;
                };
                ShimSubscriberExtension.MapToSubDetailsModelCurrentSubscriber = delegate
                {
                    return new SubscriberDetailsModel
                    {
                        IPType = fakeCurrentSubscriber.SubIpType
                    };
                };

                // ACT
                var actualResult = servicesControllerForTest.UpdateDslamPortGate(newLockState);

                // ASSERT
                Assert.IsNotNull(actualResult);
                var actualJsonResult = actualResult as JsonResult;
                Assert.IsNotNull(actualJsonResult);
                // verify the returned Json
                dynamic actualJson = actualJsonResult.Data;
                var status = actualJson.status as string;
                Assert.AreEqual("success", status, "UpdateDslamPortGate() returned Json has unexpected failing result status");
                Assert.IsTrue(expectedServicesList.SequenceEqual(fakeCurrentSubscriber.ProvisionedServicesList, new ServiceComparer()));
            }
        }
Esempio n. 25
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 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 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 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 MyTestInitialize()
        {
            // Setup context
            var mySimplTestContext = new SIMPLTestContext();
            HttpContext.Current = mySimplTestContext.GetHttpSession();

            // verified that uitestuser has a valid email address in ASPP
            CurrentUser.SetInstance("uitestuser");

            RosettianUser = CurrentUser.AsUserDto();

            _mailersInformationEntitiesTestRepositoryForTests = new MailersInformationEntitiesTestRepository();

            EquipmentOrderControllerForTests = DependencyResolver.Current.GetService<EquipmentOrderController>();
            EquipmentOrderControllerForTests.ControllerContext = new ControllerContext(new HttpContextWrapper(HttpContext.Current), new RouteData(), EquipmentOrderControllerForTests);

            var key = "FiosEquipmentCatalogId";
            FiOSCatalogId = ConfigurationManager.AppSettings[key];
            if (FiOSCatalogId == null)
            {
                throw new Exception(string.Format("AppSettings key \"{0}\" is missing", key));
            }

            key = "UverseEquipmentCatalogId";
            UVerseCatalogId = ConfigurationManager.AppSettings[key];
            if (UVerseCatalogId == null)
            {
                throw new Exception(string.Format("AppSettings key \"{0}\" is missing", key));
            }

            key = "TivoEquipmentCatalogId";
            TiVoEquipmentCatalogId = ConfigurationManager.AppSettings[key];
            if (TiVoEquipmentCatalogId == null)
            {
                throw new Exception(string.Format("AppSettings key \"{0}\" is missing", key));
            }

            key = "TivoReturnMailerCatalogId";
            TiVoReturnMailerCatalogId = ConfigurationManager.AppSettings[key];
            if (TiVoReturnMailerCatalogId == null)
            {
                throw new Exception(string.Format("AppSettings key \"{0}\" is missing", key));
            }

            key = "TivoRemoteCatalogId";
            TiVoRemoteCatalogId = ConfigurationManager.AppSettings[key];
            if (TiVoReturnMailerCatalogId == null)
            {
                throw new Exception(string.Format("AppSettings key \"{0}\" is missing", key));
            }
        }
        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");
            }
        }