private async Task _HttpClientDynamic_1_Test() { var testCfg = TestCfg.Get(); var baseurl = testCfg.ProjectServer.Url; var suffix = "_api/ProjectData/$metadata"; var url = baseurl + suffix; var cred = new SharePointOnlineServiceClientCredentials(testCfg.ProjectServer.User, testCfg.ProjectServer.Password, null); var client = new HttpClientDynamic(new Uri(baseurl), cred, null); var request = client.CreateHttpRequestMessage(HttpMethod.Get, suffix, null, null, null); var metadata = (await client.SendAsync <string>("metadata", request, async delegate(AzureOperationResponse <string> r) { r.Body = await r.Response.Content.ReadAsStringAsync().ConfigureAwait(false); }, CancellationToken.None)).Body; Assert.StartsWith("<?xml version=\"1.0\" encoding=\"utf-8\"?><edmx:Edmx Version=\"1.0\"", metadata); }
public virtual IHttpServiceClient GetHttpServiceClient() { var result = this._ServiceClient; if (result == null) { lock (this) { result = this._ServiceClient; if (result == null) { var baseUri = new Uri(this.ConnectionString.GetUrlNormalized()); #warning TODO ServiceClientCredentialsFactory ServiceClientCredentials credentials = new SharePointOnlineServiceClientCredentials(this.ConnectionString, null); result = new ODataServiceClient(baseUri, credentials, null); this._ServiceClient = result; } } } return(result); }
private async Task _ODataClient_1_ReadFromPO_Test() { var testCfg = OfaSchlupfer.TestCfg.Get(); var repCSProjectServer = testCfg.ProjectServer.CreateWithSuffix("/_api/ProjectData/[en-us]"); repCSProjectServer.AuthenticationMode = "SPOIDCRL"; var srcPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\ProjectOnlinemetadata.xml"); IServiceCollection services = new ServiceCollection(); services.AddLogging((builder) => { builder.AddDebug(); }); services.AddServiceClientCredentials((builder) => { }); services.AddOfaSchlupferModel(); services.AddOfaSchlupferEntity(); services.AddOfaSchlupferODataRepository(); //services.AddHttpClient((builder) => { }); var serviceProvider = services.BuildServiceProvider(); //var modelRoot = new ModelRoot(); using (var scope = serviceProvider.CreateScope()) { var scopedServiceProvider = scope.ServiceProvider; var modelRoot = scopedServiceProvider.GetRequiredService <ModelRoot>(); var modelRepository = modelRoot.CreateRepository("PS", "OData"); var modelDefinition = modelRepository.CreateModelDefinition("OData"); modelDefinition.MetaData = System.IO.File.ReadAllText(srcPath); modelRepository.ModelDefinition = modelDefinition; var referenceRepositoryModel = modelRepository.GetReferenceRepositoryModel(); Assert.NotNull(referenceRepositoryModel); if (modelRepository.GetModelSchema(null, null) is null) { //modelRepository.x(); } var cachedMetadataResolver = new CachedMetadataResolver(); cachedMetadataResolver.SetDynamicResolution((location) => new System.IO.StreamReader(location)); var edmReader = new EdmReader { MetadataResolver = cachedMetadataResolver }; var edmxModel = edmReader.Read(srcPath, true, null); EdmxModelSchemaBuilder edmxModelBuilder = new EdmxModelSchemaBuilder(); var modelSchema = edmxModelBuilder.Build(edmxModel, null, null, null); modelRepository.ModelSchema = modelSchema; //var oDataClient = new ODataClient(clientFactory, serviceProvider); //oDataClient.EdmxModel = edmxModel; var cred = new SharePointOnlineServiceClientCredentials(repCSProjectServer, null); var oDataClient = new ODataServiceClient(new Uri(repCSProjectServer.GetUrlNormalized()), cred, null) { ModelRepository = modelRepository }; //var builder = new ModelBuilder(); //oDataClient.EdmxModel = edmxModel; var oDataRequest = oDataClient.Query("Projects"); // oDataClient.ConnectionString = repCSProjectServer; // oDataClient.SetConnectionString(repCSProjectServer, "/_api/ProjectData/[en-us]"); var t = oDataClient.SendAsync <string>("Projects", oDataRequest, async(aor, dr) => { string responseContent = await aor.Response.Content.ReadAsStringAsync(); aor.Body = responseContent; }, CancellationToken.None); var oDataResponce = await t; Assert.NotNull(oDataResponce); Assert.NotNull(oDataResponce.Body); Assert.StartsWith("{\"d\"", oDataResponce.Body); //var httpClient = clientFactory.CreateHttpClient(repCSProjectServer) #warning murks handle in oDataResponce var responceContentString = oDataResponce.Body; ODataDeserializtion d = new ODataDeserializtion(oDataRequest, oDataClient); var deserializeResult = d.Deserialize(responceContentString); Assert.NotNull(deserializeResult); Assert.IsType <List <IEntity> >(deserializeResult); var lstEntity = deserializeResult as List <IEntity>; Assert.Equal(60, lstEntity.Count); Assert.NotNull(modelRepository.ModelSchema); EntitySchema entitySchema = modelRepository.ModelSchema.GetEntitySchema(); Assert.NotNull(entitySchema); { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings(); serializeSettings.Converters.Add(new EntityJsonConverter()); var rejson = Newtonsoft.Json.JsonConvert.SerializeObject(lstEntity, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_1_ReadFromPO_Test_Data.json"); System.IO.File.WriteAllText(outputPath, rejson); } catch { throw; } // var entitySchema = new EntitySchema(null); // entitySchema.Add(null, lstEntity[0].MetaData); var deserializeSettings = new Newtonsoft.Json.JsonSerializerSettings(); deserializeSettings.Converters.Add(new EntityJsonConverter(entitySchema)); var reDeserializeResult = Newtonsoft.Json.JsonConvert.DeserializeObject <List <IEntity> >(rejson, deserializeSettings); Assert.NotNull(reDeserializeResult); Assert.IsType <List <IEntity> >(reDeserializeResult); } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects }; var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(modelRepository.ModelSchema, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_1_ReadFromPO_Test_ModelSchema.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch { throw; } } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto }; var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(entitySchema, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_1_ReadFromPO_Test_EntitySchema.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch { throw; } } } }
public void ODataClient_2_Translate_Test() { var testCfg = OfaSchlupfer.TestCfg.Get(); var repCSProjectServer = testCfg.ProjectServer.CreateWithSuffix("/_api/ProjectData/[en-us]"); repCSProjectServer.AuthenticationMode = "SPOIDCRL"; IServiceCollection services = new ServiceCollection(); services.AddLogging((builder) => { builder.AddDebug(); }); services.AddServiceClientCredentials((builder) => { }); //services.AddHttpClient((builder) => { }); services.AddOfaSchlupferModel(); services.AddOfaSchlupferEntity(); var serviceProvider = services.BuildServiceProvider(); var srcPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\ProjectOnlinemetadata.xml"); var cachedMetadataResolver = new CachedMetadataResolver(); cachedMetadataResolver.SetDynamicResolution((location) => new System.IO.StreamReader(location)); var edmReader = new EdmReader { MetadataResolver = cachedMetadataResolver }; var edmxModel = edmReader.Read(srcPath, true, null); using (var scope = serviceProvider.CreateScope()) { var scopedServiceProvider = scope.ServiceProvider; var modelRoot = scopedServiceProvider.GetRequiredService <ModelRoot>(); var modelRepository = modelRoot.CreateRepository("ProjectServer", "OData"); var oDataRepository = new ODataRepositoryImplementation(); modelRepository.ReferencedRepositoryModel = oDataRepository; oDataRepository.EdmxModel = edmxModel; Assert.NotNull(modelRepository.GetModelSchema(null, null)); var cred = new SharePointOnlineServiceClientCredentials(repCSProjectServer, null); var oDataClient = new ODataServiceClient(new Uri(repCSProjectServer.GetUrlNormalized()), cred, null) { ModelRepository = modelRepository }; var oDataRequest = oDataClient.Query("Projects"); // oDataClient.ConnectionString = repCSProjectServer; // oDataClient.SetConnectionString(repCSProjectServer, "/_api/ProjectData/[en-us]"); var srcPathData = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\ProjectOnlineData-Projects.json"); var responceContentString = System.IO.File.ReadAllText(srcPathData); var operationResponse = new AzureOperationResponse <ODataRequest> { Request = new System.Net.Http.HttpRequestMessage(), Response = new System.Net.Http.HttpResponseMessage() { Content = new System.Net.Http.StringContent(responceContentString) } }; ODataDeserializtion d = new ODataDeserializtion(oDataRequest, oDataClient); var deserializeResult = d.Deserialize(responceContentString); Assert.NotNull(deserializeResult); Assert.IsType <List <IEntity> >(deserializeResult); var lstEntity = deserializeResult as List <IEntity>; Assert.Equal(60, lstEntity.Count); Assert.NotNull(modelRepository.ModelSchema); EntitySchema entitySchema = modelRepository.ModelSchema.GetEntitySchema(); Assert.NotNull(entitySchema); { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings(); serializeSettings.Converters.Add(new EntityJsonConverter()); var rejson = Newtonsoft.Json.JsonConvert.SerializeObject(lstEntity, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_2_Translate_Test_Data.json"); System.IO.File.WriteAllText(outputPath, rejson); } catch { throw; } // var entitySchema = new EntitySchema(null); // entitySchema.Add(null, lstEntity[0].MetaData); var deserializeSettings = new Newtonsoft.Json.JsonSerializerSettings(); deserializeSettings.Converters.Add(new EntityJsonConverter(entitySchema)); var reDeserializeResult = Newtonsoft.Json.JsonConvert.DeserializeObject <List <IEntity> >(rejson, deserializeSettings); Assert.NotNull(reDeserializeResult); Assert.IsType <List <IEntity> >(reDeserializeResult); } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects }; var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(modelRepository.ModelSchema, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_2_Translate_Test_ModelSchema.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch { throw; } } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto }; var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(entitySchema, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\ODataClient_2_Translate_Test_EntitySchema.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch { throw; } } } }
public void Mapping_OData_SQL_ProjectOnlinemetadata_Test() { var testCfg = OfaSchlupfer.TestCfg.Get(); var repCSProjectServer = testCfg.ProjectServer.CreateWithSuffix("/_api/ProjectData/[en-us]"); repCSProjectServer.AuthenticationMode = "SPOIDCRL"; var srcPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\ProjectOnlinemetadata.xml"); IServiceCollection services = new ServiceCollection(); services.AddLogging((builder) => { builder.AddDebug(); }); services.AddOfaSchlupferModel(); services.AddOfaSchlupferEntity(); services.AddOfaSchlupferODataRepository(); services.AddSqlRepository(); services.AddServiceClientCredentials((builder) => { }); //services.AddHttpClient((builder) => { }); var serviceProvider = services.BuildServiceProvider(); using (var scope = serviceProvider.CreateScope()) { var scopedServiceProvider = scope.ServiceProvider; var modelRoot = scopedServiceProvider.GetRequiredService <ModelRoot>(); var modelRepositorySource = modelRoot.CreateRepository("Source", "OData"); var modelDefininition = modelRepositorySource.CreateModelDefinition(null); Assert.Same(modelDefininition, modelRepositorySource.ModelDefinition); modelDefininition.MetaData = System.IO.File.ReadAllText(srcPath); var oDataRepositorySource = (ODataRepositoryImplementation)modelRepositorySource.GetReferenceRepositoryModel(); Assert.NotNull(oDataRepositorySource); Assert.Same(modelRepositorySource, oDataRepositorySource.Owner); Assert.NotNull(oDataRepositorySource.GetEdmxModel()); var modelSchemaSource = modelRepositorySource.GetModelSchema(null, null); Assert.NotNull(modelSchemaSource); EntitySchema entitySchema = modelRepositorySource.ModelSchema.GetEntitySchema(); Assert.NotNull(entitySchema); var modelRepositoryTarget = modelRoot.CreateRepository("Target", "SQL"); var sqlRepositoryTarget = (SqlRepositoryImplementation)modelRepositoryTarget.GetReferenceRepositoryModel(); sqlRepositoryTarget.ConnectionString = testCfg.SQLConnectionString; Assert.NotNull(sqlRepositoryTarget); { var metaModelBuilder = new MetaModelBuilder(); var errors = new ModelErrors(); var modelSchemaTarget = modelRepositoryTarget.GetModelSchema(metaModelBuilder, errors); Assert.NotNull(modelSchemaTarget); if (errors.HasErrors()) { this.output.WriteLine(errors.ToString()); } Assert.False(errors.HasErrors()); Assert.True(sqlRepositoryTarget.ModelDatabase.Tables.Count > 0); foreach (var table in sqlRepositoryTarget.ModelDatabase.Tables) { Assert.True(table.Columns.Count > 0); } Assert.NotNull(modelSchemaTarget); Assert.True(modelSchemaTarget.Entities.Count > 0); Assert.True(modelSchemaTarget.ComplexTypes.Count > 0); foreach (var modelEntityTarget in modelRepositoryTarget.ModelSchema.Entities) { Assert.NotNull(modelEntityTarget.EntityTypeName); Assert.NotNull(modelEntityTarget.EntityType); } foreach (var modelComplexTypesTarget in modelRepositoryTarget.ModelSchema.ComplexTypes) { if (modelComplexTypesTarget.Properties.Count == 0) { var message = $"{modelComplexTypesTarget.Name} has no properties."; this.output.WriteLine(message); Assert.Equal("Error", message); } if (modelComplexTypesTarget.Indexes.Count == 0) { var message = $"{modelComplexTypesTarget.Name} has no indexes."; this.output.WriteLine(message); Assert.Equal("Error", message); } } } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects }; serializeSettings.Converters.Add(new OfaSchlupfer.MSSQLReflection.Model.SqlNameJsonConverter()); //serializeSettings.Converters.Add(new OfaSchlupfer.MSSQLReflection.Model.ModelSqlTableJsonConverter()); //serializeSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); //serializeSettings.TraceWriter = new XunitTraceWriter(output); try { var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(sqlRepositoryTarget.ModelDatabase, Newtonsoft.Json.Formatting.Indented, serializeSettings); string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\Mapping_OData_SQL_ProjectOnlinemetadata_Test-target-ModelDatabase-Before.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch (Exception error) { this.output.WriteLine(error.ToString()); throw; } } { var mappingModelRepositorySourceTarget = modelRoot.CreateMapping("SourceTarget", modelRepositorySource, modelRepositoryTarget); var mappingModelSchema = mappingModelRepositorySourceTarget.CreateMappingModelSchema("SourceTarget", modelRepositorySource.ModelSchema, modelRepositoryTarget.ModelSchema, true, false, ""); var mappingModelBuilder = new MappingModelBuilder { MappingModelRepository = mappingModelRepositorySourceTarget }; var errors = new ModelErrors(); mappingModelBuilder.EnabledForCreatedMappings = true; mappingModelBuilder.Comment = "Mapping_OData_SQL_ProjectOnlinemetadata_Test"; mappingModelBuilder.Build(errors); if (errors.HasErrors()) { this.output.WriteLine(errors.ToString()); } Assert.False(errors.HasErrors()); foreach (var modelEntityTarget in modelRepositoryTarget.ModelSchema.Entities) { Assert.NotNull(modelEntityTarget.EntityTypeName); Assert.NotNull(modelEntityTarget.EntityType); } foreach (var modelComplexTypesTarget in modelRepositoryTarget.ModelSchema.ComplexTypes) { if (modelComplexTypesTarget.Properties.Count == 0) { var message = $"{modelComplexTypesTarget.Name} has no properties"; this.output.WriteLine(message); Assert.Equal("Error", message); } } } { #warning HEEEEEEEEEEEEEEERE var metaModelBuilder = new MetaModelBuilder(); var errors = new ModelErrors(); var sqlModelSchemaBuilder = new SqlModelSchemaBuilder(); sqlModelSchemaBuilder.BuildModelSqlDatabase( modelRepositoryTarget.ModelSchema, sqlRepositoryTarget.ModelDatabase, metaModelBuilder, errors ); if (errors.HasErrors()) { this.output.WriteLine(errors.ToString()); } Assert.False(errors.HasErrors()); } var cred = new SharePointOnlineServiceClientCredentials(repCSProjectServer, null); var oDataClient = new ODataServiceClient(new Uri(repCSProjectServer.GetUrlNormalized()), cred, null) { ModelRepository = modelRepositorySource }; var oDataRequest = oDataClient.Query("Projects"); // oDataClient.ConnectionString = repCSProjectServer; // oDataClient.SetConnectionString(repCSProjectServer, "/_api/ProjectData/[en-us]"); var srcPathData = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\ProjectOnlineData-Projects.json"); var responceContentString = System.IO.File.ReadAllText(srcPathData); var operationResponse = new AzureOperationResponse <ODataRequest> { Request = new System.Net.Http.HttpRequestMessage(), Response = new System.Net.Http.HttpResponseMessage() { Content = new System.Net.Http.StringContent(responceContentString) } }; ODataDeserializtion d = new ODataDeserializtion(oDataRequest, oDataClient); var deserializeResult = d.Deserialize(responceContentString); Assert.NotNull(deserializeResult); Assert.IsType <List <IEntity> >(deserializeResult); var lstEntity = deserializeResult as List <IEntity>; Assert.Equal(60, lstEntity.Count); { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto }; var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(modelRoot, Newtonsoft.Json.Formatting.Indented, serializeSettings); try { string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\Mapping_OData_SQL_ProjectOnlinemetadata_Test-root.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch { throw; } } { var serializeSettings = new Newtonsoft.Json.JsonSerializerSettings { TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects }; serializeSettings.Converters.Add(new OfaSchlupfer.MSSQLReflection.Model.SqlNameJsonConverter()); //serializeSettings.Converters.Add(new OfaSchlupfer.MSSQLReflection.Model.ModelSqlTableJsonConverter()); //serializeSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); //serializeSettings.TraceWriter = new XunitTraceWriter(output); try { var schemaAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(sqlRepositoryTarget.ModelDatabase, Newtonsoft.Json.Formatting.Indented, serializeSettings); string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\Mapping_OData_SQL_ProjectOnlinemetadata_Test-target-ModelDatabase-After.json"); System.IO.File.WriteAllText(outputPath, schemaAsJson); } catch (Exception error) { this.output.WriteLine(error.ToString()); throw; } } { var errors = new ModelErrors(); //sqlRepositoryTarget.UpdateTargetSchema(errors); var sqlScript = new StringBuilder(); sqlRepositoryTarget.GenerateUpdateSchemaSQL(errors, (name, sql) => { sqlScript.Append($"-- start{name}\r\n{sql}\r\nGO\r\n-- endof:{name}\r\n\r\n"); }); if (errors.HasErrors()) { this.output.WriteLine(errors.ToString()); } Assert.False(errors.HasErrors()); string outputPath = System.IO.Path.Combine(testCfg.SolutionFolder, @"test\temp\Mapping_OData_SQL_ProjectOnlinemetadata_Test.sql"); System.IO.File.WriteAllText(outputPath, sqlScript.ToString()); } } }