import React, { Component } from 'react';
import ReactTestUtils from 'react-dom/test-utils';
import { Dobbeldatovelger } from '../../../main/javascript/skjema/Dobbeldatovelger';

var verdier;

const mottaVerdier = jasmine.createSpy().and.callFake(function (v) {
	verdier = v;
});

class Stub extends Component {
	render() {
		return null;
	}
}

class DobbeldatovelgerStub extends Dobbeldatovelger {
	render() {
		return (
			<Stub
				getVerdier={() => this.props.verdier()}
				setStart={(v) => this._mottaStart(v)}
				setSlutt={(v) => this._mottaSlutt(v)}
			/>
		);
	}
}

describe('DobbeldatovelgerStub', function () {
	var instans;
	describe('datoer er satte', function () {
		var dobbeldatovelger;
		var startdato = new Date(2018, 6, 7);
		var sluttdato = new Date(2019, 3, 5);
		beforeEach(function () {
			verdier = [startdato, sluttdato];
			instans = ReactTestUtils.renderIntoDocument(
				<DobbeldatovelgerStub
					tittel={
						'Dobbeldatovelger.PropTypes tilsier at det skal være en tittel'
					}
					verdier={() => verdier}
					vedVerdier={mottaVerdier}
				/>
			);
			dobbeldatovelger = ReactTestUtils.findRenderedComponentWithType(
				instans,
				Stub
			);
		});
		it('datoer er vist', function () {
			expect(dobbeldatovelger.props.getVerdier()).toEqual([
				startdato,
				sluttdato,
			]);
		});
		describe('startdato settes før sluttdato', function () {
			var nystartdato = new Date(2018, 6, 8);
			beforeEach(function () {
				dobbeldatovelger.props.setStart(nystartdato);
			});
			it('bare startdato endres', function () {
				expect(dobbeldatovelger.props.getVerdier()).toEqual([
					nystartdato,
					sluttdato,
				]);
				expect(mottaVerdier.calls.mostRecent().args[0]).toEqual([
					nystartdato,
					sluttdato,
				]);
			});
		});
		describe('startdato settes etter sluttdato', function () {
			var nystartdato = new Date(2019, 6, 7);
			beforeEach(function () {
				dobbeldatovelger.props.setStart(nystartdato);
			});
		});
		describe('sluttdato settes før startdato', function () {
			var nysluttdato = new Date(2018, 3, 5);
			beforeEach(function () {
				dobbeldatovelger.props.setSlutt(nysluttdato);
			});
		});
	});
});
