Skip to content
This repository was archived by the owner on Oct 3, 2022. It is now read-only.

Commit 84e8c25

Browse files
author
SimplementsBinder
committed
Tests und Anpassungen
1 parent 767ba05 commit 84e8c25

File tree

6 files changed

+173
-14
lines changed

6 files changed

+173
-14
lines changed
0 Bytes
Binary file not shown.

.vs/TakeMyTime.NETCore/v16/.suo

512 Bytes
Binary file not shown.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
11+
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
12+
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
13+
<PackageReference Include="coverlet.collector" Version="1.0.1" />
14+
</ItemGroup>
15+
16+
<ItemGroup>
17+
<ProjectReference Include="..\TakeMyTime.DAL\TakeMyTime.DAL.csproj" />
18+
<ProjectReference Include="..\TakeMyTime.Models\TakeMyTime.Models.csproj" />
19+
</ItemGroup>
20+
21+
</Project>
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using System;
3+
using System.Linq;
4+
using TakeMyTime.Models.Models;
5+
6+
namespace TakeMyTime.DAL.Tests
7+
{
8+
[TestClass]
9+
public class WeekdayProductivityManagerTests
10+
{
11+
private WeekdayProductivityManager manager;
12+
13+
[TestInitialize]
14+
public void Initialize()
15+
{
16+
this.manager = new WeekdayProductivityManager();
17+
}
18+
19+
private Entry[] GenerateEntries()
20+
{
21+
return new Entry[]
22+
{
23+
new Entry
24+
{
25+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
26+
Started = new DateTime(2020, 3, 16)
27+
},
28+
new Entry
29+
{
30+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
31+
Started = new DateTime(2020, 3, 17)
32+
},
33+
new Entry
34+
{
35+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
36+
Started = new DateTime(2020, 3, 10)
37+
},
38+
new Entry
39+
{
40+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
41+
Started = new DateTime(2020, 3, 18)
42+
},
43+
new Entry
44+
{
45+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
46+
Started = new DateTime(2020, 3, 19)
47+
},
48+
new Entry
49+
{
50+
DurationAsTicks = TimeSpan.FromHours(1).Ticks,
51+
Started = new DateTime(2020, 3, 20)
52+
}
53+
};
54+
}
55+
56+
[TestMethod]
57+
public void TestDayWithoutEntries()
58+
{
59+
// ARRANGE
60+
var entries = this.GenerateEntries();
61+
62+
// ACT
63+
foreach (var entry in entries)
64+
{
65+
this.manager.ProcessEntry(entry);
66+
}
67+
var result = this.manager.GetResults();
68+
69+
// ASSERT
70+
double expectedTotalResultMonday = 0;
71+
double expectedAverageHoursMonday = 0;
72+
double expectedShareMonday = 0;
73+
74+
Assert.AreNotEqual(expectedTotalResultMonday, result.Single(r => r.Day == DayOfWeek.Monday).TotalHours);
75+
Assert.AreNotEqual(expectedAverageHoursMonday, result.Single(r => r.Day == DayOfWeek.Monday).AverageHours);
76+
Assert.AreNotEqual(expectedShareMonday, result.Single(r => r.Day == DayOfWeek.Monday).Value);
77+
}
78+
79+
[TestMethod]
80+
public void TestDayWithEntries()
81+
{
82+
// ARRANGE
83+
var entries = this.GenerateEntries();
84+
85+
// ACT
86+
foreach (var entry in entries)
87+
{
88+
this.manager.ProcessEntry(entry);
89+
}
90+
var result = this.manager.GetResults();
91+
92+
// ASSERT
93+
double expectedTotalResultTuesday = 2;
94+
double expectedAverageHoursTuesday = 1;
95+
double expectedShareTuesday = 33; // 100 / 6 = 16,7 => 16,7 x 2 ~ 33
96+
double expectedShareWednesday = 17;
97+
98+
Assert.AreEqual(expectedTotalResultTuesday, result.Single(r => r.Day == DayOfWeek.Tuesday).TotalHours);
99+
Assert.AreEqual(expectedAverageHoursTuesday, result.Single(r => r.Day == DayOfWeek.Tuesday).AverageHours);
100+
double roundedResultOfTuesdayShares = result.Where(r => r.Day == DayOfWeek.Tuesday).Sum(d => Math.Round(d.Value * 100));
101+
Assert.AreEqual(expectedShareTuesday, roundedResultOfTuesdayShares);
102+
double roundedResultOfWednesdayShares = Math.Round(result.Single(r => r.Day == DayOfWeek.Wednesday).Value * 100, 1);
103+
Assert.AreEqual(expectedShareWednesday, roundedResultOfWednesdayShares);
104+
}
105+
}
106+
}

