Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 44 additions & 4 deletions Ical.Net.Tests/CalendarPropertiesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ public void AddPropertyShouldNotIncludePropertyNameInValue()
}

[Test]
public void PropertySerialization_Tests()
public void PropertySerialization()
{
const string propValue =
"""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server version rmj.rmm.rup.rpr">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted from text/rtf format -->\n\n<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">This is some</FONT></SPAN><SPAN LANG="en-us"><B> <FONT FACE="Calibri">HTML</FONT></B></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="en-us"><U> <FONT FACE="Calibri">formatted</FONT></U></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="en-us"><I> <FONT FACE="Calibri">text</FONT></I></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>\n\n</BODY>\n</HTML>""";
"""<html><body>BodyText</body></html>""";
var start = DateTime.UtcNow;
var end = start.AddHours(1);
var @event = new CalendarEvent
Expand All @@ -47,13 +47,53 @@ public void PropertySerialization_Tests()
var property = new CalendarProperty("X-ALT-DESC", propValue);
// Parameters most not be part of the value
property.Parameters.Add("FMTTYPE", "text/html");
var property2 = new CalendarProperty("ATTENDEE", "mailto:[email protected]");
property2.Parameters.Add("MEMBER", "mailto:[email protected],mailto:[email protected]");
@event.Properties.Add(property2);
@event.AddProperty(property);
var calendar = new Calendar();
calendar.Events.Add(@event);

var serialized = new CalendarSerializer().SerializeToString(calendar);
Assert.That(serialized, Does.Contain("X-ALT-DESC;FMTTYPE=text/html:"),
"Parameter should get serialized standard compliant");
Assert.That(serialized, Does.Contain($"X-ALT-DESC;FMTTYPE=text/html:{propValue}"),
"Parameter and value should get serialized standard compliant");
}

[Test]
public void PropertyDeserialization()
{
var ics = """
BEGIN:VCALENDAR
PRODID:-//github.com/ical-org/ical.net//NONSGML ical.net 5.0.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DESCRIPTION:This is a description
DTEND:20250518T145922Z
DTSTAMP:20250518T135922Z
DTSTART:20250518T135922Z
SEQUENCE:0
UID:8f7aa9fc-e9d7-4276-8bf6-915dfe168f0d
X-ALT-DESC;FMTTYPE=text/html:<html><body>BodyText</body></html>
X-PROJECTS;PROP=name;PRIO=high:ProjectA,ProjectB
END:VEVENT
END:VCALENDAR
""";
var calendar = Calendar.Load(ics)!;
var calEvent = calendar.Events.First();
var propDescription = calEvent.Properties.FirstOrDefault(x => x.Name == "X-ALT-DESC")!;
var propProjects = calEvent.Properties.FirstOrDefault(x => x.Name == "X-PROJECTS")!;

Assert.Multiple(() =>
{
Assert.That(propDescription.Parameters, Has.Count.EqualTo(1));
Assert.That(propDescription.Value, Is.EqualTo("<html><body>BodyText</body></html>"));
Assert.That(propDescription.Parameters.FirstOrDefault(p => p.Name == "FMTTYPE")!.Value, Is.EqualTo("text/html"));

Assert.That(propProjects.Parameters, Has.Count.EqualTo(2), "Parameter list should have 2 elements");
Assert.That(propProjects.Value, Is.EqualTo("ProjectA,ProjectB"));
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should propProject.Values be a list containing ProjectA and ProjectB as elements?

Assert.That(propProjects.Parameters.FirstOrDefault(p => p.Name == "PROP")!.Value!.ToString(), Is.EqualTo("name"));
Assert.That(propProjects.Parameters.FirstOrDefault(p => p.Name == "PRIO")!.Value!.ToString(), Is.EqualTo("high"));
});
}

[Test]
Expand Down
Loading