import nock from 'nock';

import {
	deleteLightResponse,
	getLightsResponse,
	getConfigResponse,
	updateLightResponse,
} from './apiResponses';
import {
	setup,
	equalityTest,
	workflowToTests,
	getWorkflowFilenames,
} from '../../../test/nodes/Helpers';

describe('PhilipsHue', () => {
	describe('Run workflow', () => {
		const workflows = getWorkflowFilenames(__dirname);
		const tests = workflowToTests(workflows);

		beforeAll(() => {
			nock.disableNetConnect();

			const mock = nock('https://api.meethue.com/route');
			mock.persist().get('/api/0/config').reply(200, getConfigResponse);
			mock.get('/api/pAtwdCV8NZId25Gk/lights').reply(200, getLightsResponse);
			mock.put('/api/pAtwdCV8NZId25Gk/lights/1/state').reply(200, updateLightResponse);
			mock.delete('/api/pAtwdCV8NZId25Gk/lights/1').reply(200, deleteLightResponse);
		});

		afterAll(() => {
			nock.restore();
		});

		const nodeTypes = setup(tests);

		for (const testData of tests) {
			test(testData.description, async () => await equalityTest(testData, nodeTypes));
		}
	});
});
