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; } } } }