Ejemplo n.º 1
0
        public static OdcmServiceClass ServiceOdcmClass(OdcmNamespace odcmNamespace, Action <OdcmServiceClass> config = null)
        {
            var retVal = new OdcmServiceClass(Any.CSharpIdentifier(), odcmNamespace);

            var entities = odcmNamespace.Classes
                           .Where(c => c.Kind == OdcmClassKind.Entity);

            foreach (var entity in entities)
            {
                retVal.Properties.Add(new OdcmProperty(entity.Name)
                {
                    Class = retVal, Type = entity
                });

                retVal.Properties.Add(new OdcmProperty(entity.Name + "s")
                {
                    Class        = retVal,
                    Type         = entity,
                    IsCollection = true
                });
            }

            retVal.Methods.AddRange(Any.Sequence(s => Any.OdcmMethod()));

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Groups entity, complex and enum types to be printed
        /// </summary>
        /// <param name="odcmNamespace">Odcm Namespace</param>
        public TypeScriptNamespace(OdcmNamespace odcmNamespace)
        {
            NamespaceName = odcmNamespace.GetNamespaceName();
            Entities      = new List <OdcmEntityClass>();
            ComplexTypes  = new List <OdcmComplexClass>();
            Enums         = new List <OdcmEnum>();

            foreach (var type in odcmNamespace.Types)
            {
                switch (type)
                {
                case OdcmEntityClass e:
                    Entities.Add(e);
                    break;

                case OdcmComplexClass c:
                    if (c.CanonicalName().ToLowerInvariant() != "microsoft.graph.json")
                    {
                        ComplexTypes.Add(c);
                    }
                    break;

                case OdcmEnum e:
                    Enums.Add(e);
                    break;

                default:
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        public static OdcmClass EntityOdcmClass(OdcmNamespace odcmNamespace, Action <OdcmClass> config = null)
        {
            var retVal = new OdcmClass(Any.CSharpIdentifier(), odcmNamespace.Name, OdcmClassKind.Entity);

            retVal.Properties.AddRange(Any.Sequence(i => Any.PrimitiveOdcmProperty(p => p.Class = retVal)));

            retVal.Key.AddRange(retVal.Properties.RandomSubset(2).Select(p => p.Field));

            if (odcmNamespace.Classes.Any(c => c.Kind == OdcmClassKind.Complex))
            {
                retVal.Properties.AddRange(Any.Sequence(i => Any.OdcmProperty(p =>
                {
                    p.Class = retVal;
                    p.Type  = odcmNamespace.Classes.Where(c => c.Kind == OdcmClassKind.Complex).RandomElement();
                })));
            }

            if (config != null)
            {
                config(retVal);
            }

            retVal.Methods.AddRange(Any.Sequence(s => Any.OdcmMethod()));

            return(retVal);
        }
Ejemplo n.º 4
0
        public static OdcmNamespace OdcmNamespace(Action <OdcmNamespace> config = null)
        {
            var retVal = new OdcmNamespace(Any.CSharpIdentifier());

            retVal.Types.AddRange(Any.Sequence(s => Any.OdcmEnum()));

            retVal.Types.AddRange(Any.Sequence(s => Any.ComplexOdcmType(retVal)));

            var classes = Any.Sequence(s => Any.EntityOdcmClass(retVal)).ToArray();

            foreach (var @class in classes)
            {
                @class.Properties.AddRange(Any.Sequence(i => Any.OdcmProperty(p =>
                {
                    p.Class = @class;
                    p.Type  = classes.RandomElement();
                })));
            }

            classes[0].Base = classes[1];

            retVal.Types.AddRange(classes);

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 5
0
        private static void EntityOrMediaOdcmClass(OdcmNamespace odcmNamespace, Action <OdcmEntityClass> config, OdcmEntityClass retVal)
        {
            retVal.Properties.AddRange(Any.Sequence(i => Any.PrimitiveOdcmProperty(p => p.Class = retVal)));

            retVal.Key.AddRange(retVal.Properties.RandomSubset(2));

            if (odcmNamespace.Classes.Any(c => c.Kind == OdcmClassKind.Complex))
            {
                retVal.Properties.AddRange(Any.Sequence(i => Any.OdcmProperty(p =>
                {
                    p.Class = retVal;
                    p.Type  = odcmNamespace.Classes.Where(c => c.Kind == OdcmClassKind.Complex).RandomElement();
                })));
            }

            retVal.Properties.AddRange(Any.Sequence(i => Any.OdcmEntityProperty(retVal, p => { p.Class = retVal; })));

            retVal.Properties.AddRange(Any.Sequence(i => Any.OdcmEntityProperty(retVal, p =>
            {
                p.Class        = retVal;
                p.IsCollection = true;
            })));

            if (config != null)
            {
                config(retVal);
            }

            retVal.Methods.AddRange(Any.Sequence(s => Any.OdcmMethod()));
        }
Ejemplo n.º 6
0
 private void AddPrimitives()
 {
     foreach (var entry in PrimitiveTypes)
     {
         _odcmModel.AddType(new OdcmPrimitiveType(entry[1], OdcmNamespace.GetWellKnownNamespace(entry[0])));
     }
 }
Ejemplo n.º 7
0
 public static Namespace Map(OdcmNamespace odcmNamespace)
 {
     return(new Namespace(odcmNamespace.Name)
     {
         Enums = odcmNamespace.Enums.Select(Enum.Map)
     });
 }
Ejemplo n.º 8
0
        public void Namespace_Shouldnt_Contain_Whitespace_For_CSharp()
        {
            var testNamespace = new OdcmNamespace("Microsoft.OutlookServices");

            var namespaceName = TypeHelperCSharp.GetNamespaceName(testNamespace);

            Assert.AreEqual(namespaceName, "Microsoft.OutlookServices");
        }
Ejemplo n.º 9
0
        public Given_an_OdcmEnum()
        {
            _model = new OdcmModel(Any.ServiceMetadata());

            _namespace = Any.EmptyOdcmNamespace();

            _model.Namespaces.Add(_namespace);
        }
Ejemplo n.º 10
0
        public static OdcmEntityClass OdcmEntityClass(OdcmNamespace odcmNamespace, string name, Action <OdcmEntityClass> config = null)
        {
            var retVal = new OdcmEntityClass(name, odcmNamespace);

            EntityOrMediaOdcmClass(odcmNamespace, config, retVal);

            return(retVal);
        }
Ejemplo n.º 11
0
        public static OdcmMediaClass MediaOdcmClass(OdcmNamespace odcmNamespace, Action <OdcmEntityClass> config = null)
        {
            var retVal = new OdcmMediaClass(Any.CSharpIdentifier(), odcmNamespace);

            EntityOrMediaOdcmClass(odcmNamespace, config, retVal);

            return(retVal);
        }
Ejemplo n.º 12
0
        public void Namespace_Should_PascalCase_For_CSharp()
        {
            var testNamespace = new OdcmNamespace("microsoft.graph");

            var namespaceName = TypeHelperCSharp.GetNamespaceName(testNamespace);

            Assert.AreEqual(namespaceName, "Microsoft.Graph");
        }
Ejemplo n.º 13
0
        public void ProcessNamespace(OdcmNamespace odcmNamespace)
        {
            _currentNamespace = odcmNamespace;


#line default
#line hidden

#line 84 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write("\r\nnamespace ");


#line default
#line hidden

#line 86 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(odcmNamespace.Name));


#line default
#line hidden

#line 86 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write("\r\n{\r\n");


#line default
#line hidden

#line 88 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"

            var odcmEnums = from odcmType in odcmNamespace.Types where odcmType is OdcmEnum select odcmType;

            foreach (OdcmEnum odcmEnum in odcmEnums)
            {
                ProcessEnum(odcmEnum);
            }

            var odcmClasses = from odcmType in odcmNamespace.Types where odcmType is OdcmClass select odcmType;

            foreach (OdcmClass odcmClass in odcmClasses)
            {
                ProcessClass(odcmClass);
            }


#line default
#line hidden

#line 102 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
            this.Write("}\r\n");

#line default
#line hidden

#line 104 "E:\gittf\Roxel\O365\Public\src\EdmDecomposition\EdmDecomposition\ODataWriter.tt"
        }
Ejemplo n.º 14
0
        public void Init()
        {
            _model = new OdcmModel();

            _namespace = Any.OdcmNamespace();

            _model.Namespaces.Add(_namespace);

            _class = Any.OdcmClass(e => e.Namespace = _namespace.Name);
        }
Ejemplo n.º 15
0
        public void Init()
        {
            _model = new OdcmModel();

            _namespace = Any.OdcmNamespace();

            _model.Namespaces.Add(_namespace);

            _class = new OdcmClass(Any.CSharpIdentifier(), _namespace.Name, OdcmClassKind.Entity);
        }
Ejemplo n.º 16
0
        public void Init(Action <OdcmModel> config = null, bool generateMocks = false)
        {
            Model = new OdcmModel(Any.ServiceMetadata());

            Namespace = Any.EmptyOdcmNamespace();

            Model.Namespaces.Add(Namespace);

            Class = Any.OdcmEntityClass(Namespace);

            Model.AddType(Class);

            OdcmContainer = Any.ServiceOdcmClass(Namespace);

            Model.AddType(OdcmContainer);

            if (config != null)
            {
                config(Model);
            }

            Model.ServiceMetadata["$metadata"] = Model.ToEdmx(true);

            Proxy = GetProxy(Model, ConfigurationProvider, generateMocks ? new[] { "DynamicProxyGenAssembly2" } : null);

            ConcreteType = Proxy.GetClass(Class.Namespace, Class.Name);

            ConcreteInterface = Proxy.GetInterface(Class.Namespace, "I" + Class.Name);

            FetcherType = Proxy.GetClass(Class.Namespace, Class.Name + "Fetcher");

            var identifier = NamesService.GetFetcherInterfaceName(Class);

            FetcherInterface = Proxy.GetInterface(Class.Namespace, identifier.Name);

            CollectionType = Proxy.GetClass(Class.Namespace, Class.Name + "Collection");

            identifier          = NamesService.GetCollectionInterfaceName(Class);
            CollectionInterface = Proxy.GetInterface(Class.Namespace, identifier.Name);

            EntityContainerType = Proxy.GetClass(Model.EntityContainer.Namespace, Model.EntityContainer.Name);

            EntityContainerInterface = Proxy.GetInterface(Model.EntityContainer.Namespace, "I" + Model.EntityContainer.Name);

            TargetEntity = new EntityArtifacts()
            {
                Class               = Class,
                ConcreteType        = ConcreteType,
                ConcreteInterface   = ConcreteInterface,
                FetcherType         = FetcherType,
                FetcherInterface    = FetcherInterface,
                CollectionType      = CollectionType,
                CollectionInterface = CollectionInterface
            };
        }
Ejemplo n.º 17
0
 public Namespace(OdcmNamespace @namespace, OdcmModel model)
 {
     Name = NamesService.GetNamespaceName(@namespace);
     //Features = @namespace.Enums.SelectMany(global::Vipr.Writer.CSharp.Features.ForOdcmEnum)
     //    .Concat(@namespace.Classes.SelectMany(global::Vipr.Writer.CSharp.Features.ForOdcmClass))
     //    .Concat(@namespace.Classes.SelectMany(c => global::Vipr.Writer.CSharp.Features.ForEntityContainer(c, model)));
     Features = @namespace.Enums.SelectMany(global::Vipr.Writer.CSharp.Features.ForOdcmEnum)
                .Concat(@namespace.Classes.OfType <OdcmComplexClass>().SelectMany(global::Vipr.Writer.CSharp.Features.ForOdcmClass))
                .Concat(@namespace.Classes.OfType <OdcmEntityClass>().SelectMany(global::Vipr.Writer.CSharp.Features.ForOdcmClass))
                .Concat(@namespace.Classes.OfType <OdcmServiceClass>().SelectMany(c => global::Vipr.Writer.CSharp.Features.ForEntityContainer(c, model)));
 }
Ejemplo n.º 18
0
        public static OdcmNamespace EmptyOdcmNamespace(Action <OdcmNamespace> config = null)
        {
            var retVal = new OdcmNamespace(Any.CSharpIdentifier());

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 19
0
        private void Write(OdcmNamespace @namespace)
        {
            _("namespace {0}", NamesService.GetNamespaceName(@namespace));
            using (_builder.IndentBraced)
            {
                Write(_dependencies);

                Write(@namespace.Enums);

                Write(@namespace.Classes);
            }
        }
Ejemplo n.º 20
0
        private static OdcmClass ComplexOdcmType(OdcmNamespace odcmNamespace, Action <OdcmClass> config = null)
        {
            var retVal = new OdcmClass(Any.CSharpIdentifier(), odcmNamespace.Name, OdcmClassKind.Complex);

            retVal.Properties.AddRange(Any.Sequence(i => Any.PrimitiveOdcmProperty(p => p.Class = retVal)));

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 21
0
        public void When_the_model_has_a_namespace_called_Edm_it_is_ignored()
        {
            var @namespace = new OdcmNamespace("EDM");

            _model.Namespaces.Add(@namespace);

            _model.AddType(Any.OdcmEnum(e => e.Namespace = OdcmNamespace.Edm));

            var proxy = GetProxy(_model);

            proxy.GetNamespaces()
            .Should().BeEquivalentTo(new object[] { });
        }
Ejemplo n.º 22
0
        public static string ToEdmx(this OdcmNamespace odcmNamespace)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("<Schema Namespace=\"{0}\" xmlns=\"http://docs.oasis-open.org/odata/ns/edm\">", odcmNamespace.Name);
            if (odcmNamespace.Classes.Any())
            {
                sb.Append(odcmNamespace.Classes.Select(ToEdmx).Aggregate((c, n) => c + "\n" + n));
            }
            sb.AppendFormat("</Schema>");

            return(sb.ToString());
        }
Ejemplo n.º 23
0
        public static object ComplexOdcmField(OdcmNamespace odcmNamespace, Action <OdcmField> config = null)
        {
            var retVal = new OdcmField(Any.CSharpIdentifier())
            {
                Type = Any.ComplexOdcmType(odcmNamespace)
            };

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 24
0
 private void AddPrimitives()
 {
     foreach (var entry in PrimitiveTypes)
     {
         try
         {
             _odcmModel.AddType(new OdcmPrimitiveType(entry[1], OdcmNamespace.GetWellKnownNamespace(entry[0])));
         }
         catch (Exception e)
         {
             Logger.Error(e, e.Message);
         }
     }
 }
Ejemplo n.º 25
0
        public static OdcmProperty ComplexOdcmProperty(OdcmNamespace odcmNamespace, Action <OdcmProperty> config = null)
        {
            var retVal = new OdcmProperty(Any.CSharpIdentifier())
            {
                Type = Any.ComplexOdcmType(odcmNamespace)
            };

            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
Ejemplo n.º 26
0
        public Given_a_nullable_Primitive_OdcmProperty()
        {
            _model = new OdcmModel(Any.ServiceMetadata());

            _namespace = Any.EmptyOdcmNamespace();

            _model.Namespaces.Add(_namespace);

            _class = Any.EntityOdcmClass(_namespace);

            _property = Any.PrimitiveOdcmProperty(p => p.IsNullable = true);

            _class.Properties.Add(_property);

            _model.AddType(_class);
        }
Ejemplo n.º 27
0
        public static OdcmProperty ComplexOdcmProperty(OdcmNamespace odcmNamespace, Action <OdcmProperty> config = null)
        {
            var projection = Any.ComplexOdcmClass(odcmNamespace).DefaultProjection;
            var retVal     = new OdcmProperty(Any.CSharpIdentifier())
            {
                Projection = projection
            };


            if (config != null)
            {
                config(retVal);
            }

            return(retVal);
        }
        public Given_an_OdcmClass_Complex()
        {
            _model = new OdcmModel(Any.ServiceMetadata());

            _namespace = Any.EmptyOdcmNamespace();

            _model.Namespaces.Add(_namespace);

            _class = Any.OdcmClass(e => e.Namespace = _namespace.Name);

            _model.AddType(_class);

            _proxy = GetProxy(_model);

            _classType = _proxy.GetClass(_class.Namespace, _class.Name);
        }
Ejemplo n.º 29
0
        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();
            }
        }
Ejemplo n.º 30
0
        public Given_an_OdcmParameter()
        {
            _model = new OdcmModel(Any.ServiceMetadata());

            _namespace = Any.EmptyOdcmNamespace();
            _model.Namespaces.Add(_namespace);

            _class = Any.OdcmEntityClass(_namespace);
            _model.AddType(_class);

            _method = Any.OdcmMethod(m => m.Parameters.Clear());
            _class.Methods.Add(_method);

            _param = Any.OdcmParameter();
            _method.Parameters.Add(_param);

            _expectedMethodName = _method.Name + "Async";
        }
Ejemplo n.º 31
0
 public OdcmComplexClass(string name, OdcmNamespace @namespace) :
     base(name, @namespace, OdcmClassKind.Complex)
 {
 }
Ejemplo n.º 32
0
 public OdcmServiceClass(string name, OdcmNamespace @namespace)
     : base(name, @namespace, OdcmClassKind.Service)
 {
 }
Ejemplo n.º 33
0
 public OdcmMediaClass(string name, OdcmNamespace @namespace)
     : base(name, @namespace, OdcmClassKind.MediaEntity)
 {
 }
Ejemplo n.º 34
0
 protected OdcmType(string name, OdcmNamespace @namespace)
     : base(name)
 {
     Namespace = @namespace;
 }
Ejemplo n.º 35
0
 public OdcmPrimitiveType(string name, OdcmNamespace @namespace)
     : base(name, @namespace)
 {
 }