Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
209
gaia/apps/calendar/test/unit/oauth_window_test.js
Executable file
209
gaia/apps/calendar/test/unit/oauth_window_test.js
Executable file
|
|
@ -0,0 +1,209 @@
|
|||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var OAuthWindow = require('oauth_window');
|
||||
var QueryString = require('querystring');
|
||||
var View = require('view');
|
||||
|
||||
suite('OAuthWindow', function() {
|
||||
var subject;
|
||||
var url = 'https://foobar.com';
|
||||
var element;
|
||||
var params = {
|
||||
client_id: 'foo',
|
||||
redirect_uri: 'http://oauth.gaiamobile.org/foobar'
|
||||
};
|
||||
|
||||
function emitLocationChange(url) {
|
||||
var event = new CustomEvent('mozbrowserlocationchange', {
|
||||
detail: url
|
||||
});
|
||||
|
||||
subject.browserFrame.dispatchEvent(event);
|
||||
}
|
||||
|
||||
setup(function() {
|
||||
element = document.createElement('section');
|
||||
element.innerHTML = [
|
||||
'<section role="region">',
|
||||
'<gaia-header id="oauth-header" action="cancel">',
|
||||
'<h1 class="oauth-browser-title"></h1>',
|
||||
'</gaia-header>',
|
||||
'<div class="browser-container"></div>',
|
||||
'</section>'
|
||||
].join('');
|
||||
|
||||
subject = new OAuthWindow(
|
||||
element,
|
||||
url,
|
||||
params
|
||||
);
|
||||
});
|
||||
|
||||
test('initialization', function() {
|
||||
assert.deepEqual(subject.params, params);
|
||||
assert.equal(subject.element, element);
|
||||
assert.deepEqual(
|
||||
subject.target,
|
||||
url + '?' + QueryString.stringify(params),
|
||||
'.target'
|
||||
);
|
||||
});
|
||||
|
||||
test('.browserContainer', function() {
|
||||
assert.ok(subject.browserContainer, 'has container');
|
||||
assert.equal(subject.browserContainer, element.querySelector(
|
||||
subject.selectors.browserContainer
|
||||
));
|
||||
});
|
||||
|
||||
test('.browserTitle', function() {
|
||||
assert.equal(
|
||||
subject.browserTitle,
|
||||
element.querySelector(subject.selectors.browserTitle)
|
||||
);
|
||||
});
|
||||
|
||||
test('.browserHeader', function() {
|
||||
assert.equal(
|
||||
subject.browserHeader,
|
||||
element.querySelector(subject.selectors.browserHeader)
|
||||
);
|
||||
});
|
||||
|
||||
test('without redirect_uri', function() {
|
||||
assert.throws(function() {
|
||||
return new OAuthWindow(url, {});
|
||||
});
|
||||
});
|
||||
|
||||
suite('#open', function() {
|
||||
setup(function() {
|
||||
subject.open();
|
||||
});
|
||||
|
||||
test('.isOpen', function() {
|
||||
assert.isTrue(subject.isOpen);
|
||||
});
|
||||
|
||||
test('is active', function() {
|
||||
assert.ok(
|
||||
subject.element.classList.contains(View.ACTIVE),
|
||||
'is active'
|
||||
);
|
||||
});
|
||||
|
||||
test('has iframe', function() {
|
||||
var iframe = element.querySelector(
|
||||
'iframe'
|
||||
);
|
||||
|
||||
assert.ok(
|
||||
iframe.getAttribute('mozbrowser'),
|
||||
'is mozbrowser'
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
iframe.getAttribute('src'),
|
||||
subject.target,
|
||||
'is at url'
|
||||
);
|
||||
|
||||
assert.equal(subject.browserFrame, iframe);
|
||||
assert.equal(
|
||||
subject.browserContainer.firstElementChild,
|
||||
subject.browserFrame,
|
||||
'is inside container'
|
||||
);
|
||||
});
|
||||
|
||||
test('url changed to something other then redirect_uri', function() {
|
||||
var newUrl = 'http://foobar.com/bar/bar';
|
||||
emitLocationChange(newUrl);
|
||||
|
||||
assert.equal(
|
||||
subject.browserTitle.textContent,
|
||||
newUrl,
|
||||
'changes url'
|
||||
);
|
||||
});
|
||||
|
||||
test('click cancel button', function(done) {
|
||||
var hasClosed;
|
||||
subject.onabort = function() {
|
||||
assert.ok(hasClosed, 'called close');
|
||||
done();
|
||||
};
|
||||
|
||||
subject.close = function() {
|
||||
hasClosed = true;
|
||||
};
|
||||
|
||||
testSupport.calendar.triggerEvent(
|
||||
subject.browserHeader,
|
||||
'action'
|
||||
);
|
||||
});
|
||||
|
||||
test('redirects to redirect_uri', function(done) {
|
||||
var successParams = {
|
||||
code: 'wow',
|
||||
state: 'youwin'
|
||||
};
|
||||
|
||||
var hasClosed;
|
||||
subject.close = function() {
|
||||
hasClosed = true;
|
||||
};
|
||||
|
||||
subject.oncomplete = function(params) {
|
||||
assert.ok(hasClosed, 'closed window');
|
||||
assert.deepEqual(successParams, params, 'parsed params');
|
||||
done();
|
||||
};
|
||||
|
||||
emitLocationChange(
|
||||
params.redirect_uri + '?' +
|
||||
QueryString.stringify(successParams)
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
suite('#close', function() {
|
||||
setup(function() {
|
||||
subject.open();
|
||||
});
|
||||
|
||||
test('removes iframe', function() {
|
||||
assert.ok(subject.browserFrame, 'has frame');
|
||||
|
||||
subject.close();
|
||||
assert.ok(!subject.browserFrame, 'removes frame');
|
||||
assert.ok(!element.querySelector('iframe'), 'removes from dom');
|
||||
assert.isFalse(subject.isOpen, 'isOpen');
|
||||
assert.ok(
|
||||
!element.classList.contains(View.ACTIVE),
|
||||
'is inactive'
|
||||
);
|
||||
});
|
||||
|
||||
test('cleans up events', function() {
|
||||
var triggedClose;
|
||||
subject.close();
|
||||
subject.close();
|
||||
|
||||
subject.close = function() {
|
||||
triggedClose = true;
|
||||
};
|
||||
|
||||
testSupport.calendar.triggerEvent(
|
||||
subject.browserHeader,
|
||||
'action'
|
||||
);
|
||||
|
||||
assert.ok(!triggedClose, 'does not trigger close');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Reference in a new issue