diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/pad/static/tests | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/pad/static/tests')
| -rw-r--r-- | addons/pad/static/tests/pad_tests.js | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/addons/pad/static/tests/pad_tests.js b/addons/pad/static/tests/pad_tests.js new file mode 100644 index 00000000..c1195001 --- /dev/null +++ b/addons/pad/static/tests/pad_tests.js @@ -0,0 +1,310 @@ +odoo.define('pad.pad_tests', function (require) { +"use strict"; + +var FieldPad = require('pad.pad'); +var FormView = require('web.FormView'); +var testUtils = require('web.test_utils'); + +var createView = testUtils.createView; + +QUnit.module('pad widget', { + beforeEach: function () { + this.data = { + task: { + fields: { + description: {string: "Description", type: "char"}, + use_pad: {string: "Use pad", type: "boolean"}, + }, + records: [ + {id: 1, description: false}, + {id: 2, description: "https://pad.odoo.pad/p/test-03AK6RCJT"}, + ], + pad_is_configured: function () { + return true; + }, + pad_generate_url: function (route, args) { + return { + url:'https://pad.odoo.pad/p/test/' + args.context.object_id + }; + }, + pad_get_content: function () { + return "we should rewrite this server in haskell"; + }, + }, + }; + }, +}); + + QUnit.test('pad widget display help if server not configured', async function (assert) { + assert.expect(4); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 1, + mockRPC: function (route, args) { + if (args.method === 'pad_is_configured') { + return Promise.resolve(false); + } + return this._super.apply(this, arguments); + }, + }); + assert.isVisible(form.$('p.oe_unconfigured'), + "help message should be visible"); + assert.containsNone(form, 'p.oe_pad_content', + "content should not be displayed"); + await testUtils.form.clickEdit(form); + assert.isVisible(form.$('p.oe_unconfigured'), + "help message should be visible"); + assert.containsNone(form, 'p.oe_pad_content', + "content should not be displayed"); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('pad widget works, basic case', async function (assert) { + assert.expect(5); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 1, + mockRPC: function (route, args) { + if (route === 'https://pad.odoo.pad/p/test/1?showChat=false&userName=batman') { + assert.ok(true, "should have an iframe with correct src"); + return Promise.resolve(true); + } + return this._super.apply(this, arguments); + }, + session: { + name: "batman", + }, + }); + assert.isNotVisible(form.$('p.oe_unconfigured'), + "help message should not be visible"); + assert.isVisible(form.$('.oe_pad_content'), + "content should be visible"); + assert.containsOnce(form, '.oe_pad_content:contains(This pad will be)', + "content should display a message when not initialized"); + + await testUtils.form.clickEdit(form); + + assert.containsOnce(form, '.oe_pad_content iframe', + "should have an iframe"); + + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('pad widget works, with existing data', async function (assert) { + assert.expect(3); + + var contentDef = testUtils.makeTestPromise(); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 2, + mockRPC: function (route, args) { + if (_.str.startsWith(route, 'http')) { + return Promise.resolve(true); + } + var result = this._super.apply(this, arguments); + if (args.method === 'pad_get_content') { + return contentDef.then(_.constant(result)); + } + if (args.method === 'write') { + assert.ok('description' in args.args[1], + "should always send the description value"); + } + return result; + }, + session: { + name: "batman", + }, + }); + assert.strictEqual(form.$('.oe_pad_content').text(), "Loading", + "should display loading message"); + contentDef.resolve(); + await testUtils.nextTick(); + assert.strictEqual(form.$('.oe_pad_content').text(), "we should rewrite this server in haskell", + "should display proper value"); + + await testUtils.form.clickEdit(form); + await testUtils.form.clickSave(form); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('pad widget is not considered dirty at creation', async function (assert) { + assert.expect(2); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + mockRPC: function (route, args) { + if (!args.method) { + return Promise.resolve(true); + } + return this._super.apply(this, arguments); + }, + session: { + name: "batman", + }, + }); + var def = form.canBeDiscarded(); + var defState = 'unresolved'; + def.then(function () { + defState = 'resolved'; + }); + + assert.strictEqual($('.modal').length, 0, + "should have no confirmation modal opened"); + await testUtils.nextTick(); + assert.strictEqual(defState, 'resolved', + "can be discarded was successfully resolved"); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('pad widget is not considered dirty at edition', async function (assert) { + assert.expect(2); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 2, + mockRPC: function (route, args) { + if (!args.method) { + return Promise.resolve(true); + } + return this._super.apply(this, arguments); + }, + session: { + name: "batman", + }, + }); + await testUtils.form.clickEdit(form); + var def = form.canBeDiscarded(); + var defState = 'unresolved'; + def.then(function () { + defState = 'resolved'; + }); + + assert.strictEqual($('.modal').length, 0, + "should have no confirmation modal opened"); + await testUtils.nextTick(); + assert.strictEqual(defState, 'resolved', + "can be discarded was successfully resolved"); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('record should be discarded properly even if only pad has changed', async function (assert) { + assert.expect(1); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="description" widget="pad"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 2, + mockRPC: function (route, args) { + if (!args.method) { + return Promise.resolve(true); + } + return this._super.apply(this, arguments); + }, + session: { + name: "batman", + }, + }); + await testUtils.form.clickEdit(form); + await testUtils.form.clickDiscard(form); + assert.strictEqual(form.$('.oe_pad_readonly').text(), this.data.task.pad_get_content(), + "pad content should not have changed"); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + + QUnit.test('no pad deadlock on form change modifying pad readonly modifier', async function (assert) { + assert.expect(1); + + var form = await createView({ + View: FormView, + model: 'task', + data: this.data, + arch:'<form>' + + '<sheet>' + + '<group>' + + '<field name="use_pad" widget="toggle_button"/>' + + '<field name="description" widget="pad" attrs="{\'readonly\': [(\'use_pad\', \'=\', False)]}"/>' + + '</group>' + + '</sheet>' + + '</form>', + res_id: 2, + mockRPC: function (route, args) { + if (!args.method) { + return Promise.resolve(true); + } + if (args.method === "write") { + assert.strictEqual(args.args[1].description, + "https://pad.odoo.pad/p/test-03AK6RCJT"); + } + return this._super.apply(this, arguments); + }, + }); + await testUtils.form.clickEdit(form); + await testUtils.dom.click(form.$('.o_field_widget[name="use_pad"]')); + await testUtils.form.clickSave(form); + form.destroy(); + delete FieldPad.prototype.isPadConfigured; + }); + +}); |