TakeMyTime.DAL/WeekdayProductivityManager.cs

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,62 @@ public void ProcessEntry(Entry entry)
2323
{
2424
case DayOfWeek.Monday:
2525
MondayTotalWorkingHours += durationAsHours;
26-
this.MondayAverageWorkingHours = Math.Round(durationAsHours / MondayTotalWorkingHours, 2);
27-
this.MondayValueShare = Math.Round(MondayAverageWorkingHours / TotalWorkingHours, 2);
26+
MondayEntryCount++;
27+
this.MondayAverageWorkingHours = Math.Round(MondayTotalWorkingHours / MondayEntryCount, 2);
28+
2829
break;
2930
case DayOfWeek.Tuesday:
3031
TuesdayTotalWorkingHours += durationAsHours;
31-
this.TuesdayAverageWorkingHours = Math.Round(durationAsHours / TuesdayTotalWorkingHours, 2);
32-
this.TuesdayValueShare = Math.Round(TuesdayAverageWorkingHours / TotalWorkingHours, 2);
32+
TuesdayEntryCount++;
33+
this.TuesdayAverageWorkingHours = Math.Round(TuesdayTotalWorkingHours / TuesdayEntryCount, 2);
34+
3335
break;
3436
case DayOfWeek.Wednesday:
3537
WednesdayTotalWorkingHours += durationAsHours;
36-
this.WednesdayAverageWorkingHours = Math.Round(durationAsHours / WednesdayTotalWorkingHours, 2);
37-
this.WednesdayValueShare = Math.Round(WednesdayTotalWorkingHours / TotalWorkingHours, 2);
38+
WednesdayEntryCount++;
39+
this.WednesdayAverageWorkingHours = Math.Round(WednesdayTotalWorkingHours / WednesdayEntryCount, 2);
40+
3841
break;
3942
case DayOfWeek.Thursday:
4043
ThursdayTotalWorkingHours += durationAsHours;
41-
this.ThursdayAverageWorkingHours = Math.Round(durationAsHours / ThursdayTotalWorkingHours, 2);
42-
this.ThursdayValueShare = Math.Round(ThursdayTotalWorkingHours / TotalWorkingHours, 2);
44+
ThursdayEntryCount++;
45+
this.ThursdayAverageWorkingHours = Math.Round(ThursdayTotalWorkingHours / ThursdayEntryCount, 2);
46+
4347
break;
4448
case DayOfWeek.Friday:
4549
FridayTotalWorkingHours += durationAsHours;
46-
this.FridayAverageWorkingHours = Math.Round(durationAsHours / FridayTotalWorkingHours, 2);
47-
this.FridayValueShare = Math.Round(FridayAverageWorkingHours / TotalWorkingHours, 2);
50+
FridayEntryCount++;
51+
this.FridayAverageWorkingHours = Math.Round(FridayTotalWorkingHours / FridayEntryCount, 2);
52+
4853
break;
4954
case DayOfWeek.Saturday:
5055
SaturdayTotalWorkingHours += durationAsHours;
51-
this.SaturdayAverageWorkingHours = Math.Round(durationAsHours / SaturdayTotalWorkingHours, 2);
52-
this.SaturdayValueShare = Math.Round(SaturdayAverageWorkingHours / TotalWorkingHours, 2);
56+
SaturdayEntryCount++;
57+
this.SaturdayAverageWorkingHours = Math.Round(SaturdayTotalWorkingHours / SaturdayEntryCount, 2);
58+
5359
break;
5460
case DayOfWeek.Sunday:
5561
SundayTotalWorkingHours += durationAsHours;
56-
this.SundayAverageWorkingHours = Math.Round(durationAsHours / SundayTotalWorkingHours, 2);
57-
this.SundayValueShare = Math.Round(SundayAverageWorkingHours / TotalWorkingHours, 2);
62+
SundayEntryCount++;
63+
this.SundayAverageWorkingHours = Math.Round(SundayTotalWorkingHours / SundayEntryCount, 2);
5864
break;
5965
};
66+
67+
CalculateShares();
6068
}
6169
}
6270

