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); }
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); }
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); }
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; } }