diff --git a/addons/im_livechat/static/src/embed/core/thread_service_patch.js b/addons/im_livechat/static/src/embed/core/thread_service_patch.js index 89a6c12533b..d5cd6b9c6d1 100644 --- a/addons/im_livechat/static/src/embed/core/thread_service_patch.js +++ b/addons/im_livechat/static/src/embed/core/thread_service_patch.js @@ -133,17 +133,23 @@ patch(ThreadService.prototype, { }); } onChange(thread, "state", () => { - if ([SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(thread.state)) { + if ( + ![SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(this.livechatService.state) + ) { this.livechatService.updateSession({ state: thread.state }); } }); onChange(thread, "seen_message_id", () => { - if ([SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(thread.state)) { + if ( + ![SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(this.livechatService.state) + ) { this.livechatService.updateSession({ seen_message_id: thread.seen_message_id }); } }); onChange(thread, "message_unread_counter", () => { - if ([SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(thread.state)) { + if ( + ![SESSION_STATE.CLOSED, SESSION_STATE.NONE].includes(this.livechatService.state) + ) { this.livechatService.updateSession({ channel: thread.channel }); } }); diff --git a/addons/im_livechat/static/tests/embed/livechat_session_tests.js b/addons/im_livechat/static/tests/embed/livechat_session_tests.js index 17ec20404d7..e0cf44555cc 100644 --- a/addons/im_livechat/static/tests/embed/livechat_session_tests.js +++ b/addons/im_livechat/static/tests/embed/livechat_session_tests.js @@ -62,3 +62,29 @@ QUnit.test("Session is reset after failing to persist the channel", async (asser await click(".o-livechat-LivechatButton"); assert.containsOnce($, ".o-mail-ChatWindow"); }); + +QUnit.test("Thread state is saved on the session", async (assert) => { + await startServer(); + await loadDefaultConfig(); + const env = await start(); + await click(".o-livechat-LivechatButton"); + assert.strictEqual(env.services["im_livechat.livechat"].sessionCookie.state, "open"); + await click(".o-mail-ChatWindow-header"); + assert.strictEqual(env.services["im_livechat.livechat"].sessionCookie.state, "folded"); + await click(".o-mail-ChatWindow-header"); + assert.strictEqual(env.services["im_livechat.livechat"].sessionCookie.state, "open"); +}); + +QUnit.test("Seen message is saved on the session", async (assert) => { + await startServer(); + await loadDefaultConfig(); + const env = await start(); + await click(".o-livechat-LivechatButton"); + assert.notOk(env.services["im_livechat.livechat"].sessionCookie.seen_message_id); + await insertText(".o-mail-Composer-input", "Hello World!"); + await afterNextRender(() => triggerHotkey("Enter")); + assert.strictEqual( + env.services["im_livechat.livechat"].sessionCookie.seen_message_id, + env.services["im_livechat.livechat"].thread.seenInfos[0].lastSeenMessage.id + ); +});