diff --git a/addons/google_spreadsheet/__manifest__.py b/addons/google_spreadsheet/__manifest__.py
index 27cc77580c3..0ded9e6f2ef 100644
--- a/addons/google_spreadsheet/__manifest__.py
+++ b/addons/google_spreadsheet/__manifest__.py
@@ -23,6 +23,9 @@ The module adds the possibility to display data from Odoo in Google Spreadsheets
'web.assets_qweb': [
'google_spreadsheet/static/src/**/*.xml',
],
+ 'web.qunit_suite_tests': [
+ 'google_spreadsheet/static/tests/**/*',
+ ],
},
'license': 'LGPL-3',
}
diff --git a/addons/google_spreadsheet/static/src/add_to_google_spreadsheet/add_to_google_spreadsheet.js b/addons/google_spreadsheet/static/src/add_to_google_spreadsheet/add_to_google_spreadsheet.js
index 589c127f58d..14acca6fa66 100644
--- a/addons/google_spreadsheet/static/src/add_to_google_spreadsheet/add_to_google_spreadsheet.js
+++ b/addons/google_spreadsheet/static/src/add_to_google_spreadsheet/add_to_google_spreadsheet.js
@@ -3,6 +3,7 @@
import { DropdownItem } from "@web/core/dropdown/dropdown_item";
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
+import { Domain } from "@web/core/domain";
const { Component } = owl;
const favoriteMenuRegistry = registry.category("favoriteMenu");
@@ -26,11 +27,13 @@ export class AddToGoogleSpreadsheet extends Component {
async addToGoogleSpreadsheet() {
const { domain, groupBy, resModel, view } = this.env.searchModel;
+ const viewId = view ? view.id : false;
+ const domainAsString = (new Domain(domain)).toString();
const result = await this.orm.call(
"google.drive.config",
"set_spreadsheet",
- [resModel, domain, groupBy, view.id]
+ [resModel, domainAsString, groupBy, viewId]
);
if (result.url) {
diff --git a/addons/google_spreadsheet/static/tests/add_to_google_spreadsheet.js b/addons/google_spreadsheet/static/tests/add_to_google_spreadsheet.js
new file mode 100644
index 00000000000..2226b5b9d6f
--- /dev/null
+++ b/addons/google_spreadsheet/static/tests/add_to_google_spreadsheet.js
@@ -0,0 +1,83 @@
+/** @odoo-module */
+
+import ListView from "web.ListView";
+import testUtils from "web.test_utils";
+import { AddToGoogleSpreadsheet } from "../src/add_to_google_spreadsheet/add_to_google_spreadsheet";
+
+AddToGoogleSpreadsheet.shouldBeDisplayed = (env) => true;
+import { ormService } from "@web/core/orm_service";
+import * as LegacyFavoriteMenu from "web.FavoriteMenu"
+import { makeTestEnv } from "../../../web/static/tests/helpers/mock_env";
+import { makeMockServer } from "../../../web/static/tests/helpers/mock_server";
+
+const createView = testUtils.createView;
+
+import { registry } from "@web/core/registry";
+const serviceRegistry = registry.category("services");
+const legacyFavoriteMenuRegistry = LegacyFavoriteMenu.registry;
+
+
+QUnit.module(
+ "google_spreadsheet > insert_in_google_spreadsheet_from_favorite_menu",
+ {
+ beforeEach: function () {
+ legacyFavoriteMenuRegistry.add(
+ "add-to-google-spreadsheet",
+ AddToGoogleSpreadsheet,
+ 1
+ );
+ this.data = {
+ foo: {
+ fields: {
+ foo: {string: "Foo", type: "char"},
+ },
+ records: [{id: 1, foo: "yop"}],
+ },
+ };
+ },
+ },
+ function () {
+ QUnit.test("Menu item is present in list view", async function (assert) {
+ assert.expect(1);
+ const list = await createView({
+ View: ListView,
+ model: "foo",
+ data: this.data,
+ services: {orm: ormService},
+ arch: '',
+ });
+ await testUtils.dom.click(list.$(".o_favorite_menu button"));
+ assert.containsOnce(list, ".o_add_to_spreadsheet");
+
+ list.destroy();
+ });
+
+ QUnit.test("Parameters are correct", async function (assert) {
+ assert.expect(3);
+
+ serviceRegistry.add("orm", ormService);
+ const mockRPC = (route, args) => {
+ if(route.includes("set_spreadsheet")){
+ assert.strictEqual(args.args.length, 4);
+ assert.strictEqual(typeof args.args[1], 'string');
+ assert.notEqual(typeof args.args[3], 'undefined');
+ return Promise.reject("erreur");
+ }
+ };
+ makeMockServer(this.data, mockRPC);
+ const env = await makeTestEnv();
+
+ const list = await createView({
+ View: ListView,
+ model: "foo",
+ data: this.data,
+ services: {orm: env.services.orm},
+ arch: '',
+ });
+ await testUtils.dom.click(list.$(".o_favorite_menu button"))
+ await testUtils.dom.click(list.$(".o_add_to_spreadsheet"))
+
+ list.destroy();
+ });
+ }
+);