// Copyright (c) 2015-2016 Yuya Ochiai
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
'use strict';

// const fs = require('fs');

// const path = require('path');
// const http = require('http');

// const env = require('../modules/environment');

// describe.skip('security', function desc() {
//   this.timeout(30000);

//   const serverPort = 8181;
//   const testURL = `http://localhost:${serverPort}`;

//   const config = {
//     version: 2,
//     teams: [{
//       name: 'example_1',
//       url: testURL,
//       order: 0,
//     }, {
//       name: 'example_2',
//       url: testURL,
//       order: 1,
//     }],
//   };

//   before(() => {
//     this.server = http.createServer((req, res) => {
//       res.writeHead(200, {
//         'Content-Type': 'text/html',
//       });
//       res.end(fs.readFileSync(path.resolve(env.sourceRootDir, 'test/modules/test.html'), 'utf-8'));
//     }).listen(serverPort, '127.0.0.1');
//   });

//   beforeEach(() => {
//     fs.writeFileSync(env.configFilePath, JSON.stringify(config));
//     this.app = env.getSpectronApp();
//     return this.app.start();
//   });

//   afterEach(() => {
//     if (this.app && this.app.isRunning()) {
//       return this.app.stop();
//     }
//     return true;
//   });

//   after((done) => {
//     this.server.close(done);
//   });

//   it('should NOT be able to call Node.js API in webview', () => {
//     env.addClientCommands(this.app.client);

//     // webview is handled as a window by chromedriver.
//     return this.app.client.
//       windowByIndex(1).isNodeEnabled().then((enabled) => {
//         enabled.should.be.false;
//       }).
//       windowByIndex(2).isNodeEnabled().then((enabled) => {
//         enabled.should.be.false;
//       }).
//       windowByIndex(0).
//       getAttribute('webview', 'nodeintegration').then((nodeintegration) => {
//         // nodeintegration is an array of string
//         nodeintegration.forEach((n) => {
//           n.should.equal('false');
//         });
//       });
//   });

//   it('should NOT be able to call Node.js API in a new window', () => {
//     env.addClientCommands(this.app.client);
//     const client = this.app.client;
//     return this.app.client.
//       windowByIndex(1). // in the first webview
//       execute(() => {
//         open_window();
//       }).
//       waitUntil(() => {
//         return client.windowHandles().then((handles) => {
//           return handles.value.length === 4;
//         });
//       }, 5000, 'expected a new window').
//       windowByIndex(3).isNodeEnabled().then((enabled) => {
//         enabled.should.be.false;
//       });
//   });

//   it('should NOT be able to call eval() in any window', () => {
//     env.addClientCommands(this.app.client);
//     const tryEval = (index) => {
//       return this.app.client.
//         windowByIndex(index).
//         execute(() => {
//           return eval('1 + 1');
//         }).then((result) => {
//           throw new Error(`Promise was unexpectedly fulfilled (result: ${result})`);
//         }, (error) => {
//           (error !== null).should.be.true;
//         });
//     };
//     const tryEvalInSettingsPage = () => {
//       return this.app.client.
//         windowByIndex(0).
//         loadSettingsPage().
//         execute(() => {
//           return eval('1 + 1');
//         }).then((result) => {
//           throw new Error(`Promise was unexpectedly fulfilled (result: ${result})`);
//         }, (error) => {
//           (error !== null).should.be.true;
//         });
//     };
//     return Promise.all([
//       tryEval(0),
//       tryEvalInSettingsPage(),
//     ]);
//   });
// });
