mirror of
https://github.com/Kong/insomnia.git
synced 2026-10-26 16:49:11 -04:00
And more tests
This commit is contained in:
1 parent
827bdd2df8
commit
afae300761
10 files changed
+239
-23
No files matched your search
@@ -18,6 +18,11 @@ describe('jarFromCookies()', () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('handles malformed JSON', () => {
|
||||
const jar = cookieUtils.jarFromCookies("not a jar");
|
||||
expect(jar.constructor.name).toBe('CookieJar');
|
||||
})
|
||||
});
|
||||
|
||||
describe('cookiesFromJar()', () => {
|
||||
@@ -28,9 +33,12 @@ describe('cookiesFromJar()', () => {
|
||||
value: 'baz',
|
||||
domain: 'insomnia.rest',
|
||||
expires: d
|
||||
}, {
|
||||
// This one will fail to parse, and be skipped
|
||||
bad: 'cookie'
|
||||
}];
|
||||
|
||||
const jar= CookieJar.fromJSON({cookies: initialCookies});
|
||||
const jar = CookieJar.fromJSON({cookies: initialCookies});
|
||||
|
||||
const cookies = await cookieUtils.cookiesFromJar(jar);
|
||||
|
||||
@@ -40,4 +48,93 @@ describe('cookiesFromJar()', () => {
|
||||
expect(cookies[0].creation instanceof Date).toEqual(true);
|
||||
expect(cookies[0].expires).toEqual(d);
|
||||
});
|
||||
|
||||
it('handles bad jar', async () => {
|
||||
const jar = CookieJar.fromJSON({cookies: []});
|
||||
|
||||
// MemoryStore never actually throws errors, so lets mock the
|
||||
// function to force it to this time.
|
||||
jar.store.getAllCookies = cb => cb(new Error('Dummy Error'));
|
||||
const cookies = await cookieUtils.cookiesFromJar(jar);
|
||||
|
||||
// Cookies failed to p
|
||||
expect(cookies.length).toBe(0);
|
||||
})
|
||||
});
|
||||
|
||||
describe('cookieHeaderValueForUri()', () => {
|
||||
it('gets cookies for valid case', async () => {
|
||||
const jar = cookieUtils.jarFromCookies([{
|
||||
key: 'foo',
|
||||
value: 'bar',
|
||||
path: '/',
|
||||
domain: 'google.com'
|
||||
}, {
|
||||
key: 'foo',
|
||||
value: 'inner',
|
||||
path: '/inner',
|
||||
domain: 'google.com'
|
||||
}]);
|
||||
|
||||
expect(await cookieUtils.cookieHeaderValueForUri(jar, 'https://google.com/foo/bar'))
|
||||
.toBe('foo=bar');
|
||||
|
||||
expect(await cookieUtils.cookieHeaderValueForUri(jar, 'https://insomnia.rest/'))
|
||||
.toBe('');
|
||||
|
||||
expect(await cookieUtils.cookieHeaderValueForUri(jar, 'https://google.com/inner'))
|
||||
.toBe('foo=inner; foo=bar');
|
||||
});
|
||||
|
||||
it('handles errors properly', async () => {
|
||||
const jar = cookieUtils.jarFromCookies([]);
|
||||
jar.getCookies = (uri, cb) => cb(new Error('Dummy error'));
|
||||
|
||||
expect(
|
||||
await cookieUtils.cookieHeaderValueForUri(jar, 'https://google.com')
|
||||
).toBe('');
|
||||
});
|
||||
|
||||
describe('cookieToString()', () => {
|
||||
it('does it\'s thing', async () => {
|
||||
const jar = cookieUtils.jarFromCookies([{
|
||||
key: 'foo',
|
||||
value: 'bar',
|
||||
path: '/',
|
||||
domain: 'google.com'
|
||||
}, {
|
||||
key: 'foo1',
|
||||
value: 'bar',
|
||||
path: '/',
|
||||
domain: 'google.com',
|
||||
hostOnly: true
|
||||
}, {
|
||||
key: 'foo2',
|
||||
value: 'bar',
|
||||
path: '/',
|
||||
domain: 'google.com',
|
||||
hostOnly: false
|
||||
}, {
|
||||
key: 'foo3',
|
||||
value: 'bar',
|
||||
path: '/somepath'
|
||||
}]);
|
||||
|
||||
const cookies = await cookieUtils.cookiesFromJar(jar);
|
||||
|
||||
expect(cookies.length).toBe(4);
|
||||
|
||||
expect(cookieUtils.cookieToString(cookies[0]))
|
||||
.toBe('foo=bar; Domain=google.com; Path=/');
|
||||
|
||||
expect(cookieUtils.cookieToString(cookies[1]))
|
||||
.toBe('foo1=bar; Path=/; Domain=google.com');
|
||||
|
||||
expect(cookieUtils.cookieToString(cookies[2]))
|
||||
.toBe('foo2=bar; Domain=google.com; Path=/');
|
||||
|
||||
expect(cookieUtils.cookieToString(cookies[3]))
|
||||
.toBe('foo3=bar; Path=/somepath');
|
||||
})
|
||||
})
|
||||
});
|
||||
@@ -12,6 +12,77 @@ function loadFixture (name) {
|
||||
}
|
||||
}
|
||||
|
||||
describe('initDB()', () => {
|
||||
it('handles being initialized twice', async () => {
|
||||
await db.initDB(models.types(), {inMemoryOnly: true});
|
||||
await db.initDB(models.types(), {inMemoryOnly: true});
|
||||
expect((await db.all(models.request.type)).length).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('onChange()', () => {
|
||||
it('handles change listeners', async () => {
|
||||
const doc = {
|
||||
type: models.request.type,
|
||||
name: 'foo'
|
||||
};
|
||||
|
||||
const changesSeen = [];
|
||||
const callback = change => {
|
||||
changesSeen.push(change);
|
||||
};
|
||||
db.onChange(callback);
|
||||
|
||||
await db.insert(doc);
|
||||
await db.insert(doc, true);
|
||||
expect(changesSeen.length).toBe(2);
|
||||
expect(changesSeen).toEqual([
|
||||
[[db.CHANGE_INSERT, doc, false]],
|
||||
[[db.CHANGE_INSERT, doc, true]]
|
||||
]);
|
||||
|
||||
db.offChange(callback);
|
||||
await db.insert(doc);
|
||||
expect(changesSeen.length).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe('bufferChanges()', () => {
|
||||
it('properly buffers changes', async () => {
|
||||
const doc = {
|
||||
type: models.request.type,
|
||||
name: 'foo'
|
||||
};
|
||||
|
||||
const changesSeen = [];
|
||||
const callback = change => {
|
||||
changesSeen.push(change);
|
||||
};
|
||||
db.onChange(callback);
|
||||
|
||||
db.bufferChanges();
|
||||
await db.insert(doc);
|
||||
await db.insert(doc, true);
|
||||
|
||||
// Assert no change seen before flush
|
||||
expect(changesSeen.length).toBe(0);
|
||||
|
||||
// Assert changes seen after flush
|
||||
db.flushChanges();
|
||||
expect(changesSeen).toEqual([[
|
||||
[db.CHANGE_INSERT, doc, false],
|
||||
[db.CHANGE_INSERT, doc, true]
|
||||
]]);
|
||||
|
||||
// Assert no more changes seen after flush again
|
||||
db.flushChanges();
|
||||
expect(changesSeen).toEqual([[
|
||||
[db.CHANGE_INSERT, doc, false],
|
||||
[db.CHANGE_INSERT, doc, true]
|
||||
]]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('requestCreate()', () => {
|
||||
beforeEach(() => {
|
||||
return db.initDB(models.types(), {inMemoryOnly: true}, true);
|
||||
|
||||
@@ -10,6 +10,10 @@ describe('LocalStorage()', () => {
|
||||
setTimeout.mock.calls = [];
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.clearAllTimers();
|
||||
})
|
||||
|
||||
it('create directory', () => {
|
||||
const basePath = `/tmp/insomnia-localstorage-${Math.random()}`;
|
||||
new LocalStorage(basePath);
|
||||
@@ -35,6 +39,32 @@ describe('LocalStorage()', () => {
|
||||
expect(localStorage.getItem('dne')).toEqual('default');
|
||||
});
|
||||
|
||||
it('does handles malformed files', () => {
|
||||
const basePath = `/tmp/insomnia-localstorage-${Math.random()}`;
|
||||
const localStorage = new LocalStorage(basePath);
|
||||
|
||||
// Assert default is returned on bad JSON
|
||||
fs.writeFileSync(path.join(basePath, 'key'), '{bad JSON');
|
||||
expect(localStorage.getItem('key', 'default')).toBe('default');
|
||||
|
||||
// Assert that writing our file actually works
|
||||
fs.writeFileSync(path.join(basePath, 'key'), '{"good": "JSON"}');
|
||||
expect(localStorage.getItem('key', 'default')).toEqual({good: 'JSON'});
|
||||
});
|
||||
|
||||
it('does handles failing to write file', () => {
|
||||
const basePath = `/tmp/insomnia-localstorage-${Math.random()}`;
|
||||
const localStorage = new LocalStorage(basePath);
|
||||
fs.rmdirSync(basePath);
|
||||
localStorage.setItem('key', 'value');
|
||||
|
||||
jest.runAllTimers();
|
||||
|
||||
// Since the above operation failed to write, we should now get back
|
||||
// the default value
|
||||
expect(localStorage.getItem('key', 'different')).toBe('different');
|
||||
});
|
||||
|
||||
it('stores a key', () => {
|
||||
const basePath = `/tmp/insomnia-localstorage-${Math.random()}`;
|
||||
const localStorage = new LocalStorage(basePath);
|
||||
|
||||
@@ -129,3 +129,16 @@ describe('prepareUrlForSending()', () => {
|
||||
expect(url).toBe('https://google.com/?s=foo&s=foo%20%20100%25');
|
||||
});
|
||||
});
|
||||
|
||||
describe('filterHeaders()', () => {
|
||||
it('handles bad headers', () => {
|
||||
expect(util.filterHeaders(null, null)).toEqual([]);
|
||||
expect(util.filterHeaders([], null)).toEqual([]);
|
||||
expect(util.filterHeaders(['bad'], null)).toEqual([]);
|
||||
expect(util.filterHeaders(['bad'], 'good')).toEqual([]);
|
||||
expect(util.filterHeaders(null, 'good')).toEqual([]);
|
||||
expect(util.filterHeaders([{name: 'good', value: 'valid'}], null)).toEqual([]);
|
||||
expect(util.filterHeaders([{name: 'good', value: 'valid'}], 'good'))
|
||||
.toEqual([{name: 'good', value: 'valid'}]);
|
||||
})
|
||||
});
|
||||
@@ -25,13 +25,10 @@ export function cookiesFromJar (jar) {
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function cookieHeaderValueForUri (jar, uri) {
|
||||
return new Promise((resolve, reject) => {
|
||||
return new Promise(resolve => {
|
||||
jar.getCookies(uri, (err, cookies) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
} else {
|
||||
resolve(cookies.map(c => c.cookieString()).join('; '));
|
||||
}
|
||||
cookies = err ? [] : cookies;
|
||||
resolve(cookies.map(c => c.cookieString()).join('; '));
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -93,10 +93,7 @@ export function flushChanges () {
|
||||
return;
|
||||
}
|
||||
|
||||
// Notify async so we don't block
|
||||
process.nextTick(() => {
|
||||
changeListeners.map(fn => fn(changes));
|
||||
})
|
||||
changeListeners.map(fn => fn(changes));
|
||||
}
|
||||
|
||||
function notifyOfChange (event, doc, fromSync) {
|
||||
|
||||
@@ -38,7 +38,8 @@ class LocalStorage {
|
||||
try {
|
||||
return JSON.parse(contents)
|
||||
} catch (e) {
|
||||
console.error(`[localstorage] Failed to get from LocalStorage: ${e}`)
|
||||
console.error(`[localstorage] Failed to parse item from LocalStorage: ${e}`)
|
||||
return defaultObj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ export function filterHeaders (headers, name) {
|
||||
}
|
||||
|
||||
return headers.filter(
|
||||
h => h.name.toLowerCase() === name.toLowerCase()
|
||||
h => (h.name || '').toLowerCase() === name.toLowerCase()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,14 +17,14 @@ class NoArgsExtension {
|
||||
}
|
||||
}
|
||||
|
||||
class ArgsExtension {
|
||||
parse (parser, nodes, lexer) {
|
||||
const tok = parser.nextToken();
|
||||
const args = parser.parseSignature(null, true);
|
||||
parser.advanceAfterBlockEnd(tok.value);
|
||||
return new nodes.CallExtension(this, 'run', args);
|
||||
}
|
||||
}
|
||||
// class ArgsExtension {
|
||||
// parse (parser, nodes, lexer) {
|
||||
// const tok = parser.nextToken();
|
||||
// const args = parser.parseSignature(null, true);
|
||||
// parser.advanceAfterBlockEnd(tok.value);
|
||||
// return new nodes.CallExtension(this, 'run', args);
|
||||
// }
|
||||
// }
|
||||
|
||||
class TimestampExtension extends NoArgsExtension {
|
||||
constructor () {
|
||||
|
||||
+12
-2
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"test:noisy": "jest",
|
||||
"test:watch": "jest --watch",
|
||||
"test:coverage": "jest --coverage --silent && open ./coverage/lcov-report/index.html",
|
||||
"test": "jest --silent",
|
||||
"start-hot": "cross-env HOT=1 INSOMNIA_ENV=development electron -r babel-register ./app/main.development.js",
|
||||
"hot-server": "babel-node ./webpack/server.js",
|
||||
@@ -36,7 +36,17 @@
|
||||
"jest": {
|
||||
"rootDir": "app",
|
||||
"verbose": false,
|
||||
"bail": true
|
||||
"collectCoverage": false,
|
||||
"collectCoverageFrom": [
|
||||
"**/*.js",
|
||||
"!**/main.development.js",
|
||||
"!**/static/**",
|
||||
"!**/ui/**",
|
||||
"!**/__fixtures__/**",
|
||||
"!**/__tests__/**",
|
||||
"!**/__mocks__/**",
|
||||
"!**/node_modules/**"
|
||||
]
|
||||
},
|
||||
"build": {
|
||||
"appId": "com.insomnia.app",
|
||||
|
||||
Reference in new issue
Block a user