Skip to content

Commit 5e2f2a4

Browse files
committed
finish Timetable feature
2 parents 28afd79 + f63c6e5 commit 5e2f2a4

26 files changed

Lines changed: 1434 additions & 16 deletions

API.Test/AuthentificationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace API.Test;
1111
[TestFixture]
1212
internal class AuthentificationTests
1313
{
14-
public static WebUntisClient Client { get; set; } = new("WebUntisAPI_TEST");
14+
public static WebUntisClient Client { get; set; } = new("WebUntisAPI_TEST", 1000);
1515

1616
static AuthentificationTests()
1717
{

API.Test/ExtensionsTests/DateTimeExtensionTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static void ToWebUntisTimeFormatTest()
1717
{
1818
// Example 1 (True)
1919
new DateTime(2023, 5, 31, 20, 0, 0).ToWebUntisTimeFormat(out string E1_Date, out string E1_Time);
20-
string E1_Date_Res = "2023-05-31";
20+
string E1_Date_Res = "20230531";
2121
string E1_Time_Res = "2000";
2222
Assert.Multiple(() =>
2323
{
@@ -27,7 +27,7 @@ public static void ToWebUntisTimeFormatTest()
2727

2828
// Example 2 (True)
2929
new DateTime(2019, 12, 2, 7, 40, 0).ToWebUntisTimeFormat(out string E2_Date, out string E2_Time);
30-
string E2_Date_Res = "2019-12-02";
30+
string E2_Date_Res = "20191202";
3131
string E2_Time_Res = "740";
3232
Assert.Multiple(() =>
3333
{
@@ -41,13 +41,13 @@ public static void ToWebUntisTimeFormatTest()
4141
public static void FromWebUntisTimeFormatTest()
4242
{
4343
// Example 1
44-
string E1_Date = "2023-05-31";
44+
string E1_Date = "20230531";
4545
string E1_Time = "2000";
4646
DateTime? E1_DateTime = new DateTime().FromWebUntisTimeFormat(E1_Date, E1_Time);
4747
Assert.That(new DateTime(2023, 5, 31, 20, 0, 0), Is.EqualTo(E1_DateTime));
4848

4949
// Example 2
50-
string E2_Date = "2023-06-01";
50+
string E2_Date = "20230601";
5151
string E2_Time = "740";
5252
DateTime? E2_DateTime = new DateTime().FromWebUntisTimeFormat(E2_Date, E2_Time);
5353
Assert.That(new DateTime(2023, 6, 1, 7, 40, 0), Is.EqualTo(E2_DateTime));

API.Test/TeachingTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void GetClass()
3030
{
3131
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
3232

33-
Task<Class[]> classes = Client.GetAllClassesAsync();
33+
Task<Class[]> classes = Client.GetClassesAsync(new SchoolYear() { Id = 5});
3434
classes.Wait();
3535
if (classes.Result.Length > 0)
3636
Assert.Pass();
@@ -50,4 +50,17 @@ public void GetRoom()
5050
else
5151
Assert.Fail();
5252
}
53+
54+
[Test]
55+
public void GetDepartment()
56+
{
57+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
58+
59+
Task<Department[]> departments = Client.GetAllDepartmentsAsync();
60+
departments.Wait();
61+
if (departments.Result != null)
62+
Assert.Pass();
63+
else
64+
Assert.Fail();
65+
}
5366
}

API.Test/TimeTableTests.cs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using WebUntisAPI.Client.Models;
8+
using static API.Test.AuthentificationTests;
9+
10+
namespace API.Test;
11+
12+
[TestFixture]
13+
internal class TimeTableTests
14+
{
15+
[Test]
16+
public void GetStatusData()
17+
{
18+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
19+
20+
Task<StatusData> status = Client.GetStatusDataAsync();
21+
status.Wait();
22+
if (status.Result != null)
23+
Assert.Pass();
24+
else
25+
Assert.Fail();
26+
}
27+
28+
[Test]
29+
public void GetTimeGrid()
30+
{
31+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
32+
33+
Task<Timegrid> timegrid = Client.GetTimegridAsync();
34+
timegrid.Wait();
35+
if (timegrid.Result.SchoolDays > 0)
36+
Assert.Pass();
37+
else
38+
Assert.Fail();
39+
}
40+
41+
[Test]
42+
public void GetSchoolYears()
43+
{
44+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
45+
46+
Task<SchoolYear[]> schoolYears = Client.GetAllSchoolYearsAsync();
47+
schoolYears.Wait();
48+
if (schoolYears.Result.Length > 0)
49+
Assert.Pass();
50+
else
51+
Assert.Fail();
52+
}
53+
54+
[Test]
55+
public void GetCurrentSchoolYear()
56+
{
57+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
58+
59+
Task<SchoolYear> schoolYear = Client.GetCurrentSchoolYearAsync();
60+
schoolYear.Wait();
61+
if (schoolYear.Result != null)
62+
Assert.Pass();
63+
else
64+
Assert.Fail();
65+
}
66+
67+
[Test]
68+
public void GetHolidays()
69+
{
70+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
71+
72+
Task<Holidays[]> holidays = Client.GetAllHolidaysAsync();
73+
holidays.Wait();
74+
if (holidays.Result.Length > 0)
75+
Assert.Pass();
76+
else
77+
Assert.Fail();
78+
}
79+
80+
[Test]
81+
public void GetTimetable()
82+
{
83+
Client.LoginAsync(s_Server, s_LoginName, s_UserName, s_Password).Wait();
84+
85+
Task<Period[]> timetable = Client.GetTimetableForStudentAsync(Client.User as Student, new DateTime(2023, 05, 29), new DateTime(2023, 09, 2));
86+
timetable.Wait();
87+
if (timetable.Result.Length > 0)
88+
Assert.Pass();
89+
else
90+
Assert.Fail();
91+
}
92+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using WebUntisAPI.Client.Extensions;
9+
10+
namespace WebUntisAPI.Client.Converter
11+
{
12+
internal class DateJsonConverter : JsonConverter<DateTime>
13+
{
14+
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
15+
{
16+
JToken token = JToken.Load(reader);
17+
return new DateTime().FromWebUntisTimeFormat(token.Value<string>(), "000");
18+
}
19+
20+
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
21+
{
22+
value.ToWebUntisTimeFormat(out string dateString, out _);
23+
writer.WriteValue(dateString);
24+
}
25+
}
26+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using WebUntisAPI.Client.Extensions;
9+
using WebUntisAPI.Client.Models;
10+
11+
namespace WebUntisAPI.Client.Converter
12+
{
13+
internal class SchoolYearJsonConverter : JsonConverter<SchoolYear>
14+
{
15+
public override SchoolYear ReadJson(JsonReader reader, Type objectType, SchoolYear existingValue, bool hasExistingValue, JsonSerializer serializer)
16+
{
17+
JObject obj = JObject.Load(reader);
18+
return new SchoolYear()
19+
{
20+
Id = obj["id"].Value<int>(),
21+
Name = obj["name"].Value<string>(),
22+
StartDate = new DateTime().FromWebUntisTimeFormat(obj["startDate"].Value<string>(), "000"),
23+
EndDate = new DateTime().FromWebUntisTimeFormat(obj["endDate"].Value<string>(), "000"),
24+
};
25+
}
26+
27+
public override void WriteJson(JsonWriter writer, SchoolYear value, JsonSerializer serializer)
28+
{
29+
writer.WriteStartObject();
30+
31+
writer.WritePropertyName("id");
32+
writer.WriteValue(value.Id);
33+
34+
writer.WritePropertyName("name");
35+
writer.WriteValue(value.Name);
36+
37+
value.StartDate.ToWebUntisTimeFormat(out string startDateString, out _);
38+
writer.WritePropertyName("startDate");
39+
writer.WriteValue(startDateString);
40+
41+
value.StartDate.ToWebUntisTimeFormat(out string endDateString, out _);
42+
writer.WritePropertyName("endDate");
43+
writer.WriteValue(endDateString);
44+
45+
writer.WriteEndObject();
46+
}
47+
}
48+
}
49+
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Drawing;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
using WebUntisAPI.Client.Models;
10+
11+
namespace WebUntisAPI.Client.Converter
12+
{
13+
/// <summary>
14+
/// A converter for the get status data response
15+
/// </summary>
16+
internal class StatusDataJsonConverter : JsonConverter<StatusData>
17+
{
18+
public override StatusData ReadJson(JsonReader reader, Type objectType, StatusData existingValue, bool hasExistingValue, JsonSerializer serializer)
19+
{
20+
// Setup json object
21+
JObject statusDataObject = JObject.Load(reader);
22+
IEnumerable<JObject> lessonTypes = statusDataObject["lstypes"].Values<JObject>();
23+
IEnumerable<JObject> codes = statusDataObject["codes"].Values<JObject>();
24+
25+
return new StatusData
26+
{
27+
LsColors = lessonTypes.First(obj => obj.ContainsKey("ls"))["ls"].ToObject<ForeBackColors>(),
28+
OhColors = lessonTypes.First(obj => obj.ContainsKey("oh"))["oh"].ToObject<ForeBackColors>(),
29+
SbColors = lessonTypes.First(obj => obj.ContainsKey("sb"))["sb"].ToObject<ForeBackColors>(),
30+
BsColors = lessonTypes.First(obj => obj.ContainsKey("bs"))["bs"].ToObject<ForeBackColors>(),
31+
CancelledLessonColors = codes.First(obj => obj.ContainsKey("cancelled"))["cancelled"].ToObject<ForeBackColors>(),
32+
IrregularLessonColors = codes.First(obj => obj.ContainsKey("irregular"))["irregular"].ToObject<ForeBackColors>()
33+
};
34+
}
35+
36+
public override void WriteJson(JsonWriter writer, StatusData value, JsonSerializer serializer)
37+
{
38+
writer.WriteStartObject();
39+
40+
writer.WritePropertyName("lstypes");
41+
writer.WriteStartArray();
42+
43+
writer.WriteStartObject();
44+
writer.WritePropertyName("ls");
45+
serializer.Serialize(writer, value.LsColors);
46+
writer.WriteEndObject();
47+
48+
writer.WriteStartObject();
49+
writer.WritePropertyName("oh");
50+
serializer.Serialize(writer, value.OhColors);
51+
writer.WriteEndObject();
52+
53+
writer.WriteStartObject();
54+
writer.WritePropertyName("sb");
55+
serializer.Serialize(writer, value.SbColors);
56+
writer.WriteEndObject();
57+
58+
writer.WriteStartObject();
59+
writer.WritePropertyName("bs");
60+
serializer.Serialize(writer, value.BsColors);
61+
writer.WriteEndObject();
62+
63+
writer.WriteEndArray();
64+
65+
writer.WritePropertyName("codes");
66+
writer.WriteStartArray();
67+
68+
writer.WriteStartObject();
69+
writer.WritePropertyName("cancelled");
70+
serializer.Serialize(writer, value.CancelledLessonColors);
71+
writer.WriteEndObject();
72+
73+
writer.WriteStartObject();
74+
writer.WritePropertyName("irregular");
75+
serializer.Serialize(writer, value.IrregularLessonColors);
76+
writer.WriteEndObject();
77+
78+
writer.WriteEndArray();
79+
writer.WriteEndObject();
80+
}
81+
}
82+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using WebUntisAPI.Client.Extensions;
9+
10+
namespace WebUntisAPI.Client.Converter
11+
{
12+
internal class TimeJsonConverter : JsonConverter<DateTime>
13+
{
14+
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
15+
{
16+
JToken token = JToken.Load(reader);
17+
return new DateTime().FromWebUntisTimeFormat("20200101", token.Value<string>());
18+
}
19+
20+
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
21+
{
22+
value.ToWebUntisTimeFormat(out _, out string timeString);
23+
writer.WriteValue(timeString);
24+
}
25+
}
26+
}
27+

0 commit comments

Comments
 (0)