﻿/// <reference path="common/djstest.js" />
/// <reference path="../src/odata.js" />
/// <reference path="common/ODataReadOracle.js" />

(function (window, undefined) {
    var unexpectedErrorHandler = function (err) {
        djstest.assert(false, "Unexpected call to error handler with error: " + djstest.toString(err));
        djstest.done();
    };

    var uriRegEx = /^([^:/?#]+:)?(\/\/[^/?#]*)?([^?#:]+)?(\?[^#]*)?(#.*)?/;
    var uriPartNames = ["scheme", "authority", "path", "query", "fragment"];

    var getURIInfo = function (uri) {
        /// <summary>Gets information about the components of the specified URI.</summary>
        /// <param name="uri" type="String">URI to get information from.</param>
        /// <returns type="Object">
        /// An object with an isAbsolute flag and part names (scheme, authority, etc.) if available.
        /// </returns>

        var result = { isAbsolute: false };

        if (uri) {
            var matches = uriRegEx.exec(uri);
            if (matches) {
                var i, len;
                for (i = 0, len = uriPartNames.length; i < len; i++) {
                    if (matches[i + 1]) {
                        result[uriPartNames[i]] = matches[i + 1];
                    }
                }
            }
            if (result.scheme) {
                result.isAbsolute = true;
            }
        }

        return result;
    };

    var normalizeURI = function (uri, base) {
        /// <summary>Normalizes a possibly relative URI with a base URI.</summary>
        /// <param name="uri" type="String">URI to normalize, absolute or relative.</param>
        /// <param name="base" type="String" mayBeNull="true">Base URI to compose with.</param>
        /// <returns type="String">The composed URI if relative; the original one if absolute.</returns>

        if (!base) {
            return uri;
        }

        var uriInfo = getURIInfo(uri);
        if (uriInfo.isAbsolute) {
            return uri;
        }

        var baseInfo = getURIInfo(base);
        var normInfo = {};

        if (uriInfo.authority) {
            normInfo.authority = uriInfo.authority;
            normInfo.path = uriInfo.path;
            normInfo.query = uriInfo.query;
        } else {
            if (!uriInfo.path) {
                normInfo.path = baseInfo.path;
                normInfo.query = uriInfo.query || baseInfo.query;
            } else {
                if (uriInfo.path.charAt(0) === '/') {
                    normInfo.path = uriInfo.path;
                } else {
                    normInfo.path = mergeUriPathWithBase(uriInfo, baseInfo);
                }

                normInfo.query = uriInfo.query;
            }

            normInfo.authority = baseInfo.authority;
        }

        normInfo.scheme = baseInfo.scheme;
        normInfo.fragment = uriInfo.fragment;

        return "".concat(
            normInfo.scheme || "",
            normInfo.authority || "",
            normInfo.path || "",
            normInfo.query || "",
            normInfo.fragment || "");
    };

    var mergeUriPathWithBase = function (uriInfo, baseInfo) {
        /// <summary>Merges the path of a relative URI and a base URI.</summary>
        /// <param name="uriInfo">URI component information for the relative URI.</param>
        /// <param name="baseInfo">URI component information for the base URI.</param>
        /// <returns type="String">A string with the merged path.</returns>

        var basePath = "/";
        if (baseInfo.path) {
            var end = baseInfo.path.lastIndexOf("/");
            basePath = baseInfo.path.substring(0, end);

            if (basePath.charAt(basePath.length - 1) !== "/") {
                basePath = basePath + "/";
            }
        }

        return basePath + uriInfo.path;
    };

    var services = [
        "./endpoints/FoodStoreDataServiceV4.svc"
    ];

    var mimeTypes = [undefined, "application/json;odata.metadata=minimal"/*, "application/xml"*/];

    var httpStatusCode = {
        created: 201,
        noContent: 204,
        notFound: 404
    };

    $.each(services, function (_, service) {

        var foodsFeed = service + "/Foods";
        var categoriesFeed = service + "/Categories";

        var baseLinkUri = normalizeURI(service.substr(2), window.location.href);

        var newFoodLinks = {
            "@odata.id": baseLinkUri + "/Foods" + "(1)"
        };

        var newCategoryLinks = {
            "@odata.id": baseLinkUri + "/Categories" + "(2)"
        };


        module("Functional", {
            setup: function () {
                djstest.wait(function (done) {
                    $.post(service + "/ResetData", done);
                });
            }
        });

        var readLinksFeed = categoriesFeed + "(1)/Foods/$ref";
        var readLinksEntry = foodsFeed + "(0)/Category/$ref";

        $.each(mimeTypes, function (_, mimeType) {

            var headers = mimeType ? { "Content-Type": mimeType, Accept: mimeType} : undefined;

            djstest.addTest(function readValidLinksFeedTests(params) {
                djstest.assertsExpected(1);
                odatajs.oData.read({ requestUri: params.linksFeed, headers: headers },
                    function (data, response) {
                        window.ODataReadOracle.readLinksFeed(params.linksFeed,
                            function (expectedData) {
                                djstest.assertAreEqualDeep(data, expectedData, "Response data not same as expected");
                                djstest.done();
                            }, params.mimeType
                        );
                    },
                    unexpectedErrorHandler
                );
            }, "Testing valid read of " + readLinksFeed + " with " + mimeType, { linksFeed: readLinksFeed, mimeType: mimeType });

            djstest.addTest(function readValidLinksEntryTest(params) {
                djstest.assertsExpected(1);
                odatajs.oData.read({ requestUri: params.linksEntry, headers: headers },
                    function (data, response) {
                        window.ODataReadOracle.readLinksEntry(params.linksEntry,
                            function (expectedData) {
                                djstest.assertAreEqualDeep(data, expectedData, "Response data not same as expected");
                                djstest.done();
                            }, params.mimeType
                        );
                    },
                    unexpectedErrorHandler
                );
            }, "Testing valid read of " + readLinksEntry + " with " + mimeType, { linksEntry: readLinksEntry, mimeType: mimeType });

            djstest.addTest(function addLinksEntityTest(mimeType) {

                var request = {
                    requestUri: foodsFeed + "(1)/Category/$ref",
                    method: "PUT",
                    headers: djstest.clone(headers),
                    data: newCategoryLinks
                };


                odatajs.oData.request(request, function (data, response) {
                    var httpOperation = request.method + " " + request.requestUri;
                    djstest.assertAreEqual(response.statusCode, httpStatusCode.noContent, "Verify response code: " + httpOperation);
                    ODataReadOracle.readLinksEntry(request.requestUri, function (actualData) {
                        if (actualData && actualData["@odata.context"]) {
                            delete actualData["@odata.context"];
                        }
                        
                        djstest.assertAreEqualDeep(actualData, request.data, "Verify new links entry against the request: " + httpOperation);
                        djstest.done();
                    });
                }, unexpectedErrorHandler);

            }, "Add new links entity (mimeType = " + mimeType + " service = " + service + ")", mimeType);

            djstest.addTest(function addLinksFeedTest(mimeType) {

                var request = {
                    requestUri: categoriesFeed + "(2)/Foods/$ref",
                    method: "POST",
                    headers: djstest.clone(headers),
                    data: newFoodLinks
                };

                odatajs.oData.request(request, function (data, response) {

                    var httpOperation = request.method + " " + request.requestUri;
                    djstest.assertAreEqual(response.statusCode, httpStatusCode.noContent, "Verify response code: " + httpOperation);

                    odatajs.oData.read(request.requestUri, function (data, response) {
                        ODataReadOracle.readLinksFeed(request.requestUri, function (actualData) {
                            djstest.assertAreEqualDeep(actualData, response.data, "Verify updated links entry against the request: " + httpOperation);
                            djstest.done();
                        });
                    });
                }, unexpectedErrorHandler);
            }, "Update entity (mimeType = " + mimeType + " service = " + service + ")", mimeType);
        });
    });
})(this);