1 const assert
= require('assert');
2 const Camo
= require('../lib/camo');
3 const CamoConfig
= require('../lib/configuration/camoconfig').CamoConfig
;
5 describe('Camo', () => {
6 const config
= new CamoConfig({
8 server
: 'http://localhost:8081',
9 key
: '9LKC7708ZHOVRCTLOLE3G2YJ0U1T8F96',
10 'whitelisted-domains': ['def.xyz', 'tii.kzz.qqq'],
15 describe('#camoify', () => {
16 it('constructs a camo url', () => {
17 const result
= Camo
.camoify(config
, 'http://abc.xyz/image.jpeg');
18 assert
.strictEqual(result
, 'http://localhost:8081/a9c295dd7d8dcbc8247dec97ac5d9b4ee8baeb31/687474703a2f2f6162632e78797a2f696d6167652e6a706567');
21 it('constructs a camo url using url encoding', () => {
22 const config
= new CamoConfig({
24 server
: 'http://localhost:8081',
25 key
: '9LKC7708ZHOVRCTLOLE3G2YJ0U1T8F96',
26 'whitelisted-domains': ['def.xyz'],
31 const result
= Camo
.camoify(config
, 'http://abc.xyz/image.jpeg');
32 assert
.strictEqual(result
, 'http://localhost:8081/a9c295dd7d8dcbc8247dec97ac5d9b4ee8baeb31?url=http%3A%2F%2Fabc.xyz%2Fimage.jpeg');
35 it('bypasses camo for whitelisted domains', () => {
36 const result
= Camo
.camoify(config
, 'http://def.xyz/image.jpeg');
37 assert
.strictEqual(result
, 'https://def.xyz/image.jpeg');
40 it('bypasses camo for whitelisted domains subdomains', () => {
41 const result
= Camo
.camoify(config
, 'http://abc.def.xyz/image.jpeg');
42 assert
.strictEqual(result
, 'https://abc.def.xyz/image.jpeg');
45 it('does not bypass camo for a non-subdomain match', () => {
46 const result
= Camo
.camoify(config
, 'http://abcdef.xyz/image.jpeg');
47 assert
.strictEqual(result
, 'http://localhost:8081/19f53f65e8081a064cff54fbd665e8bb08612aa6/687474703a2f2f6162636465662e78797a2f696d6167652e6a706567');
50 it('does not bypass camo when no whitelist is configured', () => {
51 const config
= new CamoConfig({
53 server
: 'http://localhost:8081',
54 key
: '9LKC7708ZHOVRCTLOLE3G2YJ0U1T8F96',
58 const result
= Camo
.camoify(config
, 'http://abcdef.xyz/image.jpeg');
59 assert
.strictEqual(result
, 'http://localhost:8081/19f53f65e8081a064cff54fbd665e8bb08612aa6/687474703a2f2f6162636465662e78797a2f696d6167652e6a706567');
63 describe('#transformImgTags', () => {
64 it('transforms an img tag with a src', () => {
66 src
: 'http://abc.xyz/image.jpeg',
69 const expectedAttribs
= {
70 src
: 'http://localhost:8081/a9c295dd7d8dcbc8247dec97ac5d9b4ee8baeb31/687474703a2f2f6162632e78797a2f696d6167652e6a706567',
73 const result
= Camo
.transformImgTags(config
, 'img', attribs
);
74 assert
.deepStrictEqual(result
, { tagName
: 'img', attribs
: expectedAttribs
});
77 it('skips img tags with no src', () => {
78 const attribs
= { 'class': 'some-image' };
79 const result
= Camo
.transformImgTags(config
, 'img', attribs
);
80 assert
.deepStrictEqual(result
, { tagName
: 'img', attribs
: attribs
});
83 it('fails gracefully', () => {
84 const attribs
= { src
: 'http://abc.xyz/image.jpeg' };
85 const config
= new CamoConfig({ camo
: { enabled
: true }});
86 config
.getKey
= () => { throw new Error('something happened'); };
87 const result
= Camo
.transformImgTags(config
, 'img', attribs
);
88 assert
.deepStrictEqual(result
, { tagName
: 'img', attribs
: attribs
});