feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- Base: wintercms/winter branch 1.2 (full framework) - Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS - Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication - Partials: hero (offline-first), features, modes (offline/nube toggle), screenshots, pricing (3 planes), comparison, FAQ, CTA - Plugin VivesPOS.Site with ContactForm - Dockerfile: PHP 8.2 Apache, port 80, healthcheck - Added winter/wn-pages, blog, sitemap, seo plugins - Active theme set to vivespos
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import FakeDom from '../../../helpers/FakeDom';
|
||||
|
||||
describe('PluginLoader class', function () {
|
||||
it('can mock plugin methods', function (done) {
|
||||
FakeDom
|
||||
.new()
|
||||
.addScript([
|
||||
'modules/system/assets/js/build/manifest.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.vendor.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.base.js'
|
||||
])
|
||||
.render()
|
||||
.then(
|
||||
(dom) => {
|
||||
dom.window.Snowboard.getPlugin('sanitizer').mock('sanitize', () => {
|
||||
return 'all good';
|
||||
});
|
||||
|
||||
expect(
|
||||
dom.window.Snowboard.sanitizer().sanitize('<p onload="derp;"></p>')
|
||||
).toEqual('all good');
|
||||
|
||||
// Test unmock
|
||||
dom.window.Snowboard.getPlugin('sanitizer').unmock('sanitize');
|
||||
|
||||
expect(
|
||||
dom.window.Snowboard.sanitizer().sanitize('<p onload="derp;"></p>')
|
||||
).toEqual('<p></p>');
|
||||
|
||||
done();
|
||||
},
|
||||
(error) => {
|
||||
done(error);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('is frozen on construction and doesn\'t allow prototype pollution', function () {
|
||||
FakeDom
|
||||
.new()
|
||||
.addScript([
|
||||
'modules/system/assets/js/build/manifest.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.vendor.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.base.js',
|
||||
])
|
||||
.render()
|
||||
.then(
|
||||
(dom) => {
|
||||
const loader = dom.window.Snowboard.getPlugin('sanitizer');
|
||||
|
||||
expect(() => {
|
||||
loader.newMethod = () => {
|
||||
return true;
|
||||
};
|
||||
}).toThrow(TypeError);
|
||||
|
||||
expect(() => {
|
||||
loader.newProperty = 'test';
|
||||
}).toThrow(TypeError);
|
||||
|
||||
expect(() => {
|
||||
loader.singleton.test = 'test';
|
||||
}).toThrow(TypeError);
|
||||
|
||||
expect(loader.newMethod).toBeUndefined();
|
||||
expect(loader.newProperty).toBeUndefined();
|
||||
},
|
||||
(error) => {
|
||||
throw error;
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('should prevent modification of root instances', function () {
|
||||
FakeDom
|
||||
.new()
|
||||
.addScript([
|
||||
'modules/system/assets/js/build/manifest.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.vendor.js',
|
||||
'modules/system/assets/js/snowboard/build/snowboard.base.js',
|
||||
'modules/system/tests/js/fixtures/framework/TestPlugin.js',
|
||||
'modules/system/tests/js/fixtures/framework/TestSingleton.js',
|
||||
])
|
||||
.render()
|
||||
.then(
|
||||
(dom) => {
|
||||
const rootInstance = dom.window.Snowboard.getPlugin('testPlugin').instance;
|
||||
|
||||
expect(() => {
|
||||
rootInstance.newMethod = () => {
|
||||
return true;
|
||||
}
|
||||
}).toThrow(TypeError);
|
||||
|
||||
expect(rootInstance.newMethod).toBeUndefined();
|
||||
|
||||
// Modifications can however be made to instances retrieved from the loader
|
||||
const loadedInstance = dom.window.Snowboard.getPlugin('testPlugin').getInstance();
|
||||
|
||||
loadedInstance.newMethod = () => {
|
||||
return true;
|
||||
};
|
||||
expect(loadedInstance.newMethod).toEqual(expect.any(Function));
|
||||
expect(loadedInstance.newMethod()).toBe(true);
|
||||
|
||||
// But shouldn't follow through to new instances
|
||||
const loadedInstanceTwo = dom.window.Snowboard.getPlugin('testPlugin').getInstance();
|
||||
expect(loadedInstanceTwo.newMethod).toBeUndefined();
|
||||
|
||||
// The same rules apply for singletons, except that modifications will follow through to other uses
|
||||
// of the singleton, since it's only one global instance.
|
||||
const rootSingleton = dom.window.Snowboard.getPlugin('testSingleton').instance;
|
||||
|
||||
expect(() => {
|
||||
rootSingleton.newMethod = () => {
|
||||
return true;
|
||||
}
|
||||
}).toThrow(TypeError);
|
||||
|
||||
const loadedSingleton = dom.window.Snowboard.getPlugin('testSingleton').getInstance();
|
||||
|
||||
loadedSingleton.newMethod = () => {
|
||||
return true;
|
||||
};
|
||||
expect(loadedSingleton.newMethod).toEqual(expect.any(Function));
|
||||
expect(loadedSingleton.newMethod()).toBe(true);
|
||||
|
||||
const loadedSingletonTwo = dom.window.Snowboard.getPlugin('testSingleton').getInstance();
|
||||
expect(loadedSingletonTwo.newMethod).toEqual(expect.any(Function));
|
||||
expect(loadedSingletonTwo.newMethod()).toBe(true);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user