describe('c3 chart title', function () {
    'use strict';

    var chart, config;

    describe('when given a title config option', function () {
        describe('with no padding and no position', function () {
            beforeEach(function(done) {
                config = {
                    data: {
                        columns: [
                            ['data1', 30, 200, 100, 400, 150, 250]
                        ]
                    },
                    title: {
                        text: 'new title'
                    }
                };
                chart = window.initChart(chart, config, done);
            });

            it('renders the title at the default config position', function () {
                var titleEl = d3.select(".c3-title");
                expect(+titleEl.attr("x")).toBeCloseTo(294, -2);
                expect(+titleEl.attr("y")).toEqual(titleEl.node().getBBox().height);
            });

            it('renders the title text', function () {
                var titleEl = d3.select(".c3-title");
                expect(titleEl.node().textContent).toEqual('new title');
            });
        });

        describe('with padding', function () {
            var config, getConfig = function (titlePosition) {
                return {
                    data: {
                        columns: [
                            ['data1', 30, 200, 100, 400, 150, 250]
                        ]
                    },
                    title: {
                        text: 'positioned title',
                        padding: {
                            top: 20,
                            right: 30,
                            bottom: 40,
                            left: 50
                        },
                        position: titlePosition
                    }
                };
            };

            describe('and position center', function () {
                beforeEach(function(done) {
                    config = getConfig('top-center');
                    chart = window.initChart(chart, config, done);
                });
                it('renders the title at the default config position', function () {
                    var titleEl = d3.select(".c3-title");
                    expect(+titleEl.attr("x")).toBeCloseTo(275, -2);
                    expect(+titleEl.attr("y")).toBeCloseTo(34, -1);
                });
                it('adds the correct amount of padding to fit the title', function() {
                    expect(chart.internal.getCurrentPaddingTop()).toEqual(
                        config.title.padding.top + d3.select('.c3-title').node().getBBox().height + config.title.padding.bottom
                    );
                });
            });

            describe('and position left', function () {
                beforeEach(function(done) {
                    config = getConfig('top-left');
                    chart = window.initChart(chart, config, done);
                });
                it('renders the title at the default config position', function () {
                    var titleEl = d3.select(".c3-title");
                    expect(+titleEl.attr("x")).toBeCloseTo(50, -1);
                    expect(+titleEl.attr("y")).toBeCloseTo(34, -1);
                });
            });

            describe('and position right', function () {
                beforeEach(function(done) {
                    config = getConfig('top-right');
                    chart = window.initChart(chart, config, done);
                });
                it('renders the title at the default config position', function () {
                    var titleEl = d3.select(".c3-title");
                    expect(+titleEl.attr("x")).toBeCloseTo(520, -2);
                    expect(+titleEl.attr("y")).toBeCloseTo(34, -1);
                });
            });

        });
    });
});