/// <reference path="../src/odata-net.js" />
/// <reference path="../src/odata.js" />
/// <reference path="../src/odata-json-light.js" />
/// <reference path="../src/odata-json.js" />
/// <reference path="../common/djstest.js" />

// odata-json-light-tests.js

(function (window, undefined) {

    // DATAJS INTERNAL START

    var mockHttpClient;

    module("Unit", {
        setup: function () {
            mockHttpClient = window.MockHttpClient.clear();
        }
    });

    var getSampleModel = function () {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "NS",
                    "entityType": [{
                        "name": "EntityType",
                        "key": { "propertyRef": [{ "name": "Id"}] },
                        "property": [
                                { "name": "Id", "type": "Edm.String" },
                                { "name": "P1", "type": "Edm.Int32" }
                         ]
                    }],
                    entityContainer: [{
                        name: "TestContainer",
                        isDefaultEntityContainer: "true",
                        entitySet: [{ "name": "EntityTypes", "entityType": "NS.EntityType"}]
                    }]
                }]
            }
        };
        return testModel;
    };

    var getSampleModelWithTwoKeys = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].key = { "propertyRef": [{ "name": "Id" }, { "name": "P1"}] };
        return testModel;
    };

    var getSampleModelWithOneConcurrencyProperty = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].property[0].concurrencyMode = "Fixed";
        return testModel;
    };
    
    var getSampleModelWithOneBinaryConcurrencyProperty = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].property[1].concurrencyMode = "Fixed";
        testModel.dataServices.schema[0].entityType[0].property[1].type = "Edm.Binary";
        return testModel;
    };

    var getSampleModelWithMultipleConcurrencyProperties = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].property[0].concurrencyMode = "Fixed";
        testModel.dataServices.schema[0].entityType[0].property[1].concurrencyMode = "Fixed";
        return testModel;
    };

    var getSampleModelWithDateTimeConcurrencyProperties = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].property[1] = { "name": "P1", "type": "Edm.DateTime", concurrencyMode: "Fixed" };
        return testModel;
    };
    
    var getSampleModelWithDecimalProperty = function () {
        var testModel = getSampleModel();
        testModel.dataServices.schema[0].entityType[0].property[1] = { "name": "P1", "type": "Edm.Decimal"};
        return testModel;
    };

    var getSampleModelWithNavPropertiesAndInheritedTypes = function () {
        return {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "maxDataServiceVersion": "4.0",
                "schema": [
                    {
                        "namespace": "ODataDemo",
                        "entityType": [
                            {
                                "name": "Product",
                                "key": {
                                    "propertyRef": [
                                        {
                                            "name": "ID"
                                        }
                                    ]
                                },
                                "property": [
                                    {
                                        "name": "ID",
                                        "nullable": "false",
                                        "type": "Edm.Int32"
                                    }
                                ],
                                "navigationProperty": [
                                    {
                                        "name": "Category",
                                        "toRole": "Category_Products",
                                        "fromRole": "Product_Category",
                                        "relationship": "ODataDemo.Product_Category_Category_Products"
                                    }]
                            },
                            {
                                "name": "FeaturedProduct",
                                "baseType": "ODataDemo.Product",
                                "navigationProperty": [
                                    {
                                        "name": "Advertisement",
                                        "toRole": "Advertisement_FeaturedProduct",
                                        "fromRole": "FeaturedProduct_Advertisement",
                                        "relationship": "ODataDemo.FeaturedProduct_Advertisement_Advertisement_FeaturedProduct"
                                    }
                                ]
                            },
                            {
                                "name": "Advertisement",
                                "key": {
                                    "propertyRef": [
                                        {
                                            "name": "ID"
                                        }
                                    ]
                                },
                                "property": [
                                    {
                                        "name": "ID",
                                        "nullable": "false",
                                        "type": "Edm.Guid"
                                    }
                                ],
                                "navigationProperty": [
                                    {
                                        "name": "FeaturedProduct",
                                        "toRole": "FeaturedProduct_Advertisement",
                                        "fromRole": "Advertisement_FeaturedProduct",
                                        "relationship": "ODataDemo.FeaturedProduct_Advertisement_Advertisement_FeaturedProduct"
                                    }
                                ]
                            },
                            {
                                "name": "Category",
                                "key": {
                                    "propertyRef": [
                                        {
                                            "name": "ID"
                                        }
                                    ]
                                },
                                "property": [
                                    {
                                        "name": "ID",
                                        "nullable": "false",
                                        "type": "Edm.Int32"
                                    }
                                ],
                                "navigationProperty": [
                                    {
                                        "name": "Products",
                                        "toRole": "Product_Category",
                                        "fromRole": "Category_Products",
                                        "relationship": "ODataDemo.Product_Category_Category_Products"
                                    }
                                ]
                            }
                        ],
                        "association": [
                            {
                                "name": "Product_Category_Category_Products",
                                "end": [
                                    {
                                        "type": "ODataDemo.Category",
                                        "multiplicity": "0..1",
                                        "role": "Category_Products"
                                    },
                                    {
                                        "type": "ODataDemo.Product",
                                        "multiplicity": "*",
                                        "role": "Product_Category"
                                    }
                                ]
                            },
                            {
                                "name": "FeaturedProduct_Advertisement_Advertisement_FeaturedProduct",
                                "end": [
                                    {
                                        "type": "ODataDemo.Advertisement",
                                        "multiplicity": "0..1",
                                        "role": "Advertisement_FeaturedProduct"
                                    },
                                    {
                                        "type": "ODataDemo.FeaturedProduct",
                                        "multiplicity": "0..1",
                                        "role": "FeaturedProduct_Advertisement"
                                    }
                                ]
                            }
                        ],
                        "entityContainer": [
                            {
                                "name": "DemoService",
                                "isDefaultEntityContainer": "true",
                                "entitySet": [
                                    {
                                        "name": "Products",
                                        "entityType": "ODataDemo.Product"
                                    },
                                    {
                                        "name": "Advertisements",
                                        "entityType": "ODataDemo.Advertisement"
                                    },
                                    {
                                        "name": "Categories",
                                        "entityType": "ODataDemo.Category"
                                    }
                                ],
                                "associationSet": [
                                    {
                                        "name": "Products_Advertisement_Advertisements",
                                        "association": "ODataDemo.FeaturedProduct_Advertisement_Advertisement_FeaturedProduct",
                                        "end": [
                                            {
                                                "role": "FeaturedProduct_Advertisement",
                                                "entitySet": "Products"
                                            },
                                            {
                                                "role": "Advertisement_FeaturedProduct",
                                                "entitySet": "Advertisements"
                                            }
                                        ]
                                    },
                                    {
                                        "name": "Products_Category_Categories",
                                        "association": "ODataDemo.Product_Category_Category_Products",
                                        "end": [
                                            {
                                                "role": "Product_Category",
                                                "entitySet": "Products"
                                            },
                                            {
                                                "role": "Category_Products",
                                                "entitySet": "Categories"
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        };
    };

    var failTest = function (err) {
        if (err && err.message) {
            djstest.fail(err.message);
        } else {
            djstest.fail("unexpected failure");
        }
        djstest.done();
    };

    var verifySerializedJsonLightData = function (actual, expected, message, requestUri) {
        mockHttpClient.addRequestVerifier("*", function (request) {
            djstest.assertAreEqualDeep(JSON.parse(request.body), expected, message);
            djstest.done();
        });

        odatajs.oData.request({
            requestUri: requestUri || "http://someUri",
            headers: { "Content-Type": "application/json" },
            method: "PUT",
            data: actual
        }, null, failTest, null, mockHttpClient);
    };

    var verifyReadJsonLightData = function (input, expected, message, model) {
        var response = { headers: { "Content-Type": "application/json;odata.metadata=full", DataServiceVersion: "4.0" }, body: JSON.stringify(input) };

        OData.jsonHandler.read(response, { metadata: model });
        djstest.assertAreEqualDeep(response.data, expected, message);
    };

    var verifyReadJsonLightWithMinimalMetadata = function (input, expected, message, model) {
        var response = { headers: { "Content-Type": "application/json;odata.metadata=minimal", DataServiceVersion: "4.0" }, body: JSON.stringify(input) };

        OData.jsonHandler.read(response, { metadata: model });
        djstest.assertAreEqualDeep(response.data, expected, message);
    };


    djstest.addTest(function jsonLightReadEmptySvcDocTest() {
        var input = {
            "odata.metadata": "http://someUri/ODataService.svc/OData/$metadata",
            "value": []
        };

        var expected = {
            workspaces: [
                {
                    collections: []
                }
            ]
        };

        verifyReadJsonLightData(input, expected, "Json light links document was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadSvcDocTest() {
        var input = {
            "odata.metadata": "http://someUri/ODataService.svc/OData/$metadata",
            "value": [
                { "name": "Customers", "url": "Customers" },
                { "name": "Employees", "url": "http://someUri/ODataService.svc/OData/Employees" }
            ]
        };

        var expected = {
            workspaces: [
                {
                    collections: [
                        {
                            title: "Customers",
                            href: "http://someUri/ODataService.svc/OData/Customers"
                        },
                        {
                            title: "Employees",
                            href: "http://someUri/ODataService.svc/OData/Employees"
                        }
                    ]
                }
            ]
        };

        verifyReadJsonLightData(input, expected, "Json light links document was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEntryMetadataUriTest() {
        var tests = {
            "Qualified entity set": {
                input: { "odata.metadata": "http://someUri/$metadata#Ns.Container.EntitySet/@Element" },
                expected: { __metadata: { type: null} }
            },
            "Unqualified entity set": {
                input: { "odata.metadata": "http://someUri/$metadata#Ns.Container.EntitySet/@Element" },
                expected: { __metadata: { type: null} }
            },
            "Qualified entity set with type cast": {
                input: { "odata.metadata": "http://someUri/$metadata#Ns.Container.EntitySet/TypeCast/@Element" },
                expected: { __metadata: { type: "TypeCast"} }
            },

            "Unqualified entity set with type cast": {
                input: { "odata.metadata": "http://someUri/$metadata#EntitySet/TypeCast/@Element" },
                expected: { __metadata: { type: "TypeCast"} }
            }
        };

        for (name in tests) {
            var test = tests[name];
            verifyReadJsonLightData(test.input, test.expected, name + " - Json light entry metadata uri was read properly.");
        }
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEntryMetadataUriWithMetadataDocumentTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Test.Catalog",
                    "entityContainer": [{
                        "name": "TestCatalog",
                        "isDefaultEntityContainer": "true",
                        "entitySet": [
                           { "name": "Titles", "entityType": "TestCatalog.Model.Title" }
                    ]
                    }, {
                        "name": "GenreCatalog",
                        "isDefaultEntityContainer": "false",
                        "entitySet": [
                           { "name": "Genres", "entityType": "TestCatalog.Model.Genre" }
                    ]
                    }]
                }]
            }
        };

        var tests = {
            "Qualified entity set": {
                input: { "odata.metadata": "http://someUri/$metadata#Test.Catalog.GenreCatalog.Genres/@Element" },
                expected: { __metadata: { type: "TestCatalog.Model.Genre"} }
            },
            "Unqualified entity set": {
                input: { "odata.metadata": "http://someUri/$metadata#Titles/@Element" },
                expected: { __metadata: { type: "TestCatalog.Model.Title"} }
            },
            "Qualified entity set with type cast": {
                input: { "odata.metadata": "http://someUri/$metadata#Test.Catalog.Titles/TestCatalog.Model.Songs/@Element" },
                expected: { __metadata: { type: "TestCatalog.Model.Songs"} }
            },
            "Unqualified entity set with type cast": {
                input: { "odata.metadata": "http://someUri/$metadata#Titles/TestCatalog.Model.Songs/@Element" },
                expected: { __metadata: { type: "TestCatalog.Model.Songs"} }
            },
            "Unqualified entity set in non default entity container": {
                input: { "odata.metadata": "http://someUri/$metadata#Generes/@Element" },
                expected: { __metadata: { type: null} }
            },
            "Unqualified entity set in non default entity container with type cast": {
                input: { "odata.metadata": "http://someUri/$metadata#Generes/TypeCast/@Element" },
                expected: { __metadata: { type: "TypeCast"} }
            }
        };

        for (name in tests) {
            var test = tests[name];
            verifyReadJsonLightData(test.input, test.expected, name + " - Json light entry metadata uri was read properly.", testModel);
        }
        djstest.done();
    });

    djstest.addTest(function jsonLightReadTypeInPayloadWinsOverModelTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "NS",
                    "entityType": [{
                        "name": "EntityType",
                        "hasStream": "true",
                        "key": { "propertyRef": [{ "name": "Id"}] },
                        "property": [
                                { "name": "Id", "type": "Edm.String" },
                                { "name": "P1", "type": "Edm.String" },
                                { "name": "P2", "type": "NS.ComplexType" },
                                { "name": "P3", "type": "Edm.Int64" }
                            ]
                    }],
                    "complexType": [{
                        "name": "ComplexType",
                        "property": [
                            { "name": "C1", "type": "Edm.String" }
                        ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/NS.EntityType/@Element",
            P1: "Hello",
            P2: {
                "odata.type": "Instance",
                C1: "World"
            },
            "P2@odata.type": "Property",
            P3: "500",
            "P3@odata.type": "Property",
            P4: {
                "odata.type": "NS.ComplexType",
                C1: "!!"
            }
        };

        var expected = {
            __metadata: {
                type: "NS.EntityType",
                properties: {
                    P1: { type: "Edm.String" },
                    P2: {
                        type: "Instance",
                        properties: {
                            C1: { type: null }
                        }
                    },
                    P3: { type: "Property" },
                    P4: {
                        type: "NS.ComplexType",
                        properties: {
                            C1: { type: "Edm.String" }
                        }
                    }
                }
            },
            P1: "Hello",
            P2: {
                __metadata: {
                    type: "Instance"
                },
                C1: "World"
            },
            P3: "500",
            P4: {
                __metadata: {
                    type: "NS.ComplexType"
                },
                C1: "!!"
            }
        };

        verifyReadJsonLightData(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadObjectWithCollectionPropertyTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "NS",
                    "entityType": [{
                        "name": "EntityType",
                        "property": [
                                { "name": "p1", "type": "Collection(Edm.Int32)" }
                            ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/NS.EntityType/@Element",
            p1: [1, 2, 3],
            p2: [
                { c1: 100, c2: 200 },
                { c1: 400, c2: 500, "odata.type": "NS.OtherType" }
            ],
            "p2@odata.type": "Collection(NS.ComplexType)",
            p3: [5, 6, 7]
        };

        var expected = {
            __metadata: {
                type: "NS.EntityType",
                properties: {
                    p1: { type: "Collection(Edm.Int32)" },
                    p2: {
                        type: "Collection(NS.ComplexType)",
                        elements: [
                            {
                                type: "NS.ComplexType",
                                properties: {
                                    c1: { type: null },
                                    c2: { type: null }
                                }
                            },
                            {
                                type: "NS.OtherType",
                                properties: {
                                    c1: { type: null },
                                    c2: { type: null }
                                }
                            }
                        ]
                    },
                    p3: { type: null }
                }
            },
            p1: {
                __metadata: { type: "Collection(Edm.Int32)" },
                results: [1, 2, 3]
            },
            p2: {
                __metadata: { type: "Collection(NS.ComplexType)" },
                results: [
                    {
                        __metadata: {
                            type: "NS.ComplexType"
                        },
                        c1: 100,
                        c2: 200
                    },
                    {
                        __metadata: {
                            type: "NS.OtherType"
                        },
                        c1: 400,
                        c2: 500
                    }
                ]
            },
            p3: {
                __metadata: { type: null },
                results: [5, 6, 7]
            }
        };

        verifyReadJsonLightData(input, expected, "Json light object with collection porperties was read properly", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEntryODataAnnotationsTest() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#NS.Container.Set/TypeCast/@Element",
            "odata.id": "Customers(1)",
            "odata.etag": "etag-value",
            "odata.readLink": "read/Customers(1)",
            "odata.editLink": "Customers(1)",
            "odata.mediaReadLink": "Customers(1)/Image",
            "odata.mediaEditLink": "Customers(1)/$value",
            "odata.mediaETag": "stream-etag-value",
            "odata.mediaContentType": "image/jpg"
        };

        var expected = {
            __metadata: {
                id: "Customers(1)",
                type: "TypeCast",
                etag: "etag-value",
                self: "http://someUri/read/Customers(1)",
                edit: "http://someUri/Customers(1)",
                uri: "http://someUri/Customers(1)",
                media_src: "http://someUri/Customers(1)/Image",
                edit_media: "http://someUri/Customers(1)/$value",
                media_etag: "stream-etag-value",
                content_type: "image/jpg"
            }
        };

        verifyReadJsonLightData(input, expected, "Json light entry OData annotations were read properly");
        djstest.done();
    });


    djstest.addTest(function jsonLightReadObjectWithComplexPropertyTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Ns",
                    "entityType": [{
                        "name": "EntityType",
                        "property": [
                                { "name": "p1", "type": "Ns.ComplexType" }
                         ]
                    }],
                    "complexType": [{
                        "name": "ComplexType",
                        "property": [
                            { "name": "c1", "type": "Edm.Int16" },
                            { "name": "c2", "type": "Edm.Int32" },
                            { "name": "c3", "type": "Ns.ComplexType" }
                        ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/Ns.EntityType/@Element",
            p1: {
                c1: 100,
                c2: 200,
                c3: {
                    c1: 300,
                    c2: 400,
                    c3: {
                        c1: 500,
                        c2: 600,
                        c3: null
                    }
                }
            },
            p2: {
                "odata.type": "Ns.ComplexType2",
                c4: 800,
                "c4@odata.type": "Edm.Single",
                c5: 900,
                c6: {
                    c1: 1000,
                    c2: 2000,
                    c3: {
                        c1: 1100,
                        "c1@odata.type": "Edm.Double",
                        c2: 1200,
                        c3: null
                    }
                },
                "c6@odata.type": "Ns.ComplexType"
            },
            p3: {},
            "p3@odata.type": "Ns.ComplexType3"
        };

        var expected = {
            __metadata: {
                type: "Ns.EntityType",
                properties: {
                    p1: {
                        type: "Ns.ComplexType",
                        properties: {
                            c1: { type: "Edm.Int16" },
                            c2: { type: "Edm.Int32" },
                            c3: {
                                type: "Ns.ComplexType",
                                properties: {
                                    c1: { type: "Edm.Int16" },
                                    c2: { type: "Edm.Int32" },
                                    c3: {
                                        type: "Ns.ComplexType",
                                        properties: {
                                            c1: { type: "Edm.Int16" },
                                            c2: { type: "Edm.Int32" },
                                            c3: { type: "Ns.ComplexType" }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    p2: {
                        type: "Ns.ComplexType2",
                        properties: {
                            c4: { type: "Edm.Single" },
                            c5: { type: null },
                            c6: {
                                type: "Ns.ComplexType",
                                properties: {
                                    c1: { type: "Edm.Int16" },
                                    c2: { type: "Edm.Int32" },
                                    c3: {
                                        type: "Ns.ComplexType",
                                        properties: {
                                            c1: { type: "Edm.Double" },
                                            c2: { type: "Edm.Int32" },
                                            c3: { type: "Ns.ComplexType" }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    p3: { type: "Ns.ComplexType3" }
                }
            },
            p1: {
                __metadata: { type: "Ns.ComplexType" },
                c1: 100,
                c2: 200,
                c3: {
                    __metadata: { type: "Ns.ComplexType" },
                    c1: 300,
                    c2: 400,
                    c3: {
                        __metadata: { type: "Ns.ComplexType" },
                        c1: 500,
                        c2: 600,
                        c3: null
                    }
                }
            },
            p2: {
                __metadata: { type: "Ns.ComplexType2" },
                c4: 800,
                c5: 900,
                c6: {
                    __metadata: { type: "Ns.ComplexType" },
                    c1: 1000,
                    c2: 2000,
                    c3: {
                        __metadata: { type: "Ns.ComplexType" },
                        c1: 1100,
                        c2: 1200,
                        c3: null
                    }
                }
            },
            p3: { __metadata: { type: "Ns.ComplexType3"} }
        };

        verifyReadJsonLightData(input, expected, "Json light object with complex type properties was read properly", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadObjectWithNamedStreamProperty() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#NS.Container.Set/TypeCast/@Element",
            "p1@odata.mediaReadLink": "Customers(1)/namedStream",
            "p1@odata.mediaEditLink": "Customers(1)/namedStream/$value",
            "p1@odata.mediaETag": "voice-etag-value",
            "p1@odata.mediaContentType": "audio/basic"
        };

        var expected = {
            __metadata: {
                type: "TypeCast",
                properties: {
                    p1: { type: null }
                }
            },
            p1: {
                __mediaresource: {
                    media_src: "http://someUri/Customers(1)/namedStream",
                    edit_media: "http://someUri/Customers(1)/namedStream/$value",
                    media_etag: "voice-etag-value",
                    content_type: "audio/basic"
                }
            }
        };

        verifyReadJsonLightData(input, expected, "Json light object with named stream properties was read properly");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEntryWithDeferredNavigationPropertyTests() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#NS.Container.Set/TypeCast/@Element",
            "p1@odata.navigationLinkUrl": "entitySet(1)/deferred",
            "p1@odata.associationLinkUrl": "entitySet(1)/$links/deferred"
        };

        var expected = {
            __metadata: {
                type: "TypeCast",
                properties: {
                    p1: {
                        type: null,
                        associationLinkUrl: "http://someUri/entitySet(1)/$links/deferred"
                    }
                }
            },
            p1: {
                __deferred: {
                    uri: "http://someUri/entitySet(1)/deferred"
                }
            }
        };

        verifyReadJsonLightData(input, expected, "Json light object with deferred navigation properties was read properly");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEntryWithInlinedNavigationPropertiesTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Ns",
                    "entityType": [{
                        "name": "EntityType",
                        "navigationProperty": [
                            { "name": "p1", "relationship": "Ns.Rel1", "toRole": "p1s" },
                            { "name": "p2", "relationship": "Ns.Rel2", "toRole": "p2s" }
                        ]
                    }],
                    "association": [{
                        "name": "Rel1",
                        "end": [
                            { "type": "Ns.EntityType1", "role": "p1s" },
                            { "type": "Ns.EntityType", "role": "otherRole" }
                         ]
                    },
                    {
                        "name": "Rel2",
                        "end": [
                            { "type": "Ns.EntityType", "role": "otherRole" },
                            { "type": "Ns.EntityType2", "role": "p2s" }
                         ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/Ns.EntityType/@Element",
            p1: [
                { e1: 100, e2: 200 },
                { e1: 110, e2: 220 }
            ],
            "p1@odata.count": 50,
            "p1@odata.nextLink": "nextToken",
            p2: {
                e3: 300
            },
            p3: [
                { e4: 400, e5: 500 },
                { e4: 440, e5: 550 }
            ],
            "p3@odata.navigationLinkUrl": "http://someUri/entitySet(1)/p3",
            "p3@odata.associationLinkUrl": "http://someUri/entitySet(1)/$links/p3",
            p4: {
                e6: 600
            },
            "p4@odata.navigationLinkUrl": "http://someUri/entitySet(1)/p4",
            "p4@odata.associationLinkUrl": "http://someUri/entitySet(1)/$links/p4",
            p5: [
                {
                    "odata.id": 12345,
                    e7: 700,
                    e8: 800
                }
            ],
            p6: {
                "odata.id": 78910,
                e9: 900,
                "e9@odata.type": "Edm.Int32"
            }
        };

        var expected = {
            __metadata: {
                type: "Ns.EntityType",
                properties: {
                    p1: {
                        type: "Ns.EntityType1"
                    },
                    p2: {
                        type: "Ns.EntityType2"
                    },
                    p3: {
                        type: null,
                        navigationLinkUrl: "http://someUri/entitySet(1)/p3",
                        associationLinkUrl: "http://someUri/entitySet(1)/$links/p3"
                    },
                    p4: {
                        type: null,
                        navigationLinkUrl: "http://someUri/entitySet(1)/p4",
                        associationLinkUrl: "http://someUri/entitySet(1)/$links/p4"
                    },
                    p5: {
                        type: null
                    },
                    p6: {
                        type: null
                    }
                }
            },
            p1: {
                __count: 50,
                __next: "http://someUri/nextToken",
                results: [
            {
                __metadata: {
                    type: "Ns.EntityType1",
                    properties: {
                        e1: { type: null },
                        e2: { type: null }
                    }
                },
                e1: 100,
                e2: 200
            },
            {
                __metadata: {
                    type: "Ns.EntityType1",
                    properties: {
                        e1: { type: null },
                        e2: { type: null }
                    }
                },
                e1: 110,
                e2: 220
            }
          ]
            },
            p2: {
                __metadata: {
                    type: "Ns.EntityType2",
                    properties: {
                        e3: { type: null }
                    }
                },
                e3: 300
            },
            p3: {
                results: [
            {
                __metadata: {
                    type: null,
                    properties: {
                        e4: { type: null },
                        e5: { type: null }
                    }
                },
                e4: 400,
                e5: 500
            },
            {
                __metadata: {
                    type: null,
                    properties: {
                        e4: { type: null },
                        e5: { type: null }
                    }
                },
                e4: 440,
                e5: 550
            }
            ]
            },
            p4: {
                __metadata: {
                    type: null,
                    properties: {
                        e6: { type: null }
                    }
                },
                e6: 600
            },
            p5: {
                results: [
                {
                    __metadata: {
                        id: 12345,
                        type: null,
                        properties: {
                            e7: { type: null },
                            e8: { type: null }
                        }
                    },
                    e7: 700,
                    e8: 800
                }
            ]
            },
            p6: {
                __metadata: {
                    id: 78910,
                    type: null,
                    properties: {
                        e9: { type: "Edm.Int32" }
                    }
                },
                e9: 900
            }
        };

        verifyReadJsonLightData(input, expected, "Json light object with inlined navigation properties was read properly", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadStringPropertiesTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Ns",
                    "entityType": [{
                        "name": "EntityType",
                        "property": [
                                { "name": "p1", "type": "Edm.DateTime" },
                                { "name": "p2", "type": "Edm.DateTimeOffset" },
                                { "name": "p3", "type": "Edm.Time" }
                            ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/Ns.EntityType/@Element",
            p1: "2000-01-02T03:04:05",
            p2: "2000-01-02T03:04:05+01:00",
            p3: "P0Y0M05DT12H30M5S",
            p4: "hello world",
            p5: "2001-01-02T03:04:05",
            "p5@odata.type": "Edm.DateTime",
            p6: "2001-01-02T03:04:05+01:00",
            "p6@odata.type": "Edm.DateTimeOffset",
            p7: "P0Y0M05DT12H30M10S",
            "p7@odata.type": "Edm.Time"
        };

        var p2 = new Date("01/02/2000 02:04:05 GMT");
        p2.__edmType = "Edm.DateTimeOffset";
        p2.__offset = "+01:00";

        var p6 = new Date("01/02/2001 02:04:05 GMT");
        p2.__edmType = "Edm.DateTimeOffset";
        p2.__offset = "+01:00";

        var expected = {
            __metadata: {
                type: "Ns.EntityType",
                properties: {
                    p1: { type: "Edm.DateTime" },
                    p2: { type: "Edm.DateTimeOffset" },
                    p3: { type: "Edm.Time" },
                    p4: { type: null },
                    p5: { type: "Edm.DateTime" },
                    p6: { type: "Edm.DateTimeOffset" },
                    p7: { type: "Edm.Time" }
                }
            },
            p1: new Date("01/02/2000 03:04:05 GMT"),
            p3: { ms: 477005000, __edmType: "Edm.Time" },
            p2: p2,
            p4: "hello world",
            p5: new Date("01/02/2001 03:04:05 GMT"),
            p6: p6,
            p7: { ms: 477010000, __edmType: "Edm.Time" }
        };

        verifyReadJsonLightData(input, expected, "Json light object with string properties was read properly", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadRecognizeDateLiteralsTest() {
        var input = {
            p1: "2000-01-02T03:04:05",
            p2: "2000-01-02T03:04:05+01:00"
        };

        var p2 = new Date("01/02/2000 02:04:05 GMT");
        p2.__edmType = "Edm.DateTimeOffset";
        p2.__offset = "+01:00";

        var expected = {
            __metadata: {
                properties: {
                    p1: {
                        type: null
                    },
                    p2: {
                        type: null
                    }
                },
                type: null
            },
            p1: new Date("01/02/2000 03:04:05 GMT"),
            p2: p2
        };

        OData.jsonHandler.recognizeDates = true;
        verifyReadJsonLightData(input, expected, "Json light datetime literals were recognized. ");

        OData.jsonHandler.recognizeDates = false;

        expected.p1 = input.p1;
        expected.p2 = input.p2;

        verifyReadJsonLightData(input, expected, "Json light datetime literals were ignored");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEmptyFeedTest() {
        var input = { "odata.metadata": "http://someUri#entitySet/Set", value: [] };
        var expected = { results: [] };

        verifyReadJsonLightData(input, expected, "Json light feed object was read properly");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadFeedTest() {
        var input = {
            "odata.metadata": "http://someUri#entitySet/Type",
            value: [
              { "odata.id": 12345 },
              { "odata.id": 56789 }
            ],
            "odata.count": 50,
            "odata.nextLink": "skipToken"
        };

        var expected = {
            __count: 50,
            __next: "http://someUri/skipToken",
            results: [
                {
                    __metadata: {
                        id: 12345,
                        type: "Type"
                    }
                },
                {
                    __metadata: {
                        id: 56789,
                        type: "Type"
                    }
                }
            ]
        };

        verifyReadJsonLightData(input, expected, "Json light feed object was read properly");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadFeedUsingMetadataTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Test.Catalog",
                    "entityContainer": [{
                        "name": "TestCatalog",
                        "isDefaultEntityContainer": "true",
                        "entitySet": [
                           { "name": "Titles", "entityType": "TestCatalog.Model.Title" }
                        ]
                    }
                    ]
                }
                ]
            }
        };

        var tests = {
            "Unqualified entity set": {
                input: { "odata.metadata": "http://someUri#Titles", value: [{}] },
                expected: { results: [{ __metadata: { type: "TestCatalog.Model.Title"}}] }
            },
            "Qualified entity set": {
                input: { "odata.metadata": "http://someUri#Test.Catalog.TestCatalog.Titles", value: [{}] },
                expected: { results: [{ __metadata: { type: "TestCatalog.Model.Title"}}] }
            },
            "Type casted entity set": {
                input: { "odata.metadata": "http://someUri#TestCatalog.Titles/TypeCast", value: [{}] },
                expected: { results: [{ __metadata: { type: "TypeCast"}}] }
            }
        };

        for (var name in tests) {
            var test = tests[name];
            verifyReadJsonLightData(test.input, test.expected, name + " - Json light feed was read properly.", testModel);
        }
        djstest.done();
    });

    djstest.addTest(function jsonLightReadInferFeedAsObjectTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Test.Catalog",
                    "entityContainer": [{
                        "name": "TestCatalog",
                        "isDefaultEntityContainer": "true",
                        "entitySet": [
                           { "name": "Titles", "entityType": "TestCatalog.Model.Title" }
                        ]
                    }
                    ]
                }
                ]
            }
        };

        var tests = {
            "Feed as object": {
                input: { "odata.metadata": "http://someUri#EntitySet", value: [] },
                expected: {
                    __metadata: {
                        type: "EntitySet",
                        properties: {
                            value: { type: null }
                        }
                    },
                    value: { __metadata: { type: null }, results: [] }
                }
            },
            "Feed as feed using value": {
                input: { "odata.metadata": "http://someUri#EntiySet", value: [{ "odata.id": 12345}] },
                expected: { results: [{ __metadata: { type: null, id: 12345}}] }
            },
            "Feed as feed using metadata": {
                input: { "odata.metadata": "http://someUri#Titles", value: [] },
                expected: { results: [] }
            },
            "Collection of primitive": {
                input: { "odata.metadata": "http://someUri#Collection(Edm.Int32)", value: [] },
                expected: { __metadata: { type: "Collection(Edm.Int32)" }, results: [] }
            },
            "Collection of complex": {
                input: { "odata.metadata": "http://someUri#Collection(My.Type)", value: [] },
                expected: { __metadata: { type: "Collection(My.Type)" }, results: [] }
            }
        };

        for (var name in tests) {
            var test = tests[name];
            var response = {
                headers: {
                    "Content-Type": "application/json;odata.metadata=full",
                    DataServiceVersion: "4.0"
                },
                body: JSON.stringify(test.input)
            };

            OData.jsonHandler.read(response, { metadata: testModel });
            djstest.assertAreEqualDeep(response.data, test.expected, name + " - Json light object was read properly ");
        }
        djstest.done();
    });

    djstest.addTest(function jsonLightReadEmptyLinksDocumentTest() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/$links/NavProp",
            value: []
        };

        var expected = {
            results: []
        };

        verifyReadJsonLightData(input, expected, "Json light links document was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadLinksDocumentTest() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/$links/NavProp",
            value: [
                        { url: "Products(1)" },
                        { url: "http://someUri/Products(2)" }
                     ]
        };

        var expected = {
            results: [
                        { uri: "http://someUri/Products(1)" },
                        { uri: "http://someUri/Products(2)" }
                    ]
        };

        verifyReadJsonLightData(input, expected, "Json light links document was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadSingleLinkDocumentTest() {
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/$links/NavProp/@Element",
            url: "Products(1)"
        };

        var expected = {
            uri: "http://someUri/Products(1)"
        };

        verifyReadJsonLightData(input, expected, "Json light single link document was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadTopLevelPrimitiveProperty() {
        var input = {
            "odata.metadata": "http://someUri#Edm.GeometryPoint",
            value: {
                type: "Point",
                coordinates: [1.0, 2.0],
                crs: {
                    type: name,
                    properties: {
                        name: "EPSG:4326"
                    }
                }
            }
        };

        var expected = {
            __metadata: {
                type: "Edm.GeometryPoint"
            },
            value: {
                type: "Point",
                coordinates: [1.0, 2.0],
                crs: {
                    type: name,
                    properties: {
                        name: "EPSG:4326"
                    }
                }
            }
        };

        verifyReadJsonLightData(input, expected, "Json light top level primitive property was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadTopLevelComplexTypeTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Ns",
                    "complexType": [{
                        "name": "ComplexType",
                        "property": [
                            { "name": "value", "type": "Collection(Ns.ComplexType2)" }
                        ]
                    }]
                }]
            }
        };

        var input = {
            "odata.metadata": "http://someUri#Ns.ComplexType",
            value: [{
                p1: 100,
                p2: 200
            }]
        };

        var expected = {
            __metadata: {
                type: "Ns.ComplexType",
                properties: {
                    value: {
                        type: "Collection(Ns.ComplexType2)",
                        elements: [
                            {
                                type: "Ns.ComplexType2",
                                properties: {
                                    p1: { type: null },
                                    p2: { type: null }
                                }
                            }
                        ]
                    }
                }
            },
            value: {
                __metadata: { type: "Collection(Ns.ComplexType2)" },
                results: [
                    {
                        __metadata: { type: "Ns.ComplexType2" },
                        p1: 100,
                        p2: 200
                    }
                ]
            }
        };

        verifyReadJsonLightData(input, expected, "Json light top level complex type property was read properly.", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadTopPrimitiveCollectionPropertyTest() {
        var input = {
            "odata.metadata": "http://someUri#Collection(Edm.GeometryPoint)",
            value: [{
                type: "Point",
                coordinates: [1.0, 2.0],
                crs: {
                    type: "name",
                    properties: {
                        name: "EPSG:4326"
                    }
                }
            }]
        };

        var expected = {
            __metadata: {
                type: "Collection(Edm.GeometryPoint)"
            },
            results: [{
                type: "Point",
                coordinates: [1.0, 2.0],
                crs: {
                    type: "name",
                    properties: {
                        name: "EPSG:4326"
                    }
                }
            }]
        };

        verifyReadJsonLightData(input, expected, "Json light top level primitive collection property was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadTopLevelComplexTypeCollectionTest() {
        var input = {
            "odata.metadata": "http://someUri#Collection(Ns.ComplexType2)",
            value: [{
                p1: 100,
                p2: 200,
                "p2@odata.type": "Edm.Int16"
            }]
        };

        var expected = {
            __metadata: {
                type: "Collection(Ns.ComplexType2)",
                elements: [
                    {
                        type: "Ns.ComplexType2",
                        properties: {
                            p1: { type: null },
                            p2: { type: "Edm.Int16" }
                        }
                    }
                ]
            },
            results: [
                {
                    __metadata: { type: "Ns.ComplexType2" },
                    p1: 100,
                    p2: 200
                }
             ]
        };

        verifyReadJsonLightData(input, expected, "Json light top level complex type collection property was read properly.");
        djstest.done();
    });

    djstest.addTest(function jsonLightReadFeedAdvertisedActionsTest() {

        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Ns",
                    "entityContainer": [{
                        "name": "EntityContainer",
                        "isDefaultEntityContainer": "true",
                        "entitySet": [
                           { "name": "EntitySet", "entityType": "Ns.EntityType" }
                        ]
                    }
                    ]
                }
                ]
            }
        };

        input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet",
            "#action1": {
                target: "action1/item(0)",
                title: "Action1"
            },
            "#action2": {
                target: "action2/item(0)",
                title: "Action2"
            },
            value: []
        };

        expected = {
            __metadata: {
                actions: [
                    {
                        metadata: "http://someUri/action1",
                        target: "http://someUri/action1/item(0)",
                        title: "Action1"
                    },
                   {
                       metadata: "http://someUri/action2",
                       target: "http://someUri/action2/item(0)",
                       title: "Action2"
                   }
                ]
            },
            results: []
        };

        verifyReadJsonLightData(input, expected, "Json light feed with advertised actions was read properly.", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightReadAdvertisedActionsAndFunctionsTest() {
        var testModel = {
            "version": "1.0",
            "dataServices": {
                "dataServiceVersion": "4.0",
                "schema": [{
                    "namespace": "Test.Catalog",
                    "entityContainer": [{
                        "name": "TestCatalog",
                        "isDefaultEntityContainer": "true",
                        "functionImport": [
                            { "name": "function1", "isSideEffecting": "false" },
                            { "name": "function2", "isSideEffecting": "false" },
                            { "name": "action1", "isSideEffecting": "true" },
                            { "name": "action2" }
                         ]
                    }, {
                        "name": "OtherCatalog",
                        "isDefaultEntityContainer": "false",
                        "functionImport": [
                            { "name": "function1", "isSideEffecting": "false" }
                         ]
                    }]
                }]
            }
        };

        input = {
            "odata.metadata": "http://someUri/$metadata#EntitySet/@Element",
            "#function2": [
                {
                    target: "function2/item(0)",
                    title: "Function2 overload1"
                },
                {
                    target: "function2/item(0)",
                    title: "Function2 overload2"
                }
            ],
            "#action1": {
                target: "action1/item(0)",
                title: "Action1"
            },
            "#action2": {
                target: "action2/item(0)",
                title: "Action2"
            },
            "#function1": {
                target: "function1/item(0)",
                title: "Function1"
            },
            "#Test.Catalog.OtherCatalog.function1": {
                target: "Test.Catalog.OtherCatalog.function1/item(0)",
                title: "Function1 in other catalog"
            },
            "#action3": [
                {
                    target: "action3/item(0)",
                    title: "Unkown action overload1"
                },
                {
                    target: "http://otherUri/action3/item(0)",
                    title: "Unkown action overload2"
                }
            ]
        };

        expected = {
            __metadata: {
                type: null,
                actions: [
                   {
                       metadata: "http://someUri/action1",
                       target: "http://someUri/action1/item(0)",
                       title: "Action1"
                   },
                   {
                       metadata: "http://someUri/action2",
                       target: "http://someUri/action2/item(0)",
                       title: "Action2"
                   },
                   {
                       metadata: "http://someUri/action3",
                       target: "http://someUri/action3/item(0)",
                       title: "Unkown action overload1"
                   },
                   {
                       metadata: "http://someUri/action3",
                       target: "http://otherUri/action3/item(0)",
                       title: "Unkown action overload2"
                   }
                ],
                functions: [
                    {
                        metadata: "http://someUri/function2",
                        target: "http://someUri/function2/item(0)",
                        title: "Function2 overload1"
                    },
                    {
                        metadata: "http://someUri/function2",
                        target: "http://someUri/function2/item(0)",
                        title: "Function2 overload2"
                    },
                    {
                        metadata: "http://someUri/function1",
                        target: "http://someUri/function1/item(0)",
                        title: "Function1"
                    },
                    {
                        metadata: "http://someUri/Test.Catalog.OtherCatalog.function1",
                        target: "http://someUri/Test.Catalog.OtherCatalog.function1/item(0)",
                        title: "Function1 in other catalog"
                    }
                ]
            }
        };

        verifyReadJsonLightData(input, expected, "Json light advertised actions and functions were read properly.", testModel);
        djstest.done();
    });

    djstest.addTest(function jsonLightSerializeEntryMetadataTest() {
        var data = {
            __metadata: {
                metadata: "http://someUri/$metadata#NS.Container/Set/@Element",
                id: "http://someUri/Customers(1)",
                etag: "etag-value",
                self: "http://someUri/read/Customers(1)",
                edit: "http://someUri/read/Customers(1)",
                media_src: "http://someUri/Customers(1)/Image",
                edit_media: "http://someUri/Customers(1)/$value",
                media_etag: "stream-etag-value",
                content_type: "image/jpg"
            }
        };

        var expected = {
            "odata.etag": "etag-value",
            "odata.mediaReadLink": "http://someUri/Customers(1)/Image",
            "odata.mediaEditLink": "http://someUri/Customers(1)/$value",
            "odata.mediaETag": "stream-etag-value",
            "odata.mediaContentType": "image/jpg"
        };

        verifySerializedJsonLightData(data, expected, " Json light entry metadata was serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeCustomAnnotationsTest() {
        var data = {
            __metadata: {
                id: "id"
            },
            "odata.id": "id",
            "custom.annotation": "custom annotation value",
            "p1@ns1.primitive": "primitive",
            "p1@ns2.complex": { a1: 500 },
            "p1@ns3.ns4.value": 600,
            "p2@ns1.primitive": 400,
            "custom.annotation": "custom annotation value"
        };

        var expected = {
            "odata.id": "id",
            "custom.annotation": "custom annotation value",
            "p1@ns1.primitive": "primitive",
            "p1@ns2.complex": { a1: 500 },
            "p1@ns3.ns4.value": 600,
            "p2@ns1.primitive": 400
        };

        verifySerializedJsonLightData(data, expected, " Json light custom annotations were serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeEntryCollectionPropertiesTest() {
        var data = {
            __metadata: {
                id: "id",
                properties: {
                    primitiveColArray: { type: "Collection(Edm.Int16)" },
                    primitiveColObject: { type: "Collection(Edm.Int32)" }
                }
            },
            primitiveColArray: [1, 2, 3, 4],
            primitiveColObject: {
                results: [5, 6, 7, 8]
            },
            complexColArray: [{ p1: 100 }, { p1: 200}],
            complexColObject: {
                results: [{ p1: 300 }, { p1: 400}]
            }
        };

        var expected = {
            "primitiveColArray@odata.type": "Collection(Edm.Int16)",
            primitiveColArray: [1, 2, 3, 4],
            "primitiveColObject@odata.type": "Collection(Edm.Int32)",
            primitiveColObject: [5, 6, 7, 8],
            complexColArray: [{ p1: 100 }, { p1: 200}],
            complexColObject: [{ p1: 300 }, { p1: 400}]
        };

        verifySerializedJsonLightData(data, expected, " Json light entry collection properties were serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeEntryDeferredPropertyTest() {
        var data = {
            __metadata: {
                id: "id",
                properties: {
                    deferred: {
                        associationLinkUrl: "http://target/$links"
                    }
                }
            },
            deferred: {
                __deferred: { uri: "http://target" }
            }
        };

        var expected = {
            "deferred@odata.navigationLinkUrl": "http://target"
        };

        verifySerializedJsonLightData(data, expected, " Json light entry deferred property were serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeEntryInlinePropertiesTest() {
        var data = {
            __metadata: {
                id: "id"
            },
            inlineEntry: {
                __metadata: { uri: "", properties: { p1: { type: "Edm.Int64"}} },
                p1: "300"
            },
            inlineBoundEntry: {
                __metadata: { uri: "http://entries(1)", properties: { p1: { type: "Edm.Int64"}} },
                p1: "400"
            },
            inlineFeedArray: [
                {
                    __metadata: { uri: "http://entries(2)" }
                },
                {
                    __metadata: { uri: "", properties: { p1: { type: "Edm.Int32"}} },
                    p1: "600"
                },
                {
                    __metadata: { uri: "http://entries(3)" }
                }
            ],
            inlineFeedObject: {
                __count: 50,
                __next: "next link",
                results: [
                    { __metadata: { uri: "" }, p1: "900" }
                ]
            },
            inlineEmptyFeedObject: {
                results: []
            }
        };

        var expected = {
            inlineEntry: {
                "p1@odata.type": "Edm.Int64",
                p1: "300"
            },
            "inlineBoundEntry@odata.bind": "http://entries(1)",
            inlineFeedArray: [{
                "p1@odata.type": "Edm.Int32",
                p1: "600"
            }],
            "inlineFeedArray@odata.bind": [
                "http://entries(2)",
                "http://entries(3)"
            ],
            inlineFeedObject: [{
                p1: "900"
            }],
            inlineEmptyFeedObject: []
        };

        verifySerializedJsonLightData(data, expected, " Json light entry inline properties were serialized properly.");

    });

    djstest.addTest(function jsonLightSerializeEntryComplexPropertyTest() {
        var data = {
            __metadata: {
                id: "id",
                properties: {
                    complexAsDeferredOnMetadata: {
                        type: "complexAsDeferredOnMetadata.type"
                    },
                    complexAsCol: {
                        type: "complexAsCol.type"
                    }
                }
            },
            complexAsDeferred: {
                __metadata: {
                    type: "complexAsDeferred.type"
                },
                __deferred: { uri: "http://uri" }
            },
            complexAsCol: {
                results: [1, 2, 3, 4]
            },
            complexAsNamedStream: {
                __metadata: {
                    type: "complexAsNamedStream"
                },
                __mediaresource: {
                    content_type: "content type",
                    media_src: "http://source"
                }
            },
            complexAsDeferredOnMetadata: {
                __deferred: { uri: "http://uri2" }
            }
        };

        var expected = {
            complexAsDeferred: {
                "odata.type": "complexAsDeferred.type",
                __deferred: { uri: "http://uri" }
            },
            complexAsCol: {
                "odata.type": "complexAsCol.type",
                results: [1, 2, 3, 4]
            },
            complexAsNamedStream: {
                "odata.type": "complexAsNamedStream",
                __mediaresource: {
                    content_type: "content type",
                    media_src: "http://source"
                }
            },
            complexAsDeferredOnMetadata: {
                "odata.type": "complexAsDeferredOnMetadata.type",
                __deferred: { uri: "http://uri2" }
            }
        };

        verifySerializedJsonLightData(data, expected, " Json light entry complex properties were serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeEntryComplexPropertyMetadataTest() {
        var data = {
            __metadata: {
                id: "id",
                properties: {
                    complex: {
                        type: "this should be overriden",
                        properties: {
                            nested1: {
                                type: "types.complex.nested1",
                                properties: {
                                    nested2: {
                                        type: "types.complex.nested1.nested2"
                                    }
                                }
                            },
                            c1: {
                                type: "Edm.Int64"
                            }
                        }
                    }
                }
            },
            complex: {
                __metadata: {
                    type: "types.complex"
                },
                c1: "500",
                c2: "b",
                nested1: {
                    nested2: {
                    }
                }
            }
        };

        var expected = {
            complex: {
                "odata.type": "types.complex",
                "c1@odata.type": "Edm.Int64",
                c1: "500",
                c2: "b",
                nested1: {
                    "odata.type": "types.complex.nested1",
                    nested2: {
                        "odata.type": "types.complex.nested1.nested2"
                    }
                }
            }
        };

        verifySerializedJsonLightData(data, expected, " Json light entry complex property was serialized properly.");
    });

    djstest.addTest(function jsonLightSerializeLinksDocumentTest() {
        var tests = {
            "Empty uri string": {
                i: { uri: "" },
                e: { url: "" }
            },
            "Null uri string": {
                i: { uri: null },
                e: { url: null }
            },
            "Undefined uri string": {
                i: { uri: undefined },
                e: {}
            },
            "Uri": {
                i: { uri: "http://somUri/EntitySet(1)" },
                e: { url: "http://somUri/EntitySet(1)" }
            }
        };

        for (var name in tests) {
            verifySerializedJsonLightData(tests[name].i, tests[name].e, name + " - Json light links documents whas serialized properly.", "http://someUri/set(3)/$links/navprop");
        }
    });

    djstest.addTest(function jsonLightComputeLinksWithSingleKey() {
        var model = getSampleModel();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "MyId",
            P1: 42
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes('MyId')",
                "edit": "http://someUri/EntityTypes('MyId')",
                "uri": "http://someUri/EntityTypes('MyId')",
                "self": "http://someUri/EntityTypes('MyId')"

            },
            "Id": "MyId",
            "P1": 42
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinksWithMultipleKeys() {
        var model = getSampleModelWithTwoKeys();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "MyId",
            P1: 42
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes(Id='MyId',P1=42)",
                "edit": "http://someUri/EntityTypes(Id='MyId',P1=42)",
                "uri": "http://someUri/EntityTypes(Id='MyId',P1=42)",
                "self": "http://someUri/EntityTypes(Id='MyId',P1=42)"
            },
            "Id": "MyId",
            "P1": 42
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinksWithNonComputedEditLink() {
        var model = getSampleModel();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            "odata.editLink": "EntityTypes('notcomputed')",
            Id: "MyId",
            P1: 42
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes('notcomputed')",
                "edit": "http://someUri/EntityTypes('notcomputed')",
                "uri": "http://someUri/EntityTypes('notcomputed')",
                "self": "http://someUri/EntityTypes('notcomputed')"
            },
            "Id": "MyId",
            "P1": 42
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinksWithSingleConcurrencyProperty() {
        var model = getSampleModelWithOneConcurrencyProperty();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "MyId",
            P1: 42
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes('MyId')",
                "edit": "http://someUri/EntityTypes('MyId')",
                "uri": "http://someUri/EntityTypes('MyId')",
                "self": "http://someUri/EntityTypes('MyId')",
                "etag": "W/\"'MyId'\""
            },
            "Id": "MyId",
            "P1": 42
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinksWithSingleBinaryConcurrencyProperty() {
        var model = getSampleModelWithOneBinaryConcurrencyProperty();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "MyId",
            P1: "AAAAAAAAB9E="
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Binary"} },
                "id": "http://someUri/EntityTypes('MyId')",
                "edit": "http://someUri/EntityTypes('MyId')",
                "uri": "http://someUri/EntityTypes('MyId')",
                "self": "http://someUri/EntityTypes('MyId')",
                "etag": "W/\"X'00000000000007D1'\""
            },
            "Id": "MyId",
            "P1": "AAAAAAAAB9E="
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinkWithMutipleConcurrencyProperty() {
        var model = getSampleModelWithMultipleConcurrencyProperties();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "MyId",
            P1: 42
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes('MyId')",
                "edit": "http://someUri/EntityTypes('MyId')",
                "uri": "http://someUri/EntityTypes('MyId')",
                "self": "http://someUri/EntityTypes('MyId')",
                "etag": "W/\"'MyId',42\""
            },
            "Id": "MyId",
            "P1": 42
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightComputeLinkWithNullConcurrencyProperty() {
        var model = getSampleModelWithMultipleConcurrencyProperties();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "My Id'",
            P1: null
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": { "Id": { "type": "Edm.String" }, "P1": { "type": "Edm.Int32"} },
                "id": "http://someUri/EntityTypes('My%20Id''')",
                "edit": "http://someUri/EntityTypes('My%20Id''')",
                "uri": "http://someUri/EntityTypes('My%20Id''')",
                "self": "http://someUri/EntityTypes('My%20Id''')",
                "etag": "W/\"'My%20Id''',null\""
            },
            "Id": "My Id'",
            "P1": null
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });
    
    djstest.addTest(function jsonLightWithDecimalValue() {
        var model = getSampleModelWithDecimalProperty();
        var input = {
            "odata.metadata": "http://someUri/$metadata#EntityTypes/@Element",
            Id: "5",
            P1: "10.5"
        };

        var expected = {
            "__metadata": {
                "type": "NS.EntityType",
                "properties": {
                    "Id": {
                        "type": "Edm.String"
                    },
                    "P1": {
                        "type": "Edm.Decimal"
                    },
                },
                "id": "http:\/\/someUri\/EntityTypes('5')",
                "uri": "http:\/\/someUri\/EntityTypes('5')",
                "edit": "http:\/\/someUri\/EntityTypes('5')",
                "self": "http:\/\/someUri\/EntityTypes('5')"
            },
            "Id": "5",
            "P1": "10.5"
        };


        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });
    
    djstest.addTest(function jsonLightNavigationPropertyAndAssociationUriShouldBeComputedTest() {
        var model = getSampleModelWithNavPropertiesAndInheritedTypes();
        var input = {
            "odata.metadata": "http://someUri/$metadata#Products/@Element",
            ID: 5,
        };

        var expected = {
            "__metadata": {
                "type": "ODataDemo.Product",
                "properties": {
                    "ID": {
                        "type": "Edm.Int32"
                    },
                    "Category": {
                        "type": "ODataDemo.Category",
                        "associationLinkUrl": "http:\/\/someUri\/Products(5)\/$links\/Category",
                    }
                },
                "id": "http:\/\/someUri\/Products(5)",
                "uri": "http:\/\/someUri\/Products(5)",
                "edit": "http:\/\/someUri\/Products(5)",
                "self": "http:\/\/someUri\/Products(5)"
            },
            "ID": 5,
            "Category": {
                "__deferred": {
                    "uri": "http:\/\/someUri\/Products(5)\/Category"
                }
            }
        };


        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });
    
    djstest.addTest(function jsonLightNullNavigationPropertyShouldNotBeComputedTest() {
        var model = getSampleModelWithNavPropertiesAndInheritedTypes();
        var input = {
            "odata.metadata": "http://someUri/$metadata#Products/@Element",
            ID: 5,
            Category: null
        };

        var expected = {
            "__metadata": {
                "type": "ODataDemo.Product",
                "properties": {
                    "ID": {
                        "type": "Edm.Int32"
                    },
                    "Category": {
                        "type": "ODataDemo.Category",
                        "associationLinkUrl": "http:\/\/someUri\/Products(5)\/$links\/Category",
                         "navigationLinkUrl": "http:\/\/someUri\/Products(5)\/Category"
                    }
                },
                "id": "http:\/\/someUri\/Products(5)",
                "uri": "http:\/\/someUri\/Products(5)",
                "edit": "http:\/\/someUri\/Products(5)",
                "self": "http:\/\/someUri\/Products(5)"
            },
            "ID": 5,
            "Category": null
        };


        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });
    
    djstest.addTest(function jsonLightUrisShouldBeComputedForExpandedEntities() {
        var model = getSampleModelWithNavPropertiesAndInheritedTypes();
        var input = {
            "odata.metadata": "http://someUri/$metadata#Products/@Element",
            ID: 5,
            Category: {
                ID: 1
            }            
        };

        var expected = {
            "__metadata": {
                "type": "ODataDemo.Product",
                "properties": {
                    "ID": {
                        "type": "Edm.Int32"
                    },
                    "Category": {
                        "type": "ODataDemo.Category",
                        "navigationLinkUrl": "http:\/\/someUri\/Products(5)\/Category",
                        "associationLinkUrl": "http:\/\/someUri\/Products(5)\/$links\/Category"
                    }
                },
                "id": "http:\/\/someUri\/Products(5)",
                "uri": "http:\/\/someUri\/Products(5)",
                "edit": "http:\/\/someUri\/Products(5)",
                "self": "http:\/\/someUri\/Products(5)"
            },
            "ID": 5,
            "Category": {
                "__metadata": {
                    "type": "ODataDemo.Category",
                    "properties": {
                        "ID": {
                            "type": "Edm.Int32"
                        },
                        "Products": {
                            "type": "ODataDemo.Product",
                            "associationLinkUrl": "http:\/\/someUri\/Categories(1)\/$links\/Products"
                        }
                    },
                    "id": "http:\/\/someUri\/Categories(1)",
                    "uri": "http:\/\/someUri\/Categories(1)",
                    "edit": "http:\/\/someUri\/Categories(1)",
                    "self": "http:\/\/someUri\/Categories(1)"
                },
                "ID": 1,
                "Products": {
                    "__deferred": {
                        "uri": "http:\/\/someUri\/Categories(1)\/Products"
                    }
                }
            }
        };

        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();
    });

    djstest.addTest(function jsonLightUrisShouldBeComputedForInheritedTypes() {
        var model = getSampleModelWithNavPropertiesAndInheritedTypes();
        var input = {
            "odata.metadata": "http:\/myexample.com\/MyService.svc\/$metadata#Products\/@Element",
            "odata.type": "ODataDemo.FeaturedProduct",
            "ID": 9,
        };

        var expected = {
            "__metadata": {
                "type": "ODataDemo.FeaturedProduct",
                "properties": {
                    "ID": {
                        "type": "Edm.Int32"
                    },
                    "Advertisement": {
                        "type": "ODataDemo.Advertisement",
                        "associationLinkUrl": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/$links\/Advertisement"
                    },
                    "Category": {
                        "type": null,
                        "associationLinkUrl": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/$links\/Category"
                    }
                },
                "id": "http:\/myexample.com\/MyService.svc\/Products(9)",
                "uri": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct",
                "edit": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct",
                "self": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct"
            },
            "ID": 9,
            "Advertisement": {
                "__deferred": {
                    "uri": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/Advertisement"
                }
            },
            "Category": {
                "__deferred": {
                    "uri": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/Category"
                }
            }
        };
        verifyReadJsonLightWithMinimalMetadata(input, expected, "Json light type annotations in payload are preferred over type information in the metadata document", model);
        djstest.done();

    });
    
    
    djstest.addTest(function jsonLightUrisShouldBeComputedForExpandedTypesOnFeedWithInheritedTypes() {
        var model = getSampleModelWithNavPropertiesAndInheritedTypes();
      
        var input = {
             "odata.metadata": "http:\/myexample.com\/MyService.svc\/$metadata#Products",
             value: 
             [
                 {
                    "odata.type": "ODataDemo.FeaturedProduct",
                    "Category": {
                        "ID": 1,
                    },
                    "ID": 9,
                }
             ]                          
        };
        var expected = {
            "results": [
                {
                    "Advertisement": {
                        "__deferred": {
                            "uri": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/Advertisement"
                        }
                    },
                    "Category": {
                        "ID": 1,
                        "Products": {
                            "__deferred": {
                                "uri": "http:\/myexample.com\/MyService.svc\/Categories(1)\/Products"
                            }
                        },
                        "__metadata": {
                            "edit": "http:\/myexample.com\/MyService.svc\/Categories(1)",
                            "id": "http:\/myexample.com\/MyService.svc\/Categories(1)",
                            "properties": {
                                "ID": {
                                    "type": "Edm.Int32"
                                },
                                "Products": {
                                    "associationLinkUrl": "http:\/myexample.com\/MyService.svc\/Categories(1)\/$links\/Products",
                                    "type": "ODataDemo.Product"
                                }
                            },
                            "self": "http:\/myexample.com\/MyService.svc\/Categories(1)",
                            "type": "ODataDemo.Category",
                            "uri": "http:\/myexample.com\/MyService.svc\/Categories(1)"
                        }
                    },
                    "ID": 9,
                    "__metadata": {
                        "edit": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct",
                        "id": "http:\/myexample.com\/MyService.svc\/Products(9)",
                        "properties": {
                            "Advertisement": {
                                "associationLinkUrl": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/$links\/Advertisement",
                                "type": "ODataDemo.Advertisement"
                            },
                            "Category": {
                                "associationLinkUrl": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/$links\/Category",
                                "navigationLinkUrl": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct\/Category",
                                "type": "ODataDemo.Category"
                            },
                            "ID": {
                                "type": "Edm.Int32"
                            }
                        },
                        "self": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct",
                        "type": "ODataDemo.FeaturedProduct",
                        "uri": "http:\/myexample.com\/MyService.svc\/Products(9)\/ODataDemo.FeaturedProduct"
                    }
                }
            ]
        };
        verifyReadJsonLightWithMinimalMetadata(input, expected, "JsonLight with minimalmetadata uris should be computed for expanded types on feed with inherited types", model);
        djstest.done();

    });

    // DATAJS INTERNAL END
})(this);
