예제 #1
0
        public void DbOvertimeUpdate()
        {
            const string UNITTEST_DB = "test.db";

            var storage = new WorktimeRecordStorageNoSQL();

            typeof(WorktimeRecordStorageNoSQL)
            .GetField("DATABASE_FILE", BindingFlags.Instance | BindingFlags.NonPublic)
            .SetValue(storage, UNITTEST_DB);     //actually this is not even necessary as unit tests run in another dir anyways

            var availableProject = ProjectTracker.Properties.Settings.Default.AvailableProjects;

            if (availableProject.Count < 3)
            {
                throw new Exception("Project must have at least 3 available projects for this test to run");
            }

            var overtimes = new Dictionary <string, TimeSpan>
            {
                { availableProject[0], new TimeSpan(1, 0, 0) },
                { availableProject[1], new TimeSpan(1, 0, 0) }
            };
            var overtimes2 = new Dictionary <string, TimeSpan>
            {
                { availableProject[1], new TimeSpan(1, 0, 0) },
                { availableProject[2], new TimeSpan(3, 0, 0) }
            };

            var expectedOvertimes = new Dictionary <string, TimeSpan>
            {
                { availableProject[0], new TimeSpan(1, 0, 0) },
                { availableProject[1], new TimeSpan(1, 0, 0) },
                { availableProject[2], new TimeSpan(3, 0, 0) }
            };

            Dictionary <string, TimeSpan> ret = null;

            try
            {
                storage.updateOvertimes(overtimes);
                storage.updateOvertimes(overtimes2);
                ret = storage.getOvertimes();
            }
            finally
            {
                using (var db = new LiteDatabase(UNITTEST_DB))
                {
                    db.DropCollection("overtimes");
                }
            }
            CollectionComparer.AssertDictionaryEqual(expectedOvertimes, ret);
        }
예제 #2
0
        public void WTQuantizerNo100Percent()
        {
            var wtupdater = new WorktrackerUpdater();
            var obj       = new PrivateObject(wtupdater);

            Dictionary <Project, float> wtprojects = new Dictionary <Project, float>
            {
                { pj1, 2f },
                { pj2, 96f },
                { pj3, 1f },
                { pj4, 1f },
            };
            Dictionary <Project, int> wtresults = new Dictionary <Project, int>
            {
                { pj1, 5 },
                { pj2, 95 },
                { pj3, 0 },
                { pj4, 0 },
            };

            var ret = (Dictionary <Project, int>)obj.Invoke("quantizeProjectsTo5", wtprojects);

            CollectionComparer.AssertDictionaryEqual(ret, wtresults);
        }
예제 #3
0
        public void WTQuantizerSimple2()
        {
            var wtupdater = new WorktrackerUpdater();
            var obj       = new PrivateObject(wtupdater);

            Dictionary <Project, float> wtprojects = new Dictionary <Project, float>
            {
                { pj1, 18f },
                { pj2, 12f },
                { pj3, 15f },
                { pj4, 55f },
            };
            Dictionary <Project, int> wtresults = new Dictionary <Project, int>
            {
                { pj1, 20 },
                { pj2, 10 },
                { pj3, 15 },
                { pj4, 55 },
            };

            var ret = (Dictionary <Project, int>)obj.Invoke("quantizeProjectsTo5", wtprojects);

            CollectionComparer.AssertDictionaryEqual(ret, wtresults);
        }
예제 #4
0
        public void WorkOvertime2Project()
        {
            var mainHandler            = new ProjectChangeHandler();
            var projectAnalysisHandler = new ProjectChangeNotifierAnalysis(mainHandler);
            var wtanalyzer             = new WorktimeAnalyzer(new WorktimeRecordStorageInMemory(), mainHandler);
            var obj = new PrivateObject(wtanalyzer);

            var origOvertime     = ProjectTracker.Properties.Settings.Default.maxWorktime;
            var availableProject = ProjectTracker.Properties.Settings.Default.AvailableProjects;

            if (availableProject.Count < 2)
            {
                throw new Exception("Project must have at least 2 available projects for this test to run");
            }

            try
            {
                ProjectTracker.Properties.Settings.Default.maxWorktime = "04:00";

                var originalWts = new WorktimeStatistics();
                originalWts.projectTimes = new System.Collections.Generic.Dictionary <string, TimeSpan>
                {
                    { availableProject[0], new TimeSpan(2, 0, 0) },
                    { availableProject[1], new TimeSpan(6, 0, 0) }
                };
                originalWts.totalTime        = new TimeSpan(8, 0, 0);
                originalWts.totalWorktime    = new TimeSpan(8, 0, 0);
                originalWts.totalProjectTime = new TimeSpan(8, 0, 0);

                var expectedStats = new WorktimeStatistics();
                expectedStats.projectTimes = new System.Collections.Generic.Dictionary <string, TimeSpan>
                {
                    { availableProject[0], new TimeSpan(0, 0, 0) },
                    { availableProject[1], new TimeSpan(4, 0, 0) }
                };
                expectedStats.relativeProjectTimes = new System.Collections.Generic.Dictionary <string, float>
                {
                    { availableProject[0], 0f },
                    { availableProject[1], 100f }
                };
                expectedStats.totalTime        = new TimeSpan(4, 0, 0);
                expectedStats.totalWorktime    = new TimeSpan(4, 0, 0);
                expectedStats.totalProjectTime = new TimeSpan(4, 0, 0);

                var originalOvertime = new Dictionary <string, TimeSpan> {
                    { availableProject[0], new TimeSpan(1, 0, 0) },
                    { availableProject[1], new TimeSpan(1, 0, 0) }
                };

                var expectedOvertime = new Dictionary <string, TimeSpan> {
                    { availableProject[0], new TimeSpan(3, 0, 0) },
                    { availableProject[1], new TimeSpan(3, 0, 0) }
                };

                object[] args        = new object[] { originalWts, originalOvertime };
                var      ret         = (Tuple <WorktimeStatistics, Dictionary <string, TimeSpan> >)obj.Invoke("calculateOvertimeUndertimeForTesting", args);
                var      retStats    = ret.Item1;
                var      retOvertime = ret.Item2;

                CollectionComparer.AssertDictionaryEqual(retStats.projectTimes, expectedStats.projectTimes);
                CollectionComparer.AssertDictionaryEqual(retStats.relativeProjectTimes, expectedStats.relativeProjectTimes);
                Assert.AreEqual(expectedStats.totalTime, retStats.totalTime);
                Assert.AreEqual(expectedStats.totalWorktime, retStats.totalWorktime);
                Assert.AreEqual(expectedStats.totalProjectTime, retStats.totalProjectTime);
                CollectionComparer.AssertDictionaryEqual(retOvertime, expectedOvertime);
            }
            finally
            {
                ProjectTracker.Properties.Settings.Default.maxWorktime = origOvertime;
            }
        }