Example #1
0
        public void Case3()
        {
            var comments = new List <Comment>()
            {
                new Comment()
                {
                    id = 1, body = "comment 1"
                },
                new Comment()
                {
                    id = 2, body = "comment 2"
                }
            };

            JsonApiParser parser = this.GetParser(comments);
            var           json   = (JObject)parser.GetJson();


            Assert.Equal(json["data"][0]["type"].ToString(), "comment");
            Assert.Equal(json["data"][0]["id"].ToString(), "1");
            Assert.Equal(json["data"][0]["attributes"]["body"].ToString(), "comment 1");
            Assert.Equal(json["data"][1]["id"].ToString(), "2");
            Assert.Equal(json["data"][1]["attributes"]["body"].ToString(), "comment 2");

            var list  = new List <Comment>();
            var model = (List <Comment>) new JsonApiReader(json.ToString(), list).GetModel();

            Assert.Equal(model[0].id, 1);
            Assert.Equal(model[0].body, "comment 1");
            Assert.Equal(model[1].id, 2);
            Assert.Equal(model[1].body, "comment 2");
        }
Example #2
0
        public void Case12()
        {
            var a = new Biblio()
            {
                identidiant = 4, nom = "biliotheque", int_article = new Article {
                    Id = 4, body = "body"
                }, article_comment = new Article {
                    body = "convertible2"
                }
            };

            a.list_person = new PersonModel {
                Name = "Franck", Password = "******"
            };
            JsonApiParser parser = this.GetParser(a);

            parser.AddIncludeQuery("article_comment");
            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"]["id"], 4);
            Assert.Equal(json["data"]["type"], "bibi");
            Assert.Equal(json["data"]["attributes"]["name"], "biliotheque");
            Assert.Equal(json["data"]["relationships"]["article_comment"]["data"]["type"], "article");
            Assert.Equal(json["included"][0]["type"], "article");
            Assert.Equal(json["included"][0]["attributes"]["body"], "convertible2");

            var biblioModel = new Biblio();
            var model       = (Biblio) new JsonApiReader(json.ToString(), biblioModel).GetModel();

            Assert.Equal(model.identidiant, 4);
            Assert.Equal(model.nom, "biliotheque");
        }
