mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
got canvas service tests passing
This commit is contained in:
35
.vscode/launch.json
vendored
Normal file
35
.vscode/launch.json
vendored
Normal 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
41
.vscode/tasks.json
vendored
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,22 +1,28 @@
|
|||||||
|
|
||||||
|
using CanvasModel.EnrollmentTerms;
|
||||||
|
|
||||||
public class DeserializationTests
|
public class DeserializationTests
|
||||||
{
|
{
|
||||||
[Test]
|
// [Test]
|
||||||
public void TestTerm()
|
// public void TestTerm()
|
||||||
{
|
// {
|
||||||
|
|
||||||
var canvasContentResponse = @"{
|
// var canvasContentResponse = @"{
|
||||||
""enrollment_terms"": [
|
// ""enrollment_terms"": [
|
||||||
{
|
// {
|
||||||
""id"": 1,
|
// ""id"": 1,
|
||||||
""name"": ""one"",
|
// ""name"": ""one"",
|
||||||
""start_at"": 2022-01-01T00:00:00Z,
|
// ""start_at"": 2022-01-01T00:00:00Z,
|
||||||
""end_at"": 2022-02-01T00:00:00Z,
|
// ""end_at"": 2022-02-01T00:00:00Z,
|
||||||
""created_at"": ""2011-04-26T23:34:35Z"",
|
// ""created_at"": ""2011-04-26T23:34:35Z"",
|
||||||
""workflow_state"": ""active"",
|
// ""workflow_state"": ""active"",
|
||||||
""grading_period_group_id"": null
|
// ""grading_period_group_id"": null
|
||||||
},
|
// },
|
||||||
}";
|
// }";
|
||||||
|
|
||||||
|
// var result = JsonSerializer.Deserialize<EnrollmentTermModel>(canvasContentResponse);
|
||||||
}
|
|
||||||
|
// result.Should().NotBeNull();
|
||||||
|
// result?.Id.Should().Be(1);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace Management.Test;
|
|
||||||
|
|
||||||
public class SemesterPlannerTests
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public void TestCanCreatePlannerFromCanvasSemester()
|
|
||||||
{
|
|
||||||
var
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -33,7 +33,6 @@ public class CanvasServiceTests
|
|||||||
var canvasTerms = await service.GetTerms();
|
var canvasTerms = await service.GetTerms();
|
||||||
|
|
||||||
canvasTerms.Should().BeEquivalentTo(expectedTerms);
|
canvasTerms.Should().BeEquivalentTo(expectedTerms);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1 +1,3 @@
|
|||||||
global using NUnit.Framework;
|
global using NUnit.Framework;
|
||||||
|
global using FluentAssertions;
|
||||||
|
global using System.Text.Json;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
namespace CanvasModel.EnrollmentTerms;
|
namespace CanvasModel.EnrollmentTerms;
|
||||||
|
|
||||||
record EnrollmentTermModel
|
public record EnrollmentTermModel
|
||||||
(
|
(
|
||||||
[property: JsonPropertyName("id")] ulong Id,
|
[property: JsonPropertyName("id")] ulong Id,
|
||||||
[property: JsonPropertyName("name")] string Name,
|
[property: JsonPropertyName("name")] string Name,
|
||||||
@@ -14,7 +14,7 @@ record EnrollmentTermModel
|
|||||||
Dictionary<string, EnrollmentTermDateOverrideModel>? Overrides = null
|
Dictionary<string, EnrollmentTermDateOverrideModel>? Overrides = null
|
||||||
);
|
);
|
||||||
|
|
||||||
record EnrollmentTermDateOverrideModel
|
public record EnrollmentTermDateOverrideModel
|
||||||
(
|
(
|
||||||
[property: JsonPropertyName("start_at")] DateTime? StartAt = null,
|
[property: JsonPropertyName("start_at")] DateTime? StartAt = null,
|
||||||
[property: JsonPropertyName("end_at")] DateTime? EndAt = null
|
[property: JsonPropertyName("end_at")] DateTime? EndAt = null
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
namespace CanvasModel.EnrollmentTerms;
|
namespace CanvasModel.EnrollmentTerms;
|
||||||
record RedundantEnrollmentTermsResponse
|
|
||||||
|
public record RedundantEnrollmentTermsResponse
|
||||||
(
|
(
|
||||||
[property: JsonPropertyName("enrollment_terms")]
|
[property: JsonPropertyName("enrollment_terms")]
|
||||||
IEnumerable<EnrollmentTermModel> EnrollmentTerms
|
IEnumerable<EnrollmentTermModel> EnrollmentTerms
|
||||||
|
|||||||
@@ -18,7 +18,10 @@ public class CanvasService
|
|||||||
var url = $"accounts/10/terms";
|
var url = $"accounts/10/terms";
|
||||||
|
|
||||||
var request = new RestRequest(url);
|
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;
|
return terms;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,20 +29,20 @@ public class CanvasService
|
|||||||
{
|
{
|
||||||
var requestCount = 1;
|
var requestCount = 1;
|
||||||
request.AddQueryParameter("per_page", "100");
|
request.AddQueryParameter("per_page", "100");
|
||||||
IEnumerable<T> returnData = new T[] { };
|
RestResponse<T> response = await webRequestor.GetAsync<T>(request);
|
||||||
RestResponse<T[]> response = await webRequestor.GetAsync<T>(request);
|
var returnData = response.Data != null
|
||||||
returnData = returnData.Concat(response.Data);
|
? new T[] { response.Data }
|
||||||
|
: new T[] { };
|
||||||
var nextUrl = getNextUrl(response);
|
var nextUrl = getNextUrl(response.Headers);
|
||||||
|
|
||||||
while (nextUrl is not null)
|
while (nextUrl is not null)
|
||||||
{
|
{
|
||||||
requestCount += 1;
|
requestCount += 1;
|
||||||
var nextRequest = new RestRequest(nextUrl);
|
RestRequest nextRequest = new RestRequest(nextUrl);
|
||||||
var nextResponse = await webRequestor.GetAsync<T>(nextRequest);
|
var nextResponse = await webRequestor.GetAsync<T>(nextRequest);
|
||||||
if (nextResponse.Data is not null)
|
if (nextResponse.Data is not null)
|
||||||
returnData = returnData.Concat(nextResponse.Data);
|
returnData = returnData.Append(nextResponse.Data).ToArray();
|
||||||
nextUrl = getNextUrl(nextResponse);
|
nextUrl = getNextUrl(nextResponse.Headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Console.WriteLine($"Requesting {typeof(T)} took {requestCount} requests");
|
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()
|
.ToList()
|
||||||
.Find(h => h.Name == "Link")?
|
.Find(h => h.Name == "Link")?
|
||||||
.Value?
|
.Value?
|
||||||
|
|||||||
Reference in New Issue
Block a user