got canvas service tests passing

This commit is contained in:
2023-01-04 21:39:45 -07:00
parent dcc8fef898
commit c350a8487e
9 changed files with 119 additions and 43 deletions

35
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,35 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/Management.Web/bin/Debug/net7.0/Management.Web.dll",
"args": [],
"cwd": "${workspaceFolder}/Management.Web",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}

41
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Management.Web/Management.Web.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/Management.Web/Management.Web.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/Management.Web/Management.Web.csproj"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@@ -1,22 +1,28 @@
using CanvasModel.EnrollmentTerms;
public class DeserializationTests
{
[Test]
public void TestTerm()
{
// [Test]
// public void TestTerm()
// {
var canvasContentResponse = @"{
""enrollment_terms"": [
{
""id"": 1,
""name"": ""one"",
""start_at"": 2022-01-01T00:00:00Z,
""end_at"": 2022-02-01T00:00:00Z,
""created_at"": ""2011-04-26T23:34:35Z"",
""workflow_state"": ""active"",
""grading_period_group_id"": null
},
}";
// var canvasContentResponse = @"{
// ""enrollment_terms"": [
// {
// ""id"": 1,
// ""name"": ""one"",
// ""start_at"": 2022-01-01T00:00:00Z,
// ""end_at"": 2022-02-01T00:00:00Z,
// ""created_at"": ""2011-04-26T23:34:35Z"",
// ""workflow_state"": ""active"",
// ""grading_period_group_id"": null
// },
// }";
// var result = JsonSerializer.Deserialize<EnrollmentTermModel>(canvasContentResponse);
}
// result.Should().NotBeNull();
// result?.Id.Should().Be(1);
// }
}

View File

@@ -1,10 +0,0 @@
namespace Management.Test;
public class SemesterPlannerTests
{
[Test]
public void TestCanCreatePlannerFromCanvasSemester()
{
var
}
}

View File

@@ -33,7 +33,6 @@ public class CanvasServiceTests
var canvasTerms = await service.GetTerms();
canvasTerms.Should().BeEquivalentTo(expectedTerms);
}
}

View File

@@ -1 +1,3 @@
global using NUnit.Framework;
global using FluentAssertions;
global using System.Text.Json;

View File

@@ -1,6 +1,6 @@
namespace CanvasModel.EnrollmentTerms;
record EnrollmentTermModel
public record EnrollmentTermModel
(
[property: JsonPropertyName("id")] ulong Id,
[property: JsonPropertyName("name")] string Name,
@@ -14,7 +14,7 @@ record EnrollmentTermModel
Dictionary<string, EnrollmentTermDateOverrideModel>? Overrides = null
);
record EnrollmentTermDateOverrideModel
public record EnrollmentTermDateOverrideModel
(
[property: JsonPropertyName("start_at")] DateTime? StartAt = null,
[property: JsonPropertyName("end_at")] DateTime? EndAt = null

View File

@@ -1,6 +1,6 @@
namespace CanvasModel.EnrollmentTerms;
record RedundantEnrollmentTermsResponse
public record RedundantEnrollmentTermsResponse
(
[property: JsonPropertyName("enrollment_terms")]
IEnumerable<EnrollmentTermModel> EnrollmentTerms

View File

@@ -18,7 +18,10 @@ public class CanvasService
var url = $"accounts/10/terms";
var request = new RestRequest(url);
var terms = await PaginatedRequest<EnrollmentTermModel>(request);
var termResponses = await PaginatedRequest<RedundantEnrollmentTermsResponse>(request);
var terms = termResponses
.Select(r => r.EnrollmentTerms)
.SelectMany(s => s).ToArray();
return terms;
}
@@ -26,20 +29,20 @@ public class CanvasService
{
var requestCount = 1;
request.AddQueryParameter("per_page", "100");
IEnumerable<T> returnData = new T[] { };
RestResponse<T[]> response = await webRequestor.GetAsync<T>(request);
returnData = returnData.Concat(response.Data);
var nextUrl = getNextUrl(response);
RestResponse<T> response = await webRequestor.GetAsync<T>(request);
var returnData = response.Data != null
? new T[] { response.Data }
: new T[] { };
var nextUrl = getNextUrl(response.Headers);
while (nextUrl is not null)
{
requestCount += 1;
var nextRequest = new RestRequest(nextUrl);
RestRequest nextRequest = new RestRequest(nextUrl);
var nextResponse = await webRequestor.GetAsync<T>(nextRequest);
if (nextResponse.Data is not null)
returnData = returnData.Concat(nextResponse.Data);
nextUrl = getNextUrl(nextResponse);
returnData = returnData.Append(nextResponse.Data).ToArray();
nextUrl = getNextUrl(nextResponse.Headers);
}
System.Console.WriteLine($"Requesting {typeof(T)} took {requestCount} requests");
@@ -48,7 +51,7 @@ public class CanvasService
}
private static string? getNextUrl<T>(RestResponse<T[]> response) => response.Headers?
private static string? getNextUrl(IEnumerable<HeaderParameter>? headers) => headers?
.ToList()
.Find(h => h.Name == "Link")?
.Value?