electron/spec/api-session-spec.coffee

139 lines
5.4 KiB
CoffeeScript
Raw Normal View History

assert = require 'assert'
http = require 'http'
path = require 'path'
2015-09-21 13:44:51 +00:00
fs = require 'fs'
{ipcRenderer, remote} = require 'electron'
{app, ipcMain, session, BrowserWindow} = remote
2015-06-16 02:37:39 +00:00
describe 'session module', ->
@timeout 10000
fixtures = path.resolve __dirname, 'fixtures'
2015-06-16 02:37:39 +00:00
w = null
2015-06-20 02:42:18 +00:00
url = "http://127.0.0.1"
beforeEach -> w = new BrowserWindow(show: false, width: 400, height: 400)
2015-06-16 02:37:39 +00:00
afterEach -> w.destroy()
it 'should get cookies', (done) ->
server = http.createServer (req, res) ->
res.setHeader('Set-Cookie', ['0=0'])
2015-06-16 02:37:39 +00:00
res.end('finished')
2015-06-20 02:42:18 +00:00
server.close()
2015-06-16 02:37:39 +00:00
2015-07-24 07:49:19 +00:00
server.listen 0, '127.0.0.1', ->
2015-06-16 02:37:39 +00:00
{port} = server.address()
2015-11-13 08:03:40 +00:00
w.loadURL "#{url}:#{port}"
w.webContents.on 'did-finish-load', ->
w.webContents.session.cookies.get {url: url}, (error, list) ->
return done(error) if error
for cookie in list when cookie.name is '0'
if cookie.value is '0'
return done()
else
return done("cookie value is #{cookie.value} while expecting 0")
done('Can not find cookie')
2015-06-16 02:37:39 +00:00
it 'should over-write the existent cookie', (done) ->
session.defaultSession.cookies.set {url: url, name: '1', value: '1'}, (error) ->
return done(error) if error
session.defaultSession.cookies.get {url: url}, (error, list) ->
return done(error) if error
for cookie in list when cookie.name is '1'
if cookie.value is '1'
return done()
else
return done("cookie value is #{cookie.value} while expecting 1")
done('Can not find cookie')
2015-06-16 02:37:39 +00:00
it 'should remove cookies', (done) ->
session.defaultSession.cookies.set {url: url, name: '2', value: '2'}, (error) ->
return done(error) if error
2015-12-12 07:33:51 +00:00
session.defaultSession.cookies.remove url, '2', ->
session.defaultSession.cookies.get {url: url}, (error, list) ->
return done(error) if error
for cookie in list when cookie.name is '2'
2015-12-12 07:33:51 +00:00
return done('Cookie not deleted')
done()
describe 'session.clearStorageData(options)', ->
fixtures = path.resolve __dirname, 'fixtures'
it 'clears localstorage data', (done) ->
2015-11-10 08:04:34 +00:00
ipcMain.on 'count', (event, count) ->
ipcMain.removeAllListeners 'count'
assert not count
done()
2015-11-13 08:03:40 +00:00
w.loadURL 'file://' + path.join(fixtures, 'api', 'localstorage.html')
w.webContents.on 'did-finish-load', ->
2015-07-13 22:22:40 +00:00
options =
origin: "file://",
storages: ['localstorage'],
quotas: ['persistent'],
w.webContents.session.clearStorageData options, ->
w.webContents.send 'getcount'
2015-09-21 13:44:51 +00:00
describe 'DownloadItem', ->
2015-09-24 07:55:45 +00:00
# A 5 MB mock pdf.
mockPDF = new Buffer 1024 * 1024 * 5
2015-09-21 13:44:51 +00:00
contentDisposition = 'inline; filename="mock.pdf"'
2015-09-24 07:55:45 +00:00
downloadFilePath = path.join fixtures, 'mock.pdf'
2015-09-21 13:44:51 +00:00
downloadServer = http.createServer (req, res) ->
res.writeHead 200, {
'Content-Length': mockPDF.length,
'Content-Type': 'application/pdf',
'Content-Disposition': contentDisposition
}
res.end mockPDF
downloadServer.close()
assertDownload = (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename, port) ->
assert.equal state, 'completed'
assert.equal filename, 'mock.pdf'
assert.equal url, "http://127.0.0.1:#{port}/"
assert.equal mimeType, 'application/pdf'
assert.equal receivedBytes, mockPDF.length
assert.equal totalBytes, mockPDF.length
assert.equal disposition, contentDisposition
assert fs.existsSync downloadFilePath
fs.unlinkSync downloadFilePath
it 'can download using BrowserWindow.loadURL', (done) ->
2015-09-21 13:44:51 +00:00
downloadServer.listen 0, '127.0.0.1', ->
{port} = downloadServer.address()
ipcRenderer.sendSync 'set-download-option', false
2015-11-13 08:03:40 +00:00
w.loadURL "#{url}:#{port}"
ipcRenderer.once 'download-done', (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) ->
assertDownload event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename, port
done()
it 'can download using WebView.downloadURL', (done) ->
downloadServer.listen 0, '127.0.0.1', ->
{port} = downloadServer.address()
ipcRenderer.sendSync 'set-download-option', false
webview = new WebView
webview.src = "file://#{fixtures}/api/blank.html"
webview.addEventListener 'did-finish-load', ->
webview.downloadURL "#{url}:#{port}/"
ipcRenderer.once 'download-done', (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) ->
assertDownload event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename, port
document.body.removeChild(webview)
2015-09-24 07:55:45 +00:00
done()
2015-09-21 13:44:51 +00:00
document.body.appendChild webview
2015-09-21 13:44:51 +00:00
it 'can cancel download', (done) ->
downloadServer.listen 0, '127.0.0.1', ->
{port} = downloadServer.address()
ipcRenderer.sendSync 'set-download-option', true
2015-11-13 08:03:40 +00:00
w.loadURL "#{url}:#{port}/"
ipcRenderer.once 'download-done', (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) ->
2015-09-24 07:55:45 +00:00
assert.equal state, 'cancelled'
assert.equal filename, 'mock.pdf'
2015-09-24 07:55:45 +00:00
assert.equal mimeType, 'application/pdf'
assert.equal receivedBytes, 0
assert.equal totalBytes, mockPDF.length
assert.equal disposition, contentDisposition
done()