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

define([
    'jquery',
    'testsuite/qunit',
    'de_epages/shop/linkpicker/linktextview',
    '$ready!'
/**
 * linkpicker test case: additionalpagesview
 * @param  {[type]} QUnit      [description]
 * @param  {[type]} $          [description]
 * @param  {[type]} Linkpicker [description]
 * @return {[type]}            [description]
 */
], function ($, QUnit, Linktextview) {
    'use strict';

    var container = $('#qunit-fixture'),
        data = {},
        linktextview = new Linktextview(),
        view = linktextview.render().$el;

    QUnit.module("de_epages/shop/linkpicker/linktextview");

    QUnit.test("Linkpicker-linktextview Prototype", function () {

        $.each([
            'render',
            'getLinkText',
            'setLinkText',
            'setLinkUrl',
            'setLinkTarget',
            '_openPreview',
            '_publishLinkText',
            '_publishTargetOption'], function (i, fn) {

            QUnit.deepEqual($.isFunction(linktextview[fn]), true, "Check whether " + fn + " is a function: $.isFunction(linktextview.prototype['" + fn + "'] )");
        });
    });

    QUnit.test("Rendered Template and UI", function () {

        container.empty().append(view);
        QUnit.strictEqual(container.html(), '<div>' + view.html() + '</div>', 'Template is rendered correctly');

        linktextview.setLinkText('Test Link 1');
        QUnit.strictEqual(container.find('#ep-linkpicker-linkText').val(), 'Test Link 1', 'Link text inserted correctly');
        QUnit.strictEqual(linktextview.getLinkText(), 'Test Link 1', 'Link text fetched correctly');

        linktextview.setLinkUrl('www.google.de');
        QUnit.strictEqual($(container.find('.ep-linkpicker-linkPreview')[0]).attr('title'), 'www.google.de', 'Link url inserted correctly (sprite title)');
        QUnit.strictEqual($(container.find('.ep-linkpicker-linkPreview')[1]).attr('title'), 'www.google.de', 'Link url inserted correctly (link title)');

        // check if preview is opened with correct url (should run twice since there are two 'linkpreview' elments [icon, label])
        linktextview.setLinkTarget(true);
        QUnit.strictEqual(container.find('#ep-linkpicker-linkTargetBlank').prop('checked'), true, 'Link target set correctly');

        linktextview.on('previewopened', function (_url) {
            QUnit.strictEqual(_url, 'http://www.google.de', 'Link url converted correctly (forgotten protocol)');
        });
        linktextview.linkPreview.trigger('click');
        linktextview.off('previewopened');

        linktextview.on('previewopened', function (_url) {
            QUnit.strictEqual(_url, 'http://www.DemoShop.de/Shop.sf?ViewAction=Foo', 'Link url converted correctly (relative Link)');
        });
        linktextview.setLinkUrl('?ViewAction=Foo');
        linktextview.linkPreview.trigger('click');
        linktextview.off('previewopened');

        linktextview.on('previewopened', function (_url) {
            QUnit.strictEqual(_url, 'http://www.DemoShop.de/WebRoot/image.png', 'Link url converted correctly (file)');
        });
        linktextview.setLinkUrl('/WebRoot/image.png');
        linktextview.linkPreview.trigger('click');
        linktextview.off('previewopened');
    });
});