summaryrefslogtreecommitdiff
path: root/addons/mail/static/tests/document_viewer_tests.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/mail/static/tests/document_viewer_tests.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mail/static/tests/document_viewer_tests.js')
-rw-r--r--addons/mail/static/tests/document_viewer_tests.js232
1 files changed, 232 insertions, 0 deletions
diff --git a/addons/mail/static/tests/document_viewer_tests.js b/addons/mail/static/tests/document_viewer_tests.js
new file mode 100644
index 00000000..534e0fa4
--- /dev/null
+++ b/addons/mail/static/tests/document_viewer_tests.js
@@ -0,0 +1,232 @@
+odoo.define('mail.document_viewer_tests', function (require) {
+"use strict";
+
+var DocumentViewer = require('mail.DocumentViewer');
+
+var testUtils = require('web.test_utils');
+var Widget = require('web.Widget');
+
+/**
+ * @param {Object} params
+ * @param {Object[]} params.attachments
+ * @param {int} params.attachmentID
+ * @param {function} [params.mockRPC]
+ * @param {boolean} [params.debug]
+ * @returns {DocumentViewer}
+ */
+var createViewer = async function (params) {
+ var parent = new Widget();
+ var viewer = new DocumentViewer(parent, params.attachments, params.attachmentID);
+
+ var mockRPC = function (route) {
+ if (route === '/web/static/lib/pdfjs/web/viewer.html?file=/web/content/1?model%3Dir.attachment%26filename%3DfilePdf.pdf') {
+ return Promise.resolve();
+ }
+ if (route === 'https://www.youtube.com/embed/FYqW0Gdwbzk') {
+ return Promise.resolve();
+ }
+ if (route === '/web/content/4?model=ir.attachment') {
+ return Promise.resolve();
+ }
+ if (route === '/web/image/6?unique=56789abc&model=ir.attachment') {
+ return Promise.resolve();
+ }
+ };
+ await testUtils.mock.addMockEnvironment(parent, {
+ mockRPC: function () {
+ if (params.mockRPC) {
+ var _super = this._super;
+ this._super = mockRPC;
+ var def = params.mockRPC.apply(this, arguments);
+ this._super = _super;
+ return def;
+ } else {
+ return mockRPC.apply(this, arguments);
+ }
+ },
+ intercepts: params.intercepts || {},
+ });
+ var $target = $("#qunit-fixture");
+ if (params.debug) {
+ $target = $('body');
+ $target.addClass('debug');
+ }
+
+ // actually destroy the parent when the viewer is destroyed
+ viewer.destroy = function () {
+ delete viewer.destroy;
+ parent.destroy();
+ };
+ return viewer.appendTo($target).then(function() {
+ return viewer;
+ });
+};
+
+QUnit.module('mail', {}, function () {
+QUnit.module('document_viewer_tests.js', {
+ beforeEach: function () {
+ this.attachments = [
+ {id: 1, name: 'filePdf.pdf', type: 'binary', mimetype: 'application/pdf', datas:'R0lGOP////ywAADs='},
+ {id: 2, name: 'urlYoutube', type: 'url', mimetype: '', url: 'https://youtu.be/FYqW0Gdwbzk'},
+ {id: 3, name: 'urlRandom', type: 'url', mimetype: '', url: 'https://www.google.com'},
+ {id: 4, name: 'text.html', type: 'binary', mimetype: 'text/html', datas:'testee'},
+ {id: 5, name: 'video.mp4', type: 'binary', mimetype: 'video/mp4', datas:'R0lDOP////ywAADs='},
+ {id: 6, name: 'image.jpg', type: 'binary', mimetype: 'image/jpeg', checksum: '123456789abc', datas:'R0lVOP////ywAADs='},
+ ];
+ },
+}, function () {
+
+ QUnit.test('basic rendering', async function (assert) {
+ assert.expect(7);
+
+ var viewer = await createViewer({
+ attachmentID: 1,
+ attachments: this.attachments,
+ });
+
+ assert.containsOnce(viewer, '.o_viewer_content',
+ "there should be a preview");
+ assert.containsOnce(viewer, '.o_close_btn',
+ "there should be a close button");
+ assert.containsOnce(viewer, '.o_viewer-header',
+ "there should be a header");
+ assert.containsOnce(viewer, '.o_image_caption',
+ "there should be an image caption");
+ assert.containsOnce(viewer, '.o_viewer_zoomer',
+ "there should be a zoomer");
+ assert.containsOnce(viewer, '.fa-chevron-right',
+ "there should be a right nav icon");
+ assert.containsOnce(viewer, '.fa-chevron-left',
+ "there should be a left nav icon");
+
+ viewer.destroy();
+ });
+
+ QUnit.test('Document Viewer Youtube', async function (assert) {
+ assert.expect(3);
+
+ var youtubeURL = 'https://www.youtube.com/embed/FYqW0Gdwbzk';
+ var viewer = await createViewer({
+ attachmentID: 2,
+ attachments: this.attachments,
+ mockRPC: function (route) {
+ if (route === youtubeURL) {
+ assert.ok(true, "should have called youtube URL");
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.strictEqual(viewer.$(".o_image_caption:contains('urlYoutube')").length, 1,
+ "the viewer should be on the right attachment");
+ assert.containsOnce(viewer, '.o_viewer_text[data-src="' + youtubeURL + '"]',
+ "there should be a video player");
+
+ viewer.destroy();
+ });
+
+ QUnit.test('Document Viewer html/(txt)', async function (assert) {
+ assert.expect(2);
+
+ var viewer = await createViewer({
+ attachmentID: 4,
+ attachments: this.attachments,
+ });
+
+ assert.strictEqual(viewer.$(".o_image_caption:contains('text.html')").length, 1,
+ "the viewer be on the right attachment");
+ assert.containsOnce(viewer, 'iframe[data-src="/web/content/4?model=ir.attachment"]',
+ "there should be an iframe with the right src");
+
+ viewer.destroy();
+ });
+
+ QUnit.test('Document Viewer mp4', async function (assert) {
+ assert.expect(2);
+
+ var viewer = await createViewer({
+ attachmentID: 5,
+ attachments: this.attachments,
+ });
+
+ assert.strictEqual(viewer.$(".o_image_caption:contains('video.mp4')").length, 1,
+ "the viewer be on the right attachment");
+ assert.containsOnce(viewer, '.o_viewer_video',
+ "there should be a video player");
+
+ viewer.destroy();
+ });
+
+ QUnit.test('Document Viewer jpg', async function (assert) {
+ assert.expect(2);
+
+ var viewer = await createViewer({
+ attachmentID: 6,
+ attachments: this.attachments,
+ });
+
+ assert.strictEqual(viewer.$(".o_image_caption:contains('image.jpg')").length, 1,
+ "the viewer be on the right attachment");
+ assert.containsOnce(viewer, 'img[data-src="/web/image/6?unique=56789abc&model=ir.attachment"]',
+ "there should be a video player");
+
+ viewer.destroy();
+ });
+
+ QUnit.test('is closable by button', async function (assert) {
+ assert.expect(3);
+
+ var viewer = await createViewer({
+ attachmentID: 6,
+ attachments: this.attachments,
+ });
+
+ assert.containsOnce(viewer, '.o_viewer_content',
+ "should have a document viewer");
+ assert.containsOnce(viewer, '.o_close_btn',
+ "should have a close button");
+
+ await testUtils.dom.click(viewer.$('.o_close_btn'));
+
+ assert.ok(viewer.isDestroyed(), 'viewer should be destroyed');
+ });
+
+ QUnit.test('is closable by clicking on the wrapper', async function (assert) {
+ assert.expect(3);
+
+ var viewer = await createViewer({
+ attachmentID: 6,
+ attachments: this.attachments,
+ });
+
+ assert.containsOnce(viewer, '.o_viewer_content',
+ "should have a document viewer");
+ assert.containsOnce(viewer, '.o_viewer_img_wrapper',
+ "should have a wrapper");
+
+ await testUtils.dom.click(viewer.$('.o_viewer_img_wrapper'));
+
+ assert.ok(viewer.isDestroyed(), 'viewer should be destroyed');
+ });
+
+ QUnit.test('fileType and integrity test', async function (assert) {
+ assert.expect(3);
+
+ var viewer = await createViewer({
+ attachmentID: 2,
+ attachments: this.attachments,
+ });
+
+ assert.strictEqual(this.attachments[1].type, 'url',
+ "the type should be url");
+ assert.strictEqual(this.attachments[1].fileType, 'youtu',
+ "there should be a fileType 'youtu'");
+ assert.strictEqual(this.attachments[1].youtube, 'FYqW0Gdwbzk',
+ "there should be a youtube token");
+
+ viewer.destroy();
+ });
+});
+});
+
+});