public void OnUserGrouping()
        {
            // Create mockup for user summaries with differing user id.
            var mockupSummaries = new List <InstallLogUserSummary>();

            // Laptop is chosen here as default rule allows 1 license to install 2 laptops.
            var  computerType    = ComputerType.Laptop;
            uint numberOfLaptops = 1;
            uint reptition       = 100;

            for (uint i = 1; i <= reptition; i++)
            {
                // Create mockup summary with static computer type, static count, and userID = i.
                var mockup = new Dictionary <ComputerType, uint>();
                mockup.Add(computerType, numberOfLaptops);
                var mockupSummary = new InstallLogUserSummary(mockup, i);

                mockupSummaries.Add(mockupSummary);
            }

            var classUnderTest = LicenseCalculatorFactory.CreateFromUserSummaries(mockupSummaries);

            // Ensure result is equal to expected output.
            // Expected output is equal to repetition, as each user can't share license with other users.
            uint output         = classUnderTest.GetMinLicenseRequired();
            uint expectedOutput = reptition;

            Assert.AreEqual(output, expectedOutput);
        }
        public static LicenseCalculator CreateFromSingleSummary(InstallLogUserSummary userSummary, LicenseRule rule = null)
        {
            // If no rule is passed, use default rule.
            if (rule == null)
            {
                rule = LicenseRuleFactory.CreateDefault();
            }

            var summaries = new List <InstallLogUserSummary>();

            summaries.Add(userSummary);

            return(new LicenseCalculator(summaries, rule));
        }
Exemplo n.º 3
0
        /// <summary>
        ///     Create a new instance of LicenseCalculator with sequence of InstallLog.
        /// </summary>
        /// <param name="logs">
        ///     Sequence/list of Installation Logs.
        /// </param>
        /// <param name="rule">
        ///     Licensing rule to apply for calculation.
        /// </param>
        public LicenseCalculator(IEnumerable <InstallLog> logs, LicenseRule rule)
        {
            Rule = rule;

            var logsByUser = logs.GroupBy(x => x.UserID);

            InstallSummaries = new List <InstallLogUserSummary>();
            foreach (var userLogs in logsByUser)
            {
                uint userID      = (uint)userLogs.Key;
                var  userSummary = new InstallLogUserSummary(userLogs, userID);
                InstallSummaries.Add(userSummary);
            }

            Validate();
        }
        public void OnLinearCase()
        {
            uint userID       = 1;
            uint repetition   = 100;
            var  computerType = ComputerType.Desktop;

            for (uint i = 0; i <= repetition; i++)
            {
                // Create mockup summary with static computer type, static userID, and count = i.
                var mockup = new Dictionary <ComputerType, uint>();
                mockup.Add(computerType, i);
                var mockupSummary = new InstallLogUserSummary(mockup, userID);

                var classUnderTest = LicenseCalculatorFactory.CreateFromSingleSummary(mockupSummary);

                // Ensure result is equal to expected output.
                uint output         = classUnderTest.GetMinLicenseRequired();
                uint expectedOutput = i;
                Assert.AreEqual(output, expectedOutput);
            }
        }