/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the Source EULA. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import * as assert from 'assert';
import TableComponent from 'sql/workbench/browser/modelComponents/table.component';
import { NullLogService } from 'vs/platform/log/common/log';

suite('TableComponent Tests', () => {

	setup(() => {

	});

	test('Table transformData should convert data and columns successfully given valid inputs', () => {
		let data = [
			['1', '2', '2'],
			['4', '5', '6']
		];
		let columns = ['c1', 'c2', 'c3'];
		const tableComponent = new TableComponent(undefined, undefined, new NullLogService(), undefined, undefined, undefined, undefined, undefined, undefined);

		let actual = tableComponent.transformData(data, columns);
		let expected: { [key: string]: string }[] = [
			{
				'c1': '1',
				'c2': '2',
				'c3': '2'
			},
			{
				'c1': '4',
				'c2': '5',
				'c3': '6'
			}
		];
		assert.deepStrictEqual(actual, expected);
	});

	test('Table transformData should return empty array given undefined rows', () => {
		let data = undefined;
		const tableComponent = new TableComponent(undefined, undefined, new NullLogService(), undefined, undefined, undefined, undefined, undefined, undefined);
		let columns = ['c1', 'c2', 'c3'];
		let actual = tableComponent.transformData(data, columns);
		let expected: { [key: string]: string }[] = [];
		assert.deepStrictEqual(actual, expected);
	});

	test('Table transformData should return empty array given undefined columns', () => {
		let data = [
			['1', '2', '2'],
			['4', '5', '6']
		];
		let columns;
		const tableComponent = new TableComponent(undefined, undefined, new NullLogService(), undefined, undefined, undefined, undefined, undefined, undefined);
		let actual = tableComponent.transformData(data, columns);
		let expected: { [key: string]: string }[] = [];
		assert.deepStrictEqual(actual, expected);
	});

	test('Table transformData should return array matched with columns given rows with missing column', () => {
		let data = [
			['1', '2'],
			['4', '5']
		];
		const tableComponent = new TableComponent(undefined, undefined, new NullLogService(), undefined, undefined, undefined, undefined, undefined, undefined);
		let columns = ['c1', 'c2', 'c3'];
		let actual = tableComponent.transformData(data, columns);
		let expected: { [key: string]: string }[] = [
			{
				'c1': '1',
				'c2': '2'
			},
			{
				'c1': '4',
				'c2': '5'
			}
		];
		assert.deepStrictEqual(actual, expected);
	});
});
