public void When_it_changes_a_namespace_then_requests_OdataType_is_set_to_the_old_namespace() { var oldNamespace = _model.EntityContainer.Namespace; var namespacePrefix = Any.CSharpIdentifier(); var namespaceRename = Any.CSharpIdentifier(); var newNamespace = new OdcmNamespace(namespacePrefix + "." + namespaceRename); var namespaceMap = new Dictionary<string, string> { { oldNamespace.Name, namespaceRename } }; var proxy = GetProxyWithChangedNamespaces(namespacePrefix, namespaceMap); var @class = oldNamespace.Classes.OfType<OdcmEntityClass>().First(); var entityArtifacts = GetEntityArtifactsFromNewNamespace(@class, newNamespace, proxy, oldNamespace); using (var mockService = new MockService() ) { mockService .OnRequest(c => c.Request.Method == "POST" && c.Request.Path.Value == @class.GetDefaultEntitySetPath() && IsNamespaceReplaced(c.Request, oldNamespace.Name, newNamespace.Name)) .RespondWith( (c, b) => { c.Response.StatusCode = 201; c.Response.WithDefaultODataHeaders(); c.Response.WithODataEntityResponseBody(b, @class.GetDefaultEntitySetName(), null); }); var collection = mockService .CreateContainer(proxy.GetClass(newNamespace.Name, _model.EntityContainer.Name)) .GetPropertyValue<ReadOnlyQueryableSetBase>(entityArtifacts.Class.GetDefaultEntitySetName()); var instance = entityArtifacts.ConcreteType.Initialize(@class.GetSampleKeyArguments().ToArray()); var task = collection.InvokeMethod<Task>("Add" + @class.Name + "Async", args: new[] { instance, false }); task.Wait(); }
[Fact(Skip = "https://github.com/Microsoft/Vipr/issues/43")] public void When_it_changes_a_namespace_then_responses_odata_type_is_translated_to_new_namespace() { var oldNamespace = _model.EntityContainer.Namespace; var namespacePrefix = Any.CSharpIdentifier(); var namespaceRename = Any.CSharpIdentifier(); var newNamespace = new OdcmNamespace(namespacePrefix + "." + namespaceRename); var namespaceMap = new Dictionary<string, string> { { oldNamespace.Name, namespaceRename } }; var entityClasses = oldNamespace.Classes.OfType<OdcmEntityClass>().ToList(); var baseClass = entityClasses.Where(c => c.Base == null).RandomElement(); entityClasses.Remove(baseClass); baseClass.IsAbstract = true; var derivedClass = entityClasses.RandomElement(); entityClasses.Remove(derivedClass); derivedClass.Base = baseClass; entityClasses.RandomElement().Base = baseClass; var proxy = GetProxyWithChangedNamespaces(namespacePrefix, namespaceMap); var entityArtifacts = GetEntityArtifactsFromNewNamespace(derivedClass, newNamespace, proxy, oldNamespace); var responseObject = entityArtifacts.Class.GetSampleJObject(derivedClass.GetSampleKeyArguments().Concat(baseClass.GetSampleKeyArguments()).ToArray()); var responseOdataType = String.Format("#{0}.{1}", oldNamespace.Name, derivedClass.Name); var singletonPath = baseClass.GetDefaultSingletonPath(); using (var mockService = new MockService(true) ) { mockService .OnRequest(c => c.Request.Method == "GET" && c.Request.Path.Value == singletonPath) .RespondWith( (c, b) => { c.Response.StatusCode = 200; c.Response.WithDefaultODataHeaders(); c.Response.WithODataEntityResponseBody(mockService.GetBaseAddress(), baseClass.GetDefaultEntitySetName(), responseObject, new JProperty("@odata.type", new JValue(responseOdataType))); }); var fetcher = mockService .CreateContainer(proxy.GetClass(newNamespace.Name, _model.EntityContainer.Name)) .GetPropertyValue<RestShallowObjectFetcher>(baseClass.GetDefaultSingletonName()); var task = fetcher.ExecuteAsync(); var result = task.GetPropertyValue<EntityBase>("Result");