public async Task <EntityIdWithVersion <Uri, string> > Create(Func <IICalendar, IICalendar> entityInitializer) { using (AutomaticStopwatch.StartDebug(s_logger)) { IICalendar newCalendar = new iCalendar(); newCalendar = entityInitializer(newCalendar); return(await _calDavDataAccess.CreateEntity(SerializeCalendar (newCalendar))); } }
public async Task <EntityVersion <Uri, string> > Create(Func <IICalendar, IICalendar> entityInitializer) { using (AutomaticStopwatch.StartDebug(s_logger)) { IICalendar newCalendar = new iCalendar(); newCalendar = entityInitializer(newCalendar); var uid = (newCalendar.Events.Count > 0) ? newCalendar.Events[0].UID : newCalendar.Todos[0].UID; return(await _calDavDataAccess.CreateEntity(SerializeCalendar (newCalendar), uid)); } }
public async Task <EntityVersion <WebResourceName, string> > Update( WebResourceName entityId, string entityVersion, IICalendar entityToUpdate, Func <IICalendar, IICalendar> entityModifier) { using (AutomaticStopwatch.StartDebug(s_logger)) { var updatedEntity = entityModifier(entityToUpdate); try { return(await _calDavDataAccess.UpdateEntity(entityId, entityVersion, SerializeCalendar (updatedEntity))); } catch (WebDavClientException ex) { if (_deleteAndCreateOnUpdateError403 && ex.StatusCode == System.Net.HttpStatusCode.Forbidden) { s_logger.Warn("Server returned '403' ('Forbidden') for update, trying Delete and Recreate instead..."); await Delete(entityId, entityVersion); var uid = Guid.NewGuid().ToString(); if (updatedEntity.Events.Count > 0) { updatedEntity.Events[0].UID = uid; } else { updatedEntity.Todos[0].UID = uid; } return(await _calDavDataAccess.CreateEntity(SerializeCalendar (updatedEntity), uid)); } else { throw; } } } }
public EntityIdWithVersion <Uri, string> Create(Func <IICalendar, IICalendar> entityInitializer) { using (AutomaticStopwatch.StartDebug(s_logger)) { IICalendar newCalendar = new iCalendar(); newCalendar = entityInitializer(newCalendar); for (int i = 0; i < newCalendar.Events.Count; i++) { newCalendar.Events[i].Sequence = i; } for (int i = 0; i < newCalendar.Todos.Count; i++) { newCalendar.Todos[i].Sequence = i; } return(_calDavDataAccess.CreateEntity(SerializeCalendar(newCalendar))); } }
public async Task Test_CRUD() { foreach (var evt in await _calDavDataAccess.GetEventVersions(null)) { await _calDavDataAccess.DeleteEntity(evt.Id, evt.Version); } var entitiesWithVersion = new List <EntityVersion <WebResourceName, string> >(); var uids = new List <string>(); for (int i = 1; i <= 5; i++) { var iCalendar = CreateEntity(i); uids.Add(iCalendar.Events[0].UID); entitiesWithVersion.Add( await _calDavDataAccess.CreateEntity( SerializeCalendar( iCalendar), iCalendar.Events[0].UID)); } var queriedEntitesWithVersion = await _calDavDataAccess.GetEventVersions(new DateTimeRange (DateTime.Now.AddDays(150), DateTime.Now.AddDays(450))); Assert.That(queriedEntitesWithVersion.Count, Is.EqualTo(3)); CollectionAssert.IsSubsetOf( queriedEntitesWithVersion.Select(e => e.Id), entitiesWithVersion.Select(e => e.Id)); var updatedCalendar = CreateEntity(600); updatedCalendar.Events[0].UID = uids[1]; var updated = await _calDavDataAccess.UpdateEntity( entitiesWithVersion[1].Id, entitiesWithVersion[1].Version, SerializeCalendar (updatedCalendar)); Assert.That( (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count, Is.EqualTo(2)); var updatedRevertedCalendar = CreateEntity(2); updatedRevertedCalendar.Events[0].UID = uids[1]; var updateReverted = await _calDavDataAccess.UpdateEntity( updated.Id, updated.Version, SerializeCalendar (updatedRevertedCalendar)); Assert.That( (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count, Is.EqualTo(3)); await _calDavDataAccess.DeleteEntity(updateReverted.Id, updateReverted.Version); Assert.That( (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count, Is.EqualTo(2)); var entites = await _calDavDataAccess.GetEntities(entitiesWithVersion.Take (4).Select(e => e.Id)); if (!DeletedEntitesAreJustMarkedAsDeletedAndStillAvailableViaCalendarMultigetReport) { Assert.That(entites.Count, Is.EqualTo(3)); // Only 3, the second was deleted CollectionAssert.AreEquivalent( entites.Select(e => DeserializeCalendar(e.Entity).Events[0].Summary), new[] { "Event1", "Event3", "Event4" }); } else { CollectionAssert.AreEquivalent( entites.Select(e => DeserializeCalendar(e.Entity).Events[0].Summary), new[] { "Event1", "Event2", "Event3", "Event4" }); } }