/*jslint nomen: true*/
/*globals define, window*/

// since jscoverage strips named defines, we mock the data directly as defined (in require.js)
require.s.contexts._.defined['de_epages/externalcontent/gadgetdialog/JSONGetGadgetInformation'] = {
    "GadgetGroups": [{
        "Alias": "Information",
        "Gadgets": [{
            "Alias": "RSS"
        }, {
            "Alias": "Maps"
        }, {
            "Alias": "Translation"
        }]
    }, {
        "Alias": "Multimedia",
        "Gadgets": [{
            "Alias": "ExternalVideo"
        }, {
            "Alias": "ContentSlider"
        }]
    }, {
        "Alias": "Social",
        "Gadgets": [{
            "Alias": "Facebook"
        }, {
            "Alias": "Twitter"
        }, {
            "Alias": "GooglePlus"
        }, {
            "Alias": "OtherButtons"
        }]
    }]
};

define([
    'jquery',
    'testsuite/qunit',
    './main-view',

    '$ready!'
    /**
     * gadgetsdialog test case: constants
     * @param  {[type]} $               jQuery
     * @param  {[type]} QUnit           QUnit
     * @param  {[type]} Mainview        Instance of main view
     */
], function ($, QUnit, Mainview) {
    'use strict';

    var mainview,
        testObject = {},
        optionsRss = {
            gadget: {
                alias: 'rss',
                options: {}
            },
            callback: function (_data) {
                testObject = _data;
            }
        },
        optionsOverview = {
            gadget: null
        };

    QUnit.module('de_epages/externalcontent/gadgetdialog/main-view', {
        setup: function () {
            mainview = new Mainview();
        },
        teardown: function () {
            $('.ui-dialog').remove();
        }
    });

    QUnit.test('Check methods of main-view', function () {

        $.each([
            'close',
            'open',
            'apply',
            'removeContent',
            'renderWith',
            'select',
            'updateContentView',
            'initialize'
        ], function () {
            QUnit.strictEqual(
                $.isFunction(mainview[this]),
                true,
                'Check if *' + this + '* is a function of *main-view*'
            );
        });
    });

    QUnit.asyncTest('Check dom nodes and dialog handling (overview and rss gadget)', function () {

        mainview.open(optionsOverview);

        window.setTimeout(function () {

            QUnit.strictEqual(
                $('.ui-dialog').length > 0 && $('.ui-dialog').is(':visible'),
                true,
                'Open(): Check if gadget dialog is created and visible'
            );

            $('.ui-dialog input[value=RSS]').trigger('click').trigger('change');

            window.setTimeout(function () {
                QUnit.strictEqual(
                    $('form#ep-gadgets-rss').length > 0,
                    true,
                    'Open(): Check if content (rss gadget) is rendered'
                );

                mainview.close();
                QUnit.strictEqual(
                    $('.ui-dialog').is(':visible'),
                    false,
                    'Close(): Check if gadget dialog is hidden'
                );

                QUnit.start();
            }, 200);

        }, 200);
    });

    QUnit.asyncTest('Check *apply* button functionality', function () {
        mainview.open(optionsRss);

        window.setTimeout(function () {
            $('.ui-dialog input[type=url]').val('http://feeds2.feedburner.com/ComputerbaseNews');
            $($('.ui-dialog .ui-dialog-buttonset button')[0]).trigger('click');

            QUnit.deepEqual(
                testObject, {
                    alias: "rss",
                    cartridge: "externalcontent",
                    options: {
                        layout: "default",
                        numberOfEntries: 10,
                        onlyHeadlines: false,
                        onlySnippets: false,
                        showImages: true,
                        url: ""
                    }
                },
                'Check if callback returns default values on apply'
            );

            QUnit.start();
        }, 200);
    });
});