/* global describe,it */

var getSlug = require('../lib/speakingurl');

describe('getSlug languages', function () {
    'use strict';

    it('should replace language specific symbols', function (done) {

        var symbolMap = {
            'ar': {
                '∆': 'delta',
                '∞': 'la-nihaya',
                '♥': 'hob',
                '&': 'wa',
                '|': 'aw',
                '<': 'aqal-men',
                '>': 'akbar-men',
                '∑': 'majmou',
                '¤': 'omla'
            },

            'cz': {
                '∆': 'delta',
                '∞': 'nekonecno',
                '♥': 'laska',
                '&': 'a',
                '|': 'nebo',
                '<': 'mene jako',
                '>': 'vice jako',
                '∑': 'soucet',
                '¤': 'mena'
            },

            'de': {
                '∆': 'delta',
                '∞': 'unendlich',
                '♥': 'Liebe',
                '&': 'und',
                '|': 'oder',
                '<': 'kleiner als',
                '>': 'groesser als',
                '∑': 'Summe von',
                '¤': 'Waehrung'
            },

            'en': {
                '∆': 'delta',
                '∞': 'infinity',
                '♥': 'love',
                '&': 'and',
                '|': 'or',
                '<': 'less than',
                '>': 'greater than',
                '∑': 'sum',
                '¤': 'currency'
            },

            'es': {
                '∆': 'delta',
                '∞': 'infinito',
                '♥': 'amor',
                '&': 'y',
                '|': 'u',
                '<': 'menos que',
                '>': 'mas que',
                '∑': 'suma de los',
                '¤': 'moneda'
            },

            'fr': {
                '∆': 'delta',
                '∞': 'infiniment',
                '♥': 'Amour',
                '&': 'et',
                '|': 'ou',
                '<': 'moins que',
                '>': 'superieure a',
                '∑': 'somme des',
                '¤': 'monnaie'
            },

            'hu': {
                '∆': 'delta',
                '∞': 'vegtelen',
                '♥': 'szerelem',
                '&': 'es',
                '|': 'vagy',
                '<': 'kisebb mint',
                '>': 'nagyobb mint',
                '∑': 'szumma',
                '¤': 'penznem'
            },

            'my': {
                '∆': 'kwahkhyaet',
                '∞': 'asaonasme',
                '♥': 'akhyait',
                '&': 'nhin',
                '|': 'tho',
                '<': 'ngethaw',
                '>': 'kyithaw',
                '∑': 'paungld',
                '¤': 'ngwekye'
            },

            'nl': {
                '∆': 'delta',
                '∞': 'oneindig',
                '♥': 'liefde',
                '&': 'en',
                '|': 'of',
                '<': 'kleiner dan',
                '>': 'groter dan',
                '∑': 'som',
                '¤': 'valuta'
            },

            'it': {
                '∆': 'delta',
                '∞': 'infinito',
                '♥': 'amore',
                '&': 'e',
                '|': 'o',
                '<': 'minore di',
                '>': 'maggiore di',
                '∑': 'somma',
                '¤': 'moneta'
            },

            'pl': {
                '∆': 'delta',
                '∞': 'nieskonczonosc',
                '♥': 'milosc',
                '&': 'i',
                '|': 'lub',
                '<': 'mniejsze niz',
                '>': 'wieksze niz',
                '∑': 'suma',
                '¤': 'waluta'
            },

            'pt': {
                '∆': 'delta',
                '∞': 'infinito',
                '♥': 'amor',
                '&': 'e',
                '|': 'ou',
                '<': 'menor que',
                '>': 'maior que',
                '∑': 'soma',
                '¤': 'moeda'
            },

            'ru': {
                '∆': 'delta',
                '∞': 'beskonechno',
                '♥': 'lubov',
                '&': 'i',
                '|': 'ili',
                '<': 'menshe',
                '>': 'bolshe',
                '∑': 'summa',
                '¤': 'valjuta'
            },

            'sk': {
                '∆': 'delta',
                '∞': 'nekonecno',
                '♥': 'laska',
                '&': 'a',
                '|': 'alebo',
                '<': 'menej ako',
                '>': 'viac ako',
                '∑': 'sucet',
                '¤': 'mena'
            },

            'tr': {
                '∆': 'delta',
                '∞': 'sonsuzluk',
                '♥': 'ask',
                '&': 've',
                '|': 'veya',
                '<': 'kucuktur',
                '>': 'buyuktur',
                '∑': 'toplam',
                '¤': 'para birimi'
            },

            'vn': {
                '∆': 'delta',
                '∞': 'vo cuc',
                '♥': 'yeu',
                '&': 'va',
                '|': 'hoac',
                '<': 'nho hon',
                '>': 'lon hon',
                '∑': 'tong',
                '¤': 'tien te'
            }

        };

        Object.keys(symbolMap)
            .forEach(function (l) {

                // console.log('\ncheck language: ' + l);

                Object.keys(symbolMap[l])
                    .forEach(function (s) {

                        var k = symbolMap[l][s];

                        // console.log('check symbol: ' + s);

                        getSlug('Foo ' + s + ' Bar', {
                                lang: l,
                                maintainCase: true
                            })
                            .should.eql('Foo-' + getSlug(k, {
                                maintainCase: true
                            }) + '-Bar');

                        getSlug('Foo ' + s + ' Bar', {
                                lang: l
                            })
                            .should.eql('foo-' + getSlug(k) + '-bar');

                    });

            });

        getSlug('EN Foo & Bar ')
            .should.eql('en-foo-and-bar');

        getSlug('EN Foo & Bar ', {
                lang: "en"
            })
            .should.eql('en-foo-and-bar');

        getSlug('de Foo & Bar ', {
                lang: "de"
            })
            .should.eql('de-foo-und-bar');

        getSlug('True Foo & Bar ', {
                lang: true
            })
            .should.eql('true-foo-and-bar');

        getSlug('False Foo & Bar ', {
                lang: false
            })
            .should.eql('false-foo-bar');

        getSlug('False Foo & Bar ', {
                lang: false,
                symbols: true
            })
            .should.eql('false-foo-bar');

        getSlug('xx Foo & Bar ', {
                lang: "xx"
            })
            .should.eql('xx-foo-and-bar');

        getSlug('obj Foo & Bar ', {
                lang: {}
            })
            .should.eql('obj-foo-and-bar');

        getSlug('array Foo & Bar ', {
                lang: []
            })
            .should.eql('array-foo-and-bar');

        getSlug('array Foo & Bar ', {
                lang: [],
                symbols: false
            })
            .should.eql('array-foo-bar');

        getSlug('null Foo & Bar ', {
                lang: null
            })
            .should.eql('null-foo-and-bar');

        getSlug('null Foo & Bar ', {
                lang: null,
                symbols: false
            })
            .should.eql('null-foo-bar');

        getSlug('null Foo & Bar ', {
                lang: null,
                symbols: true
            })
            .should.eql('null-foo-and-bar');

        done();

    });
});
