public void generate_should_not_return_duplicate_values()
        {
            var mockRepository = new MockRepository(MockBehavior.Default);

            var randomNumberGeneratorMock = mockRepository.Create <IRandomNumberGenerator>();
            var pinCodeValidatorMock      = mockRepository.Create <IPinCodeValidator>();

            // because this is an integration test, we actually use an implementation of the pincodecollection
            Func <IPinCodeCollection> pinCodeCollectionFactory = () => new PinCodeCollection();

            Func <int, int, IRandomNumberGenerator> randomNumberGeneratorFactory = (min, max) => randomNumberGeneratorMock.Object;

            pinCodeValidatorMock.Setup(v => v.IsPinCodeValid(It.IsAny <PinCode>())).Returns(true);

            // make sure we always return "5", so a pincode will be "5555"
            randomNumberGeneratorMock.Setup(r => r.Next()).Returns(5);

            var pinCodeGenerator = new PinCodeGenerator(randomNumberGeneratorFactory, pinCodeValidatorMock.Object, pinCodeCollectionFactory);

            // lets generate 2 pincodes, which are guaranteed to be duplicates
            // TODO: This will loop forever, we need to break out of it, find a better way
            bool completed    = false;
            var  generateTask = new Task(() =>
            {
                var pinCodeCollection = pinCodeGenerator.Generate(2);
                completed             = true;
            });

            generateTask.Start();

            generateTask.Wait(TimeSpan.FromSeconds(5));
            completed.Should().BeFalse();
        }
 public ActionResult Groups(IEnumerable <string> year, IEnumerable <string> grade, IEnumerable <string> counselor, IEnumerable <string> groupname)
 {
     if (AuthTokens[0] == "demo")
     {
         ViewBag.DemoNextStep = NextStep("!");
         return(View());
     }
     if (year != null && grade != null && counselor != null && groupname != null)
     {
         if (year.Count() == grade.Count() && year.Count() == counselor.Count() && year.Count() == groupname.Count())
         {
             AdminAccountClient aac    = new AdminAccountClient();
             AccessCodeClient   acc    = new AccessCodeClient();
             AdminAccount       admin  = aac.GetByPartitionAndRowKey("admin", AuthTokens[1].ToLower());
             string             school = admin.School;
             for (var i = 0; i < year.Count(); i++)
             {
                 acc.AddNewItem(new AccessCode {
                     RowKey = ShortGuidGenerator.NewGuid(), Code = PinCodeGenerator.NewPin(), Year = year.ElementAt(i), Grade = grade.ElementAt(i), Counselor = counselor.ElementAt(i), GroupName = groupname.ElementAt(i), School = school
                 });
             }
             ViewBag.CurrentYear = AccessCodeClient.CurrentGradYear();
             return(View());
         }
     }
     ViewBag.ErrorMessage = "error";
     ViewBag.CurrentYear  = AccessCodeClient.CurrentGradYear();
     return(View());
 }
 public ActionResult Index(IEnumerable <string> year, IEnumerable <string> grade, IEnumerable <string> groupname)
 {
     if (AuthTokens[0] == "demo")
     {
         return(View());
     }
     if (year != null && grade != null && groupname != null)
     {
         if (year.Count() == grade.Count() && year.Count() == groupname.Count())
         {
             string counselor               = AuthTokens[1].ToLower();
             CounselorAccountClient cac     = new CounselorAccountClient();
             AccessCodeClient       acc     = new AccessCodeClient();
             CounselorAccount       account = cac.GetByPartitionAndRowKey("counselor", counselor);
             string school = account.School;
             for (var i = 0; i < year.Count(); i++)
             {
                 acc.AddNewItem(new AccessCode {
                     RowKey = ShortGuidGenerator.NewGuid(), Code = PinCodeGenerator.NewPin(), Year = year.ElementAt(i), Grade = grade.ElementAt(i), Counselor = counselor, GroupName = groupname.ElementAt(i), School = school
                 });
             }
             return(RedirectToAction("Index"));
         }
     }
     TempData["error"] = true;
     return(RedirectToAction("Index"));
 }
        public async Task <string> GeneratePinCode(IUserAccount user, string cellular, string email)
        {
            IAccessToken accessToken = await GenerateToken(user);

            PasswordBuilder  pb  = new PasswordBuilder();
            PinCodeGenerator gen = new PinCodeGenerator();

            string pinCode = gen.GenerateNextPinCode();

            await m_session_repository.ResetPinCode(accessToken.Guid, pb.MakeGuid(cellular, email, pinCode), pb.MakePasswordHash(cellular, email, pinCode));

            return(pinCode);
        }
        // private functions ===============================================================================================================================================
        private string getUniquePinCode(string school)
        {
            string pincode = PinCodeGenerator.NewPin();

            AccessCodeClient acc  = new AccessCodeClient();
            AccessCode       code = acc.GetBySchoolAndPinCode(school, pincode);

            //AssessmentGroupClient agc = new AssessmentGroupClient();
            //AssessmentGroup groupEntry = agc.GetByPartitionAndRowKey(school, pincode);
            while (code != null)
            {
                pincode = PinCodeGenerator.NewPin();
                code    = acc.GetBySchoolAndPinCode(school, pincode);
            }
            return(pincode);
        }
        public void generate_should_generate_pin_codes()
        {
            var mockRepository = new MockRepository(MockBehavior.Default);

            var randomNumberGeneratorMock = mockRepository.Create <IRandomNumberGenerator>();
            var pinCodeValidatorMock      = mockRepository.Create <IPinCodeValidator>();
            var pinCodeCollectionMock     = mockRepository.Create <IPinCodeCollection>();

            Func <int, int, IRandomNumberGenerator> randomNumberGeneratorFactory = (min, max) => randomNumberGeneratorMock.Object;

            pinCodeCollectionMock.Setup(p => p.Add(It.IsAny <PinCode>())).Returns(true);
            pinCodeValidatorMock.Setup(v => v.IsPinCodeValid(It.IsAny <PinCode>())).Returns(true);

            var pinCodeGenerator = new PinCodeGenerator(randomNumberGeneratorFactory, pinCodeValidatorMock.Object, () => pinCodeCollectionMock.Object);

            var pinCodeCollection = pinCodeGenerator.Generate(10);

            pinCodeCollectionMock.Verify(p => p.Add(It.IsAny <PinCode>()), Times.Exactly(10));
        }