spec: Add test cases for webRequest
This commit is contained in:
parent
fed94aada0
commit
d3e723557e
3 changed files with 250 additions and 15 deletions
232
spec/api-web-request-spec.coffee
Normal file
232
spec/api-web-request-spec.coffee
Normal file
|
@ -0,0 +1,232 @@
|
|||
assert = require 'assert'
|
||||
http = require 'http'
|
||||
|
||||
{remote} = require 'electron'
|
||||
{session} = remote
|
||||
|
||||
describe 'webRequest module', ->
|
||||
ses = session.defaultSession
|
||||
server = http.createServer (req, res) ->
|
||||
res.setHeader('Custom', ['Header'])
|
||||
content = req.url
|
||||
if req.headers.accept is '*/*;test/header'
|
||||
content += 'header/received'
|
||||
res.end content
|
||||
defaultURL = null
|
||||
|
||||
before (done) ->
|
||||
server.listen 0, '127.0.0.1', ->
|
||||
{port} = server.address()
|
||||
defaultURL = "http://127.0.0.1:#{port}/"
|
||||
done()
|
||||
after ->
|
||||
server.close()
|
||||
|
||||
describe 'webRequest.onBeforeRequest', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onBeforeRequest null
|
||||
|
||||
it 'can cancel the request', (done) ->
|
||||
ses.webRequest.onBeforeRequest (details, callback) ->
|
||||
callback(cancel: true)
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) -> done('unexpected success')
|
||||
error: (xhr, errorType, error) -> done()
|
||||
|
||||
it 'can filter URLs', (done) ->
|
||||
filter = urls: ["#{defaultURL}filter/*"]
|
||||
ses.webRequest.onBeforeRequest filter, (details, callback) ->
|
||||
callback(cancel: true)
|
||||
$.ajax
|
||||
url: "#{defaultURL}nofilter/test"
|
||||
success: (data) ->
|
||||
assert.equal data, '/nofilter/test'
|
||||
$.ajax
|
||||
url: "#{defaultURL}filter/test"
|
||||
success: (data) -> done('unexpected success')
|
||||
error: (xhr, errorType, error) -> done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onBeforeRequest (details, callback) ->
|
||||
assert.equal typeof details.id, 'number'
|
||||
assert.equal typeof details.timestamp, 'number'
|
||||
assert.equal details.url, defaultURL
|
||||
assert.equal details.method, 'GET'
|
||||
assert.equal details.resourceType, 'xhr'
|
||||
callback({})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) ->
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
it 'can redirect the request', (done) ->
|
||||
ses.webRequest.onBeforeRequest (details, callback) ->
|
||||
if details.url is defaultURL
|
||||
callback(redirectURL: "#{defaultURL}redirect")
|
||||
else
|
||||
callback({})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) ->
|
||||
assert.equal data, '/redirect'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onBeforeSendHeaders', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onBeforeSendHeaders null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onBeforeSendHeaders (details, callback) ->
|
||||
assert.equal typeof details.requestHeaders, 'object'
|
||||
callback({})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) ->
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
it 'can change the request headers', (done) ->
|
||||
ses.webRequest.onBeforeSendHeaders (details, callback) ->
|
||||
{requestHeaders} = details
|
||||
requestHeaders.Accept = '*/*;test/header'
|
||||
callback({requestHeaders})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, textStatus, request) ->
|
||||
assert.equal data, '/header/received'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onSendHeaders', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onSendHeaders null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onSendHeaders (details, callback) ->
|
||||
assert.equal typeof details.requestHeaders, 'object'
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) ->
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onHeadersReceived', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onHeadersReceived null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onHeadersReceived (details, callback) ->
|
||||
assert.equal details.statusLine, 'HTTP/1.1 200 OK'
|
||||
assert.equal details.statusCode, 200
|
||||
assert.equal details.responseHeaders['Custom'], 'Header'
|
||||
callback({})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) ->
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
it 'can change the response header', (done) ->
|
||||
ses.webRequest.onHeadersReceived (details, callback) ->
|
||||
{responseHeaders} = details
|
||||
responseHeaders['Custom'] = ['Changed']
|
||||
callback({responseHeaders})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, status, xhr) ->
|
||||
assert.equal xhr.getResponseHeader('Custom'), 'Changed'
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
it 'does not change header by default', (done) ->
|
||||
ses.webRequest.onHeadersReceived (details, callback) ->
|
||||
callback({})
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, status, xhr) ->
|
||||
assert.equal xhr.getResponseHeader('Custom'), 'Header'
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onResponseStarted', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onResponseStarted null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onResponseStarted (details) ->
|
||||
assert.equal typeof details.fromCache, 'boolean'
|
||||
assert.equal details.statusLine, 'HTTP/1.1 200 OK'
|
||||
assert.equal details.statusCode, 200
|
||||
assert.equal details.responseHeaders['Custom'], 'Header'
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, status, xhr) ->
|
||||
assert.equal xhr.getResponseHeader('Custom'), 'Header'
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onBeforeRedirect', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onBeforeRedirect null
|
||||
ses.webRequest.onBeforeRequest null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
redirectURL = "#{defaultURL}redirect"
|
||||
ses.webRequest.onBeforeRequest (details, callback) ->
|
||||
if details.url is defaultURL
|
||||
callback({redirectURL})
|
||||
else
|
||||
callback({})
|
||||
ses.webRequest.onBeforeRedirect (details) ->
|
||||
assert.equal typeof details.fromCache, 'boolean'
|
||||
assert.equal details.statusLine, 'HTTP/1.1 307 Internal Redirect'
|
||||
assert.equal details.statusCode, 307
|
||||
assert.equal details.redirectURL, redirectURL
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, status, xhr) ->
|
||||
assert.equal data, '/redirect'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onCompleted', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onCompleted null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onCompleted (details) ->
|
||||
assert.equal typeof details.fromCache, 'boolean'
|
||||
assert.equal details.statusLine, 'HTTP/1.1 200 OK'
|
||||
assert.equal details.statusCode, 200
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data, status, xhr) ->
|
||||
assert.equal data, '/'
|
||||
done()
|
||||
error: (xhr, errorType, error) -> done(errorType)
|
||||
|
||||
describe 'webRequest.onErrorOccurred', ->
|
||||
afterEach ->
|
||||
ses.webRequest.onErrorOccurred null
|
||||
ses.webRequest.onBeforeRequest null
|
||||
|
||||
it 'receives details object', (done) ->
|
||||
ses.webRequest.onBeforeRequest (details, callback) ->
|
||||
callback(cancel: true)
|
||||
ses.webRequest.onErrorOccurred (details) ->
|
||||
assert.equal details.error, 'net::ERR_BLOCKED_BY_CLIENT'
|
||||
done()
|
||||
$.ajax
|
||||
url: defaultURL
|
||||
success: (data) -> done('unexpected success')
|
Loading…
Add table
Add a link
Reference in a new issue