Skip to content

Commit

Permalink
Handle null/missing calendar id arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
CronofyMatt committed Oct 9, 2024
1 parent 4cee8ff commit 11080c7
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/Cronofy/AvailabilityRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public bool Equals(AvailabilityRule other)
{
return this.AvailabilityRuleId == other.AvailabilityRuleId &&
this.TimeZoneId == other.TimeZoneId &&
this.CalendarIds.SequenceEqual(other.CalendarIds) &&
((this.CalendarIds == null && other.CalendarIds == null) || (this.CalendarIds != null && other.CalendarIds != null && this.CalendarIds.SequenceEqual(other.CalendarIds))) &&
this.WeeklyPeriods.SequenceEqual(other.WeeklyPeriods);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Cronofy/Requests/UpsertAvailabilityRuleRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static UpsertAvailabilityRuleRequest FromAvailabilityRule(AvailabilityRul
{
AvailabilityRuleId = availabilityRule.AvailabilityRuleId,
TimeZoneId = availabilityRule.TimeZoneId,
CalendarIds = availabilityRule.CalendarIds.ToArray(),
CalendarIds = availabilityRule.CalendarIds?.ToArray(),
WeeklyPeriods = availabilityRule.WeeklyPeriods.Select(WeeklyPeriod.FromWeeklyPeriod).ToArray(),
};
}
Expand Down
2 changes: 1 addition & 1 deletion src/Cronofy/Responses/AvailabilityRuleResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public AvailabilityRule ToAvailabilityRule()
{
AvailabilityRuleId = this.AvailabilityRuleId,
TimeZoneId = this.TimeZoneId,
CalendarIds = this.CalendarIds.ToArray(),
CalendarIds = this.CalendarIds?.ToArray(),
WeeklyPeriods = this.WeeklyPeriods.Select(weeklyPeriod => weeklyPeriod.ToWeeklyPeriod()).ToArray(),
};
}
Expand Down
68 changes: 68 additions & 0 deletions test/Cronofy.Test/CronofyAccountClientTests/GetAvailabilityRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,73 @@ public void CanGetAvailabilityRule()

Assert.AreEqual(expectedResponse, actualResponse);
}

[Test]
public void CanGetAvailabilityRuleWithMissingCalendarIds()
{
this.Http.Stub(
HttpGet
.Url("https://api.cronofy.com/v1/availability_rules/" + AvailabilityRuleId)
.RequestHeader("Authorization", "Bearer " + AccessToken)
.ResponseCode(200)
.ResponseBodyFormat(
@"
{{
""availability_rule"": {{
""availability_rule_id"": ""{0}"",
""tzid"": ""America/Chicago"",
""weekly_periods"": [
{{
""day"": ""monday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
}},
{{
""day"": ""monday"",
""start_time"": ""14:00"",
""end_time"": ""17:00""
}},
{{
""day"": ""wednesday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
}}
]
}}
}}
", AvailabilityRuleId));

var actualResponse = this.Client.GetAvailabilityRule(AvailabilityRuleId);

var expectedResponse = new AvailabilityRule
{
AvailabilityRuleId = AvailabilityRuleId,
TimeZoneId = "America/Chicago",
CalendarIds = null,
WeeklyPeriods = new[]
{
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Monday,
StartTime = "09:30",
EndTime = "12:30",
},
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Monday,
StartTime = "14:00",
EndTime = "17:00",
},
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Wednesday,
StartTime = "09:30",
EndTime = "12:30",
},
},
};

Assert.AreEqual(expectedResponse, actualResponse);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,17 @@ public void CanListAvailabilityRules()
""end_time"": ""17:40""
}
]
},
{
""availability_rule_id"": ""null_calendar_ids"",
""tzid"": ""Europe/London"",
""weekly_periods"": [
{
""day"": ""thursday"",
""start_time"": ""09:00"",
""end_time"": ""17:30""
}
]
}
]
}
Expand Down Expand Up @@ -120,6 +131,21 @@ public void CanListAvailabilityRules()
},
},
},
new AvailabilityRule
{
AvailabilityRuleId = "null_calendar_ids",
TimeZoneId = "Europe/London",
CalendarIds = null,
WeeklyPeriods = new[]
{
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Thursday,
StartTime = "09:00",
EndTime = "17:30",
},
},
},
};

Assert.AreEqual(expectedResponse, actualResponse);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,5 +100,95 @@ public void CanUpsertAvailabilityRule()

Assert.AreEqual(updatedAvailabilityRuleState, actualResponse);
}

[Test]
public void CanUpsertAvailabilityRuleWithMissingCalendarIds()
{
this.Http.Stub(
HttpPost
.Url("https://api.cronofy.com/v1/availability_rules")
.RequestHeader("Authorization", "Bearer " + AccessToken)
.JsonRequest(@"
{
""availability_rule_id"": ""default"",
""tzid"": ""America/Chicago"",
""weekly_periods"": [
{
""day"": ""monday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
},
{
""day"": ""monday"",
""start_time"": ""14:00"",
""end_time"": ""17:00""
},
{
""day"": ""wednesday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
}
]
}
")
.ResponseCode(200)
.ResponseBody(@"
{
""availability_rule"": {
""availability_rule_id"": ""default"",
""tzid"": ""America/Chicago"",
""weekly_periods"": [
{
""day"": ""monday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
},
{
""day"": ""monday"",
""start_time"": ""14:00"",
""end_time"": ""17:00""
},
{
""day"": ""wednesday"",
""start_time"": ""09:30"",
""end_time"": ""12:30""
}
]
}
}
"));

var updatedAvailabilityRuleState = new AvailabilityRule
{
AvailabilityRuleId = "default",
TimeZoneId = "America/Chicago",
CalendarIds = null,
WeeklyPeriods = new[]
{
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Monday,
StartTime = "09:30",
EndTime = "12:30",
},
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Monday,
StartTime = "14:00",
EndTime = "17:00",
},
new AvailabilityRule.WeeklyPeriod
{
Day = DayOfWeek.Wednesday,
StartTime = "09:30",
EndTime = "12:30",
},
},
};

var actualResponse = this.Client.UpsertAvailabilityRule(updatedAvailabilityRuleState);

Assert.AreEqual(updatedAvailabilityRuleState, actualResponse);
}
}
}

0 comments on commit 11080c7

Please sign in to comment.