tests allow for pages to be stored and retrieved

This commit is contained in:
2024-01-12 13:34:42 -07:00
parent 1eda91eeb0
commit a4179e6d52
13 changed files with 279 additions and 34 deletions

View File

@@ -4,8 +4,6 @@ using LocalModels;
namespace LocalModels;
public static class LocalAssignmentMarkdownCreator
{
public static string AssignmentToMarkdown(this LocalAssignment assignment)
{
var settingsMarkdown = assignment.settingsToMarkdown();
@@ -47,4 +45,4 @@ public static class LocalAssignmentMarkdownCreator
}
return builder.ToString();
}
}
}

View File

@@ -29,10 +29,10 @@ public static class LocalAssignmentMarkdownParser
private static (string name, string assignmentGroupName, List<string> submissionTypes, DateTime dueAt, DateTime? lockAt) parseSettings(string input)
{
var name = extractLabelValue(input, "Name");
var rawLockAt = extractLabelValue(input, "LockAt");
var rawDueAt = extractLabelValue(input, "DueAt");
var localAssignmentGroupName = extractLabelValue(input, "AssignmentGroupName");
var name = MarkdownUtils.ExtractLabelValue(input, "Name");
var rawLockAt = MarkdownUtils.ExtractLabelValue(input, "LockAt");
var rawDueAt = MarkdownUtils.ExtractLabelValue(input, "DueAt");
var localAssignmentGroupName = MarkdownUtils.ExtractLabelValue(input, "AssignmentGroupName");
var submissionTypes = parseSubmissionTypes(input);
DateTime? lockAt = DateTime.TryParse(rawLockAt, out DateTime parsedLockAt)
@@ -76,18 +76,6 @@ public static class LocalAssignmentMarkdownParser
return submissionTypes;
}
private static string extractLabelValue(string input, string label)
{
string pattern = $@"{label}: (.*?)\n";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
@@ -117,4 +105,4 @@ public static class LocalAssignmentMarkdownParser
};
}
}
}

View File

@@ -2,7 +2,45 @@ namespace LocalModels;
public record LocalCoursePage
{
public required string Title { get; init; }
public required string Name { get; init; }
public required string Text { get; set; }
public DateTime? DueDateForOrdering { get; init; }
public string ToMarkdown()
{
var printableDueDate = DueDateForOrdering.ToString()?.Replace('\u202F', ' ');
var settingsMarkdown = $"Name: {Name}\n"
+ $"DueDateForOrdering: {printableDueDate}\n"
+ "---\n";
return settingsMarkdown + Text;
}
public static LocalCoursePage ParseMarkdown(string pageMarkdown)
{
var rawSettings = pageMarkdown.Split("---")[0];
var name = MarkdownUtils.ExtractLabelValue(rawSettings, "Name");
var rawDate = MarkdownUtils.ExtractLabelValue(rawSettings, "DueDateForOrdering");
DateTime? parsedDate = DateTime.TryParse(rawDate, out DateTime parsedDueAt)
? parsedDueAt
: null;
var text = pageMarkdown.Split("---\n")[1];
return new LocalCoursePage
{
Name = name,
DueDateForOrdering = parsedDate,
Text = text
};
}
}
public class LocalPageMarkdownParseException : Exception
{
public LocalPageMarkdownParseException(string message) : base(message)
{
}
}

View File

@@ -0,0 +1,20 @@
using System.Text.RegularExpressions;
namespace LocalModels;
public static class MarkdownUtils
{
public static string ExtractLabelValue(string input, string label)
{
string pattern = $@"{label}: (.*?)\n";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}
}