71+
private void CalculateShares()
72+
{
73+
this.MondayValueShare = Math.Round(MondayTotalWorkingHours / TotalWorkingHours, 2);
74+
this.TuesdayValueShare = Math.Round(TuesdayTotalWorkingHours / TotalWorkingHours, 2);
75+
this.WednesdayValueShare = Math.Round(WednesdayTotalWorkingHours / TotalWorkingHours, 2);
76+
this.ThursdayValueShare = Math.Round(ThursdayTotalWorkingHours / TotalWorkingHours, 2);
77+
this.FridayValueShare = Math.Round(FridayTotalWorkingHours / TotalWorkingHours, 2);
78+
this.SaturdayValueShare = Math.Round(SaturdayTotalWorkingHours / TotalWorkingHours, 2);
79+
this.SundayValueShare = Math.Round(SundayTotalWorkingHours / TotalWorkingHours, 2);
80+
}
81+
6382
public IEnumerable<MostProductiveWeekDaysViewModel> GetResults()
6483
{
6584
return new List<MostProductiveWeekDaysViewModel>
@@ -120,23 +139,30 @@ public IEnumerable<MostProductiveWeekDaysViewModel> GetResults()
120139
public double MondayTotalWorkingHours { get; private set; }
121140
public double MondayValueShare { get; private set; }
122141
public double MondayAverageWorkingHours { get; private set; }
142+
public double MondayEntryCount { get; set; }
123143
public double TuesdayTotalWorkingHours { get; private set; }
124144
public double TuesdayValueShare { get; private set; }
125145
public double TuesdayAverageWorkingHours { get; private set; }
146+
public double TuesdayEntryCount { get; set; }
126147
public double WednesdayTotalWorkingHours { get; private set; }
127148
public double WednesdayValueShare { get; private set; }
128149
public double WednesdayAverageWorkingHours { get; private set; }
150+
public double WednesdayEntryCount { get; set; }
129151
public double ThursdayTotalWorkingHours { get; private set; }
130152
public double ThursdayValueShare { get; private set; }
131153
public double ThursdayAverageWorkingHours { get; private set; }
154+
public double ThursdayEntryCount { get; set; }
132155
public double FridayTotalWorkingHours { get; private set; }
133156
public double FridayValueShare { get; private set; }
134157
public double FridayAverageWorkingHours { get; private set; }
158+
public double FridayEntryCount { get; set; }
135159
public double SaturdayTotalWorkingHours { get; private set; }
136160
public double SaturdayValueShare { get; private set; }
137161
public double SaturdayAverageWorkingHours { get; private set; }
162+
public double SaturdayEntryCount { get; set; }
138163
public double SundayTotalWorkingHours { get; private set; }
139164
public double SundayValueShare { get; private set; }
140165
public double SundayAverageWorkingHours { get; private set; }
166+
public double SundayEntryCount { get; set; }
141167
}
142168
}

TakeMyTime.NETCore.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TakeMyTime.BLL.Tests", "Tak
1919
EndProject
2020
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TakeMyTime.Tests.Common", "TakeMyTime.Tests.Common\TakeMyTime.Tests.Common.csproj", "{D7D6ABCF-39A8-4C17-BF63-F29F11F496BC}"
2121
EndProject
22+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TakeMyTime.DAL.Tests", "TakeMyTime.DAL.Tests\TakeMyTime.DAL.Tests.csproj", "{E778405A-42E7-4F78-BE0F-EB025BDDD2CB}"
23+
EndProject
2224
Global
2325
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2426
Debug|Any CPU = Debug|Any CPU
@@ -57,6 +59,10 @@ Global
5759
{D7D6ABCF-39A8-4C17-BF63-F29F11F496BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
5860
{D7D6ABCF-39A8-4C17-BF63-F29F11F496BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
5961
{D7D6ABCF-39A8-4C17-BF63-F29F11F496BC}.Release|Any CPU.Build.0 = Release|Any CPU
62+
{E778405A-42E7-4F78-BE0F-EB025BDDD2CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
63+
{E778405A-42E7-4F78-BE0F-EB025BDDD2CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
64+
{E778405A-42E7-4F78-BE0F-EB025BDDD2CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
65+
{E778405A-42E7-4F78-BE0F-EB025BDDD2CB}.Release|Any CPU.Build.0 = Release|Any CPU
6066
EndGlobalSection
6167
GlobalSection(SolutionProperties) = preSolution
6268
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)