public static WorkspaceData Import(this WorkspaceJson json, IDataStoreContext ctx, Guid?localIdHint = null, WorkspaceData mergeBase = null) { var converter = ServiceContainer.Resolve <WorkspaceJsonConverter> (); return(converter.Import(ctx, json, localIdHint, mergeBase)); }
public void ImportUpdated() { RunAsync(async delegate { var workspaceData = await DataStore.PutAsync(new WorkspaceData() { RemoteId = 1, Name = "", ModifiedAt = new DateTime(2014, 1, 2, 10, 0, 0, DateTimeKind.Utc), }); var workspaceJson = new WorkspaceJson() { Id = 1, Name = "Test", ModifiedAt = new DateTime(2014, 1, 2, 10, 1, 0, DateTimeKind.Utc).ToLocalTime(), // JSON deserialized to local }; workspaceData = await DataStore.ExecuteInTransactionAsync(ctx => converter.Import(ctx, workspaceJson)); Assert.AreNotEqual(Guid.Empty, workspaceData.Id); Assert.AreEqual(1, workspaceData.RemoteId); Assert.AreEqual("Test", workspaceData.Name); Assert.AreEqual(new DateTime(2014, 1, 2, 10, 1, 0, DateTimeKind.Utc), workspaceData.ModifiedAt); Assert.IsFalse(workspaceData.IsDirty); Assert.IsFalse(workspaceData.RemoteRejected); Assert.IsNull(workspaceData.DeletedAt); }); // Warn the user that the test result might be invalid if (TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalMinutes >= 0) { Assert.Inconclusive("The test machine timezone should be set to GTM-1 or less to test datetime comparison."); } }
public async Task <AuthResult> NoUserSetupAsync() { IsAuthenticating = true; //Create dummy user and workspace. var userJson = new UserJson() { Id = 100, Name = OfflineUserName, StartOfWeek = DayOfWeek.Monday, Locale = "", Email = OfflineUserEmail, Password = "******", Timezone = Time.TimeZoneId, DefaultWorkspaceId = 1000 }; var workspaceJson = new WorkspaceJson() { Id = 1000, Name = OfflineWorkspaceName, IsPremium = false, IsAdmin = false }; try { // Import the user into our database: UserData userData; try { var dataStore = ServiceContainer.Resolve <IDataStore> (); userData = await dataStore.ExecuteInTransactionAsync(ctx => userJson.Import(ctx)); await dataStore.ExecuteInTransactionAsync(ctx => workspaceJson.Import(ctx)); } catch (Exception ex) { var log = ServiceContainer.Resolve <ILogger> (); log.Error(Tag, ex, "Failed to import authenticated user."); ServiceContainer.Resolve <MessageBus> ().Send( new AuthFailedMessage(this, AuthResult.SystemError, ex)); return(AuthResult.SystemError); } var credStore = ServiceContainer.Resolve <ISettingsStore> (); credStore.UserId = userData.Id; credStore.ApiToken = userJson.ApiToken; credStore.OfflineMode = userData.Name == OfflineUserName; credStore.HasEntries = false; User = userData; Token = userJson.ApiToken; OfflineMode = userData.Name == OfflineUserName; IsAuthenticated = true; ServiceContainer.Resolve <MessageBus> ().Send( new AuthChangedMessage(this, AuthChangeReason.NoUser)); } finally { IsAuthenticating = false; } return(AuthResult.Success); }
public WorkspaceData Import (IDataStoreContext ctx, WorkspaceJson json, Guid? localIdHint = null, WorkspaceData mergeBase = null) { var data = GetByRemoteId<WorkspaceData> (ctx, json.Id.Value, localIdHint); var merger = mergeBase != null ? new WorkspaceMerger (mergeBase) : null; if (merger != null && data != null) merger.Add (new WorkspaceData (data)); if (json.DeletedAt.HasValue) { if (data != null) { ctx.Delete (data); data = null; } } else if (merger != null || ShouldOverwrite (data, json)) { data = data ?? new WorkspaceData (); ImportJson (data, json); if (merger != null) { merger.Add (data); data = merger.Result; } data = ctx.Put (data); } return data; }
public WorkspaceData Import(IDataStoreContext ctx, WorkspaceJson json, Guid?localIdHint = null, WorkspaceData mergeBase = null) { var log = ServiceContainer.Resolve <Logger> (); var data = GetByRemoteId <WorkspaceData> (ctx, json.Id.Value, localIdHint); var merger = mergeBase != null ? new WorkspaceMerger(mergeBase) : null; if (merger != null && data != null) { merger.Add(new WorkspaceData(data)); } if (json.DeletedAt.HasValue) { if (data != null) { log.Info(Tag, "Deleting local data for {0}.", data.ToIdString()); ctx.Delete(data); data = null; } } else if (merger != null || ShouldOverwrite(data, json)) { data = data ?? new WorkspaceData(); ImportJson(data, json); if (merger != null) { merger.Add(data); data = merger.Result; } if (merger != null) { log.Info(Tag, "Importing {0}, merging with local data.", data.ToIdString()); } else { log.Info(Tag, "Importing {0}, replacing local data.", data.ToIdString()); } data = ctx.Put(data); } else { log.Info(Tag, "Skipping import of {0}.", json.ToIdString()); } return(data); }
private static void ImportJson (WorkspaceData data, WorkspaceJson json) { data.Name = json.Name; data.IsPremium = json.IsPremium; data.DefaultRate = json.DefaultRate; data.DefaultCurrency = json.DefaultCurrency; data.ProjectCreationPrivileges = json.OnlyAdminsMayCreateProjects ? AccessLevel.Admin : AccessLevel.Regular; data.BillableRatesVisibility = json.OnlyAdminsSeeBillableRates ? AccessLevel.Admin : AccessLevel.Regular; data.RoundingMode = json.RoundingMode; data.RoundingPercision = json.RoundingPercision; data.LogoUrl = json.LogoUrl; ImportCommonJson (data, json); }
private static void ImportJson(WorkspaceData data, WorkspaceJson json) { data.Name = json.Name; data.IsPremium = json.IsPremium; data.DefaultRate = json.DefaultRate; data.DefaultCurrency = json.DefaultCurrency; data.ProjectCreationPrivileges = json.OnlyAdminsMayCreateProjects ? AccessLevel.Admin : AccessLevel.Regular; data.BillableRatesVisibility = json.OnlyAdminsSeeBillableRates ? AccessLevel.Admin : AccessLevel.Regular; data.RoundingMode = json.RoundingMode; data.RoundingPercision = json.RoundingPercision; data.LogoUrl = json.LogoUrl; ImportCommonJson(data, json); }
public WorkspaceData Import (IDataStoreContext ctx, WorkspaceJson json, Guid? localIdHint = null, bool forceUpdate = false) { var data = GetByRemoteId<WorkspaceData> (ctx, json.Id.Value, localIdHint); if (json.DeletedAt.HasValue) { if (data != null) { ctx.Delete (data); data = null; } } else if (data == null || forceUpdate || data.ModifiedAt < json.ModifiedAt) { data = data ?? new WorkspaceData (); Merge (data, json); data = ctx.Put (data); } return data; }
public void ImportNew() { RunAsync(async delegate { var workspaceJson = new WorkspaceJson() { Id = 1, Name = "Test", ModifiedAt = new DateTime(2014, 1, 2), }; var workspaceData = await DataStore.ExecuteInTransactionAsync(ctx => converter.Import(ctx, workspaceJson)); Assert.AreNotEqual(Guid.Empty, workspaceData.Id); Assert.AreEqual(1, workspaceData.RemoteId); Assert.AreEqual("Test", workspaceData.Name); Assert.AreEqual(new DateTime(2014, 1, 2), workspaceData.ModifiedAt); Assert.IsFalse(workspaceData.IsDirty); Assert.IsFalse(workspaceData.RemoteRejected); Assert.IsNull(workspaceData.DeletedAt); }); }
public void ImportUpdatedOverwriteNonDirtyLocal() { RunAsync(async delegate { var workspaceData = await DataStore.PutAsync(new WorkspaceData() { RemoteId = 1, Name = "", ModifiedAt = new DateTime(2014, 1, 2, 10, 0, 0, DateTimeKind.Utc), }); var workspaceJson = new WorkspaceJson() { Id = 1, Name = "Test", ModifiedAt = new DateTime(2014, 1, 2, 9, 59, 0, DateTimeKind.Utc).ToLocalTime(), // Remote modified is less than local }; workspaceData = await DataStore.ExecuteInTransactionAsync(ctx => converter.Import(ctx, workspaceJson)); Assert.AreEqual("Test", workspaceData.Name); Assert.AreEqual(new DateTime(2014, 1, 2, 9, 59, 0, DateTimeKind.Utc), workspaceData.ModifiedAt); }); }
public WorkspaceData Import (IDataStoreContext ctx, WorkspaceJson json, Guid? localIdHint = null, WorkspaceData mergeBase = null) { var log = ServiceContainer.Resolve<ILogger> (); var data = GetByRemoteId<WorkspaceData> (ctx, json.Id.Value, localIdHint); var merger = mergeBase != null ? new WorkspaceMerger (mergeBase) : null; if (merger != null && data != null) { merger.Add (new WorkspaceData (data)); } if (json.DeletedAt.HasValue) { if (data != null) { log.Info (Tag, "Deleting local data for {0}.", data.ToIdString ()); ctx.Delete (data); data = null; } } else if (merger != null || ShouldOverwrite (data, json)) { data = data ?? new WorkspaceData (); ImportJson (data, json); if (merger != null) { merger.Add (data); data = merger.Result; } if (merger != null) { log.Info (Tag, "Importing {0}, merging with local data.", data.ToIdString ()); } else { log.Info (Tag, "Importing {0}, replacing local data.", data.ToIdString ()); } data = ctx.Put (data); } else { log.Info (Tag, "Skipping import of {0}.", json.ToIdString ()); } return data; }
public void ImportPastDeleted() { RunAsync(async delegate { var workspaceData = await DataStore.PutAsync(new WorkspaceData() { RemoteId = 1, Name = "Test", ModifiedAt = new DateTime(2014, 1, 2), }); var workspaceJson = new WorkspaceJson() { Id = 1, DeletedAt = new DateTime(2014, 1, 1), }; var ret = await DataStore.ExecuteInTransactionAsync(ctx => converter.Import(ctx, workspaceJson)); Assert.IsNull(ret); var rows = await DataStore.Table <WorkspaceData> ().QueryAsync(m => m.Id == workspaceData.Id); Assert.That(rows, Has.Exactly(0).Count); }); }
public Task <WorkspaceJson> UpdateWorkspace(WorkspaceJson jsonObject) { var url = new Uri(v8Url, String.Format("workspaces/{0}", jsonObject.Id.Value.ToString())); return(UpdateObject(url, jsonObject)); }
public Task <WorkspaceJson> CreateWorkspace(WorkspaceJson jsonObject) { var url = new Uri(v8Url, "workspaces"); return(CreateObject(url, jsonObject)); }