private static void ConvertEventsToFreeBusy(
            ExchangeUser user,
            AtomEntryCollection entries,
            DateTimeRange coveredRange,
            List <string> busyMonthValues,
            List <string> busyBase64Data,
            List <string> tentativeMonthValues,
            List <string> tentativeBase64Data)
        {
            List <DateTimeRange> busyTimes      = new List <DateTimeRange>();
            List <DateTimeRange> tentativeTimes = new List <DateTimeRange>();

            foreach (EventEntry googleAppsEvent in entries)
            {
                ConvertEventToFreeBusy(user, googleAppsEvent, coveredRange, busyTimes, tentativeTimes);
            }

            FreeBusyConverter.CondenseFreeBusyTimes(busyTimes);
            FreeBusyConverter.CondenseFreeBusyTimes(tentativeTimes);

            FreeBusyConverter.ConvertDateTimeBlocksToBase64String(coveredRange.Start,
                                                                  coveredRange.End,
                                                                  busyTimes,
                                                                  busyMonthValues,
                                                                  busyBase64Data);

            FreeBusyConverter.ConvertDateTimeBlocksToBase64String(coveredRange.Start,
                                                                  coveredRange.End,
                                                                  tentativeTimes,
                                                                  tentativeMonthValues,
                                                                  tentativeBase64Data);
        }
        public void TestConvertDateTimeBlocks()
        {
            List <DateTimeRange> src = new List <DateTimeRange>();
            List <DateTimeRange> dst = new List <DateTimeRange>();

            DateTime s         = DateTime.MinValue;
            DateTime e         = DateTime.MinValue;
            DateTime startDate = new DateTime(2007, 07, 1, 0, 0, 0, DateTimeKind.Utc);
            DateTime endDate   = new DateTime(2008, 05, 31, 0, 0, 0, DateTimeKind.Utc);

            s = new DateTime(2007, 07, 23, 13, 45, 00, DateTimeKind.Unspecified);
            src.Add(new DateTimeRange(s, s.AddHours(3)));
            dst.Add(new DateTimeRange(s, s.AddHours(3)));

            s = new DateTime(2007, 07, 30, 13, 45, 00, DateTimeKind.Unspecified);
            src.Add(new DateTimeRange(s, s));
            dst.Add(new DateTimeRange(s, s));

            s = new DateTime(2007, 08, 15, 13, 45, 00, DateTimeKind.Unspecified);
            e = new DateTime(2007, 10, 11, 02, 45, 00, DateTimeKind.Unspecified);
            src.Add(new DateTimeRange(s, e));
            dst.Add(new DateTimeRange(s,
                                      new DateTime(2007, 08, 31, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2007, 09, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2007, 09, 30, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2007, 10, 01, 00, 00, 00, DateTimeKind.Unspecified), e));

            src.Add(new DateTimeRange(
                        new DateTime(2008, 01, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 03, 31, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2008, 01, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 01, 31, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2008, 02, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 02, 29, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2008, 03, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 03, 31, 23, 59, 00, DateTimeKind.Unspecified)));

            src.Add(new DateTimeRange(
                        new DateTime(2008, 04, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 05, 30, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2008, 04, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 04, 30, 23, 59, 00, DateTimeKind.Unspecified)));
            dst.Add(new DateTimeRange(
                        new DateTime(2008, 05, 01, 00, 00, 00, DateTimeKind.Unspecified),
                        new DateTime(2008, 05, 30, 23, 59, 00, DateTimeKind.Unspecified)));

            List <string> monthData  = new List <string>();
            List <string> base64Data = new List <string>();

            FreeBusyConverter.ConvertDateTimeBlocksToBase64String(startDate,
                                                                  endDate,
                                                                  src,
                                                                  monthData,
                                                                  base64Data);

            List <DateTimeRange> result = new List <DateTimeRange>();

            for (int i = 0; i < monthData.Count; i++)
            {
                int    month = int.Parse(monthData[i]);
                string data  = base64Data[i];

                List <DateTimeRange> r =
                    FreeBusyConverter.ConvertBase64StringsToDateTimeBlocks(month, data);

                result.AddRange(r);
            }

            Assert.AreEqual(dst.Count, result.Count);
            for (int i = 0; i < dst.Count; i++)
            {
                Assert.AreEqual(dst[i], result[i]);
            }
        }