コード例 #1
0
        public async Task Synchronize_ContainsDuplicates_DuplicatesAreDeletedIfEnabled(bool useWebDavCollectionSync)
        {
            var options = _testComponentContainer.TestOptionsFactory.CreateSogoEvents();

            options.SynchronizationMode     = SynchronizationMode.MergeInBothDirections;
            options.UseWebDavCollectionSync = useWebDavCollectionSync;

            var synchronizer = await CreateSynchronizer(options);

            await synchronizer.ClearEventRepositoriesAndCache();


            synchronizer = await CreateSynchronizer(options);

            var now   = DateTime.Now;
            var date1 = new DateTime(now.Year, now.Month, now.Day, now.Hour, 0, 0).AddDays(3);
            var date2 = date1.AddHours(1);
            var date3 = date1.AddHours(2);

            var event1 = ("e1", date1, date3);
            var event2 = ("e1", date1, date3);
            var event3 = ("e1", date1, date3);

            var event4 = ("e2", date1, date3);
            var event5 = ("e2", date1, date3);
            var event6 = ("e2", date2, date3);

            var event7    = ("e3", date1, date3);
            var event8    = ("e3", date1, date2);
            var event9    = ("e3x", date1, date3);
            var allEvents = new[] { event1, event2, event3, event4, event5, event6, event7, event8, event9 };

            foreach (var evt in allEvents)
            {
                await synchronizer.CreateEventInOutlook(evt.Item1, evt.Item2, evt.Item3);
            }

            await synchronizer.SynchronizeAndCheck(
                unchangedA : 0, addedA : 9, changedA : 0, deletedA : 0,
                unchangedB : 0, addedB : 0, changedB : 0, deletedB : 0,
                createA : 0, updateA : 0, deleteA : 0,
                createB : 9, updateB : 0, deleteB : 0);

            var entities = (await synchronizer.Outlook.GetAllEntities()).Select(e => e.Entity).ToList();

            Assert.That(
                entities.Select(e => (e.Inner.Subject, e.Inner.Start, e.Inner.End)),
                Is.EquivalentTo(allEvents));
            entities.ForEach(e => e.Dispose());

            ((EventMappingConfiguration)options.MappingConfiguration).CleanupDuplicateEvents = true;

            synchronizer = await CreateSynchronizer(options);

            await synchronizer.SynchronizeAndCheck(
                unchangedA : 9, addedA : 0, changedA : 0, deletedA : 0,
                unchangedB : 9, addedB : 0, changedB : 0, deletedB : 0,
                createA : 0, updateA : 0, deleteA : 0,
                createB : 0, updateB : 0, deleteB : 0);

            var entitiesAfterClenaup = (await synchronizer.Outlook.GetAllEntities()).Select(e => e.Entity).ToList();

            Assert.That(
                entitiesAfterClenaup.Select(e => (e.Inner.Subject, e.Inner.Start, e.Inner.End)),
                Is.EquivalentTo(new[] { event1, event4, event6, event7, event8, event9 }));
            entities.ForEach(e => e.Dispose());
            entitiesAfterClenaup.ForEach(e => e.Dispose());

            _testComponentContainer.AssertNoComObjectInstancesOpen();
        }