Example #3
0
        public void Case13()
        {
            var a = new Article()
            {
                IdJson = 1, title = "titre", body = "body"
            };

            a.author = new PersonModel()
            {
                Id = 1, Name = "Franck", Parent = new PersonModel()
                {
                    Id = 55, Name = "Parent Included"
                }
            };
            JsonApiParser parser       = this.GetParser(a);
            var           json         = (JObject)parser.GetJson();
            var           articlemodel = new Article();

            json["data"]["attributes"] = (JToken.Parse(@"{ ""bad_property"" : ""value""}"));
            Assert.Throws <JsonApiException>(() => (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel());

            json = (JObject)parser.GetJson();
            json["data"]["relationships"] = (JToken.Parse(@"{ ""bad_relationship"" : {} }"));
            Assert.Throws <InvalidPropertyException>(() => (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel());

            json = (JObject)parser.GetJson();
            json["data"]["type"] = "faketype";
            Assert.Throws <InvalidPropertyException>(() => (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel());
        }
Example #4
0
        public void Case8()
        {
            var a = new Article()
            {
                IdJson = 1, title = "titre", body = "body"
            };
            JsonApiParser parser = this.GetParser(a);

            parser.AddMeta("metaString", "test");
            parser.AddMeta("metaInt", 1);
            parser.AddMeta("metaList", new List <string>()
            {
                "chaine1", "chaine2", "chaine3"
            });
            parser.AddMeta("article", a);
            parser.AddMeta("listarticle", new List <Article>()
            {
                a, a
            });

            var json = (JObject)parser.GetJson();

            Assert.Equal(json["meta"]["metaString"].ToString(), "test");
            Assert.Equal(json["meta"]["metaInt"].ToString(), "1");
            Assert.Equal(json["meta"]["metaList"].Type.ToString(), "Array");
            Assert.Equal(json["meta"]["metaList"][0].ToString(), "chaine1");
            Assert.Equal(json["meta"]["article"].Type.ToString(), "Object");
            Assert.Equal(json["meta"]["article"]["type"].ToString(), "article");
            Assert.Equal(json["meta"]["listarticle"].Type.ToString(), "Array");
            Assert.Equal(json["meta"]["listarticle"][0]["type"].ToString(), "article");
            Assert.Equal(json["meta"]["listarticle"][1]["type"].ToString(), "article");
        }
Example #5
0
        public void Case4()
        {
            var auteur = new PersonModel()
            {
                Id = 4, Name = "Auteur"
            };
            var comments = new List <Comment>()
            {
                new Comment()
                {
                    id = 1, body = "comment 1"
                },
                new Comment()
                {
                    id = 2, body = "comment 2"
                }
            };
            var article = new Article()
            {
                title = "titre article", body = "body artcicle", author = auteur, comments = comments
            };

            JsonApiParser parser = this.GetParser(article);

            parser.AddIncludeQuery("*");
            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"]["type"].ToString(), "article");
            Assert.Equal(json["data"]["id"].ToString(), "0_0");
            Assert.Equal(json["data"]["attributes"]["title"].ToString(), "titre article");
            Assert.Equal(json["data"]["attributes"]["body"].ToString(), "body artcicle");
            Assert.Equal(json["data"]["attributes"]["online"].ToString(), "False");

            Assert.Equal(json["data"]["relationships"]["author"]["data"]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"]["relationships"]["author"]["data"]["id"].ToString(), "4");

            Assert.Equal(json["data"]["relationships"]["comments"]["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][0]["type"].ToString(), "comment");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][0]["id"].ToString(), "1");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][1]["type"].ToString(), "comment");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][1]["id"].ToString(), "2");

            var articlemodel = new Article();
            var model        = (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel();

            Assert.Equal(model.Id, 0);
            Assert.Equal(model.title, "titre article");
            Assert.Equal(model.body, "body artcicle");
            Assert.Equal(model.author.Id, 4);
            Assert.Equal(model.comments.Count, 2);
            Assert.Equal(model.comments[0].id, 1);
            Assert.Equal(model.comments[1].id, 2);
        }
Example #6
0
        public void Case2()
        {
            var person = new PersonModel()
            {
                Id = 4, Name = "Nom", Password = "******", online = true, date = DateTime.Today
            };

            person.Parent = new PersonModel()
            {
                Id = 5, Name = "Parent Name", Password = "******", online = true, date = DateTime.Today.AddDays(2)
            };
            JsonApiParser parser = this.GetParser(person);

            parser.AddIncludeQuery("Parent");
            var json = (JObject)parser.GetJson();


            Assert.Equal(json["data"]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"]["id"].ToString(), "4");

            Assert.Equal(json["data"]["attributes"]["Name"].ToString(), "Nom");
            Assert.Equal(json["data"]["attributes"]["Password"].ToString(), "Password");
            Assert.Equal(json["data"]["attributes"]["online"].ToString(), "True");
            Assert.Equal(json["data"]["attributes"]["date"].ToString(), DateTime.Today.ToString("s"));

            Assert.Equal(json["data"]["relationships"]["Parent"]["data"]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"]["relationships"]["Parent"]["data"]["id"].ToString(), "5");

            Assert.Equal(json["included"].Type.ToString(), "Array");
            Assert.Equal(json["included"][0]["type"].ToString(), "personmodel");
            Assert.Equal(json["included"][0]["id"].ToString(), "5");
            Assert.Equal(json["included"][0]["attributes"]["Password"].ToString(), "pass parent");
            Assert.Equal(json["included"][0]["attributes"]["Name"].ToString(), "Parent Name");
            Assert.Equal(json["included"][0]["attributes"]["online"].ToString(), "True");
            Assert.Equal(json["included"][0]["attributes"]["date"].ToString(), DateTime.Today.AddDays(2).ToString("s"));

            var personModel  = new PersonModel();
            var personResult = (PersonModel) new JsonApiReader(json.ToString(), personModel).GetModel();

            Assert.Equal(personResult.Id, 4);
            Assert.Equal(personResult.Name, "Nom");
            Assert.Equal(personResult.Password, "Password");
            Assert.Equal(personResult.online, true);
            Assert.Equal(personResult.date, DateTime.Today);
            Assert.Equal(personResult.Parent.Id, 5);
        }
Example #7
0
        public void Case9()
        {
            var dictionnary = new Dictionary <string, string> {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            JsonApiParser parser = this.GetParser(dictionnary);

            parser.AddMeta("dico", dictionnary);

            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"].Type.ToString(), "Object");
            Assert.Equal(json["data"]["attributes"]["key1"].ToString(), "value1");
            Assert.Equal(json["meta"]["dico"]["attributes"]["key1"].ToString(), "value1");
        }
Example #8
0
        public void Case10()
        {
            var dictionnary = new Dictionary <string, string> {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            var model = new List <Dictionary <string, string> >
            {
                dictionnary, dictionnary
            };

            JsonApiParser parser = this.GetParser(model);

            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"][0]["attributes"]["key1"].ToString(), "value1");
            Assert.Equal(json["data"][1]["attributes"]["key2"].ToString(), "value2");
        }
Example #9
0
        public void Case11()
        {
            var a = new Article()
            {
                codes = new List <string> {
                    "un", "deux", "trois"
                }, propIgnore = 1
            };
            JsonApiParser parser = this.GetParser(a);
            var           json   = (JObject)parser.GetJson();

            Assert.Equal(json["data"]["attributes"]["codes"].Type.ToString(), "Array");
            Assert.Equal(json["data"]["attributes"]["codes"][0], "un");
            Assert.Equal(json["data"]["attributes"]["codes"][1], "deux");
            Assert.Equal(json["data"]["attributes"]["codes"][2], "trois");
            Assert.Throws <NullReferenceException>(() => json["data"]["attributes"]["propIgnore"].ToString());

            var articlemodel = new Article();
            var model        = (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel();

            Assert.Equal(model.codes.Count, 3);
        }
Example #10
0
        /// <summary>
        /// Execute after each action
        /// Convert return type to jsonAPI format
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (AttributeHandling.IsIgnoreJsonApi(((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo, Constants.WAY_PARSER))
            {
                return;
            }

            JsonApiService service = context.HttpContext.RequestServices.GetRequiredService <JsonApiService>();

            if (service.Error != null && service.Error.HasErrors())
            {
                context.HttpContext.Response.StatusCode = Constants.ERROR_STATUT_JSONAPI;
                context.Result = new ObjectResult(service.Error.GetJsonErrors());

                return;
            }

            if (context.Result is ObjectResult)
            {
                object result = ((ObjectResult)context.Result).Value;

                //If result is already JObject, return it without transform
                if (result?.GetType() == typeof(Newtonsoft.Json.Linq.JObject))
                {
                    return;
                }

                //Transform result to JsonAPI format
                JsonApiParser jsonAPIParser = service.Parser;
                jsonAPIParser.SetResolver(new ResolverData(context.HttpContext.RequestServices, service.Resolvers));
                jsonAPIParser.SetModel(result);
                jsonAPIParser.SetOptionsWithQuery(context.HttpContext.Request.Query);

                ((ObjectResult)context.Result).Value = jsonAPIParser.GetJson();
            }

            base.OnActionExecuted(context);
        }
Example #11
0
        public void Case7()
        {
            var a = new Article()
            {
                IdJson = 1, title = "titre", body = "body"
            };

            a.author = new PersonModel()
            {
                Id = 1, Name = "Franck", Parent = new PersonModel()
                {
                    Id = 55, Name = "Parent Included"
                }
            };
            a.comments = new List <Comment>()
            {
                new Comment()
                {
                    id = 1, body = "i like it"
                },
                new Comment()
                {
                    id = 2, body = "yes i do"
                }
            };

            JsonApiParser parser = this.GetParser(a);

            parser.AddIncludeQuery("author");
            parser.AddIncludeQuery("comments");
            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"]["id"].ToString(), "1_0");
            Assert.Equal(json["data"]["type"].ToString(), "article");
            Assert.Equal(json["data"]["attributes"]["title"].ToString(), "titre");
            Assert.Equal(json["data"]["attributes"]["body"].ToString(), "body");

            Assert.Equal(json["data"]["relationships"]["author"].Type.ToString(), "Object");
            Assert.Equal(json["data"]["relationships"]["author"]["data"]["id"], "1");
            Assert.Equal(json["data"]["relationships"]["author"]["data"]["type"], "personmodel");

            Assert.Equal(json["data"]["relationships"]["comments"]["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][0]["id"], "1");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][0]["type"], "comment");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][1]["id"], "2");
            Assert.Equal(json["data"]["relationships"]["comments"]["data"][1]["type"], "comment");

            Assert.Equal(json["included"].Type.ToString(), "Array");
            Assert.Equal(json["included"][0]["id"], "1");
            Assert.Equal(json["included"][0]["type"], "personmodel");
            Assert.Equal(json["included"][0]["attributes"]["Name"], "Franck");

            Assert.Equal(json["included"][1]["type"], "comment");
            Assert.Equal(json["included"][1]["id"], "1");
            Assert.Equal(json["included"][1]["attributes"]["body"], "i like it");

            Assert.Equal(json["included"][2]["type"], "comment");
            Assert.Equal(json["included"][2]["id"], "2");
            Assert.Equal(json["included"][2]["attributes"]["body"], "yes i do");

            Assert.Throws <ArgumentOutOfRangeException>(() => json["included"][3]);

            var articlemodel = new Article();
            var model        = (Article) new JsonApiReader(json.ToString(), articlemodel).GetModel();

            Assert.Equal(model.IdJson, 1);
            Assert.Equal(model.title, "titre");
            Assert.Equal(model.body, "body");
            Assert.Equal(model.author.Id, 1);
            Assert.Equal(model.comments[0].id, 1);
            Assert.Equal(model.comments[1].id, 2);
        }
Example #12
0
        public void Case6()
        {
            var u = new PersonModel()
            {
                Id = 3, Name = "Test 1", UserName = "******"
            };

            u.Articles = new List <Article>()
            {
                new Article()
                {
                    IdJson = 1, body = "body article", title = "title"
                },
                new Article()
                {
                    IdJson = 2, body = "body article", title = "title"
                }
            };

            var listperson = new List <PersonModel>()
            {
                u,
                new PersonModel()
                {
                    Id = 4, Name = "Test 2", UserName = "******", Parent = u
                }
            };

            JsonApiParser parser = this.GetParser(listperson);

            parser.AddIncludeQuery("*");
            var json = (JObject)parser.GetJson();

            Assert.Equal(json["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"][0]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"][0]["id"].ToString(), "3");
            Assert.Equal(json["data"][0]["attributes"]["UserName"].ToString(), "NameTest 1");

            Assert.Equal(json["data"][0]["relationships"]["Articles"]["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"][0]["relationships"]["Articles"]["data"][0]["type"], "article");
            Assert.Equal(json["data"][0]["relationships"]["Articles"]["data"][0]["id"], "1_0");
            Assert.Equal(json["data"][0]["relationships"]["Articles"]["data"][1]["type"], "article");
            Assert.Equal(json["data"][0]["relationships"]["Articles"]["data"][1]["id"], "2_0");

            Assert.Equal(json["data"][1]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"][1]["id"].ToString(), "4");
            Assert.Equal(json["data"][1]["relationships"]["Parent"]["data"].Type.ToString(), "Object");
            Assert.Equal(json["data"][1]["relationships"]["Parent"]["data"]["type"], "personmodel");
            Assert.Equal(json["data"][1]["relationships"]["Parent"]["data"]["id"], "3");

            var listmodel = new List <PersonModel>();
            var model     = (List <PersonModel>) new JsonApiReader(json.ToString(), listmodel).GetModel();

            Assert.Equal(model[0].Id, 3);
            Assert.Equal(model[0].UserName, "NameTest 1");
            Assert.Equal(model[0].Articles[0].IdJson, 1);
            Assert.Equal(model[0].Articles[1].IdJson, 2);

            Assert.Equal(model[1].Id, 4);
            Assert.Equal(model[1].UserName, "NameTest 2");
            Assert.Equal(model[1].Parent.Id, 3);
        }
Example #13
0
        public void Case5()
        {
            var auteur = new PersonModel()
            {
                Id = 4, Name = "Auteur"
            };
            var comments = new List <Comment>()
            {
                new Comment()
                {
                    id = 1, body = "comment 1"
                },
                new Comment()
                {
                    id = 2, body = "comment 2"
                }
            };

            var articles = new List <Article>()
            {
                new Article()
                {
                    title = "titre article 1", body = "body artcicle 1", author = auteur, comments = comments
                },
                new Article()
                {
                    title = "titre article 2", body = "body artcicle 2", author = auteur, comments = comments
                }
            };

            JsonApiParser parser = this.GetParser(articles);

            parser.AddIncludeQuery("*");
            var json = (JObject)parser.GetJson();


            Assert.Equal(json["data"].Type.ToString(), "Array");

            //article 1
            Assert.Equal(json["data"][0]["type"].ToString(), "article");
            Assert.Equal(json["data"][0]["id"].ToString(), "0_0");
            Assert.Equal(json["data"][0]["attributes"]["title"].ToString(), "titre article 1");
            Assert.Equal(json["data"][0]["attributes"]["body"].ToString(), "body artcicle 1");

            Assert.Equal(json["data"][0]["relationships"]["author"]["data"]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"][0]["relationships"]["author"]["data"]["id"].ToString(), "4");

            Assert.Equal(json["data"][0]["relationships"]["comments"]["data"].Type.ToString(), "Array");
            Assert.Throws <ArgumentOutOfRangeException>(() => json["data"][0]["relationships"]["comments"]["data"][3]);

            Assert.Equal(json["data"][0]["relationships"]["comments"]["data"][0]["type"].ToString(), "comment");
            Assert.Equal(json["data"][0]["relationships"]["comments"]["data"][0]["id"].ToString(), "1");
            Assert.Equal(json["data"][0]["relationships"]["comments"]["data"][1]["type"].ToString(), "comment");
            Assert.Equal(json["data"][0]["relationships"]["comments"]["data"][1]["id"].ToString(), "2");

            //article 2
            Assert.Equal(json["data"][1]["type"].ToString(), "article");
            Assert.Equal(json["data"][1]["id"].ToString(), "0_0");
            Assert.Equal(json["data"][1]["attributes"]["title"].ToString(), "titre article 2");
            Assert.Equal(json["data"][1]["attributes"]["body"].ToString(), "body artcicle 2");

            Assert.Equal(json["data"][1]["relationships"]["author"]["data"]["type"].ToString(), "personmodel");
            Assert.Equal(json["data"][1]["relationships"]["author"]["data"]["id"].ToString(), "4");

            Assert.Equal(json["data"][1]["relationships"]["comments"]["data"].Type.ToString(), "Array");
            Assert.Equal(json["data"][1]["relationships"]["comments"]["data"][0]["type"].ToString(), "comment");
            Assert.Equal(json["data"][1]["relationships"]["comments"]["data"][0]["id"].ToString(), "1");
            Assert.Equal(json["data"][1]["relationships"]["comments"]["data"][1]["type"].ToString(), "comment");
            Assert.Equal(json["data"][1]["relationships"]["comments"]["data"][1]["id"].ToString(), "2");


            var listmodel = new List <Article>();
            var model     = (List <Article>) new JsonApiReader(json.ToString(), listmodel).GetModel();

            //article 1
            Assert.Equal(model[0].Id, 0);
            Assert.Equal(model[0].title, "titre article 1");
            Assert.Equal(model[0].body, "body artcicle 1");
            Assert.Equal(model[0].online, false);
            Assert.Equal(model[0].author.Id, 4);
            Assert.Equal(model[0].comments.Count, 2);
            Assert.Equal(model[0].comments[0].id, 1);
            Assert.Equal(model[0].comments[1].id, 2);

            //article 2
            Assert.Equal(model[1].Id, 0);
            Assert.Equal(model[1].title, "titre article 2");
            Assert.Equal(model[1].body, "body artcicle 2");
            Assert.Equal(model[1].online, false);
            Assert.Equal(model[1].author.Id, 4);
            Assert.Equal(model[1].comments.Count, 2);
            Assert.Equal(model[1].comments[0].id, 1);
            Assert.Equal(model[1].comments[1].id, 2);
        }