From 26a7e1b626f68743b59b799a2476cbb6f5571bbc Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Fri, 19 Sep 2025 13:43:21 +0530 Subject: [PATCH 1/3] Bump version to 4.6.0 --- config/app.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/app.yml b/config/app.yml index d11111fbc..34d044656 100644 --- a/config/app.yml +++ b/config/app.yml @@ -1,5 +1,5 @@ shared: &shared - version: '4.5.2' + version: '4.6.0' development: <<: *shared diff --git a/package.json b/package.json index 3972a328e..66dd84aa2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@chatwoot/chatwoot", - "version": "4.5.2", + "version": "4.6.0", "license": "MIT", "scripts": { "eslint": "eslint app/**/*.{js,vue}", From 98f4a6f797832c073f226d73bc036a8f92e78854 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Fri, 19 Sep 2025 16:37:57 +0530 Subject: [PATCH 2/3] chore: Ensure admin notification mailer specs are order agnostic (#12472) ## Summary - update the admin notification base mailer spec to ignore ordering when verifying administrator email addresses - extend the channel and integrations admin notification mailer specs to cover multiple administrators without relying on recipient order ------ https://chatgpt.com/codex/tasks/task_e_68cc7457cf788326a765f116ceab1732 Co-authored-by: Muhsin Keloth --- .../administrator_notifications/base_mailer_spec.rb | 5 ++--- .../channel_notifications_mailer_spec.rb | 7 ++++--- .../integrations_notification_mailer_spec.rb | 5 +++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/spec/mailers/administrator_notifications/base_mailer_spec.rb b/spec/mailers/administrator_notifications/base_mailer_spec.rb index 619fef0a7..1524a46cc 100644 --- a/spec/mailers/administrator_notifications/base_mailer_spec.rb +++ b/spec/mailers/administrator_notifications/base_mailer_spec.rb @@ -17,8 +17,7 @@ RSpec.describe AdministratorNotifications::BaseMailer do # Call the private method admin_emails = mailer.send(:admin_emails) - expect(admin_emails).to include(admin1.email) - expect(admin_emails).to include(admin2.email) + expect(admin_emails).to contain_exactly(admin1.email, admin2.email) expect(admin_emails).not_to include(agent.email) end end @@ -49,7 +48,7 @@ RSpec.describe AdministratorNotifications::BaseMailer do # Mock the send_mail_with_liquid method expect(mailer).to receive(:send_mail_with_liquid).with( - to: [admin1.email, admin2.email], + to: contain_exactly(admin1.email, admin2.email), subject: subject ).and_return(true) diff --git a/spec/mailers/administrator_notifications/channel_notifications_mailer_spec.rb b/spec/mailers/administrator_notifications/channel_notifications_mailer_spec.rb index e5cd7327b..39bc4ee1a 100644 --- a/spec/mailers/administrator_notifications/channel_notifications_mailer_spec.rb +++ b/spec/mailers/administrator_notifications/channel_notifications_mailer_spec.rb @@ -9,6 +9,7 @@ RSpec.describe AdministratorNotifications::ChannelNotificationsMailer do let(:class_instance) { described_class.new } let!(:account) { create(:account) } let!(:administrator) { create(:user, :administrator, email: 'agent1@example.com', account: account) } + let!(:another_administrator) { create(:user, :administrator, email: 'agent2@example.com', account: account) } describe 'facebook_disconnect' do before do @@ -26,7 +27,7 @@ RSpec.describe AdministratorNotifications::ChannelNotificationsMailer do end it 'renders the receiver email' do - expect(mail.to).to eq([administrator.email]) + expect(mail.to).to contain_exactly(administrator.email, another_administrator.email) end end end @@ -41,7 +42,7 @@ RSpec.describe AdministratorNotifications::ChannelNotificationsMailer do end it 'renders the receiver email' do - expect(mail.to).to eq([administrator.email]) + expect(mail.to).to contain_exactly(administrator.email, another_administrator.email) end end @@ -55,7 +56,7 @@ RSpec.describe AdministratorNotifications::ChannelNotificationsMailer do end it 'renders the receiver email' do - expect(mail.to).to eq([administrator.email]) + expect(mail.to).to contain_exactly(administrator.email, another_administrator.email) end end end diff --git a/spec/mailers/administrator_notifications/integrations_notification_mailer_spec.rb b/spec/mailers/administrator_notifications/integrations_notification_mailer_spec.rb index 331d33d06..04bc405f4 100644 --- a/spec/mailers/administrator_notifications/integrations_notification_mailer_spec.rb +++ b/spec/mailers/administrator_notifications/integrations_notification_mailer_spec.rb @@ -6,6 +6,7 @@ RSpec.describe AdministratorNotifications::IntegrationsNotificationMailer do let!(:account) { create(:account) } let!(:administrator) { create(:user, :administrator, email: 'admin@example.com', account: account) } + let!(:another_administrator) { create(:user, :administrator, email: 'owner@example.com', account: account) } describe 'slack_disconnect' do let(:mail) { described_class.with(account: account).slack_disconnect.deliver_now } @@ -15,7 +16,7 @@ RSpec.describe AdministratorNotifications::IntegrationsNotificationMailer do end it 'renders the receiver email' do - expect(mail.to).to eq([administrator.email]) + expect(mail.to).to contain_exactly(administrator.email, another_administrator.email) end it 'includes reconnect instructions in the body' do @@ -35,7 +36,7 @@ RSpec.describe AdministratorNotifications::IntegrationsNotificationMailer do end it 'renders the receiver email' do - expect(mail.to).to eq([administrator.email]) + expect(mail.to).to contain_exactly(administrator.email, another_administrator.email) end end end From 891404aaf132010afaa7c21ba22d68b5865b6b0a Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:10:26 +0530 Subject: [PATCH 3/3] feat: Captain animating SVGs (#12448) # Pull Request Template ## Description This PR includes new animating SVG for Captain pages ## Type of change - [x] New feature (non-breaking change which adds functionality) ###Screencast https://github.com/user-attachments/assets/181470d4-2ac7-4056-83bb-7371ba214b6f ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [ ] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Muhsin Keloth --- .../AnimatingImg/AnimatingImg.story.vue | 34 + .../captain/AnimatingImg/Guardrails.vue | 1000 ++++++++++++++++ .../AnimatingImg/ResponseGuidelines.vue | 990 +++++++++++++++ .../captain/AnimatingImg/Scenarios.vue | 1060 +++++++++++++++++ .../captain/AnimatingImg/Settings.vue | 752 ++++++++++++ 5 files changed, 3836 insertions(+) create mode 100644 app/javascript/dashboard/components-next/captain/AnimatingImg/AnimatingImg.story.vue create mode 100644 app/javascript/dashboard/components-next/captain/AnimatingImg/Guardrails.vue create mode 100644 app/javascript/dashboard/components-next/captain/AnimatingImg/ResponseGuidelines.vue create mode 100644 app/javascript/dashboard/components-next/captain/AnimatingImg/Scenarios.vue create mode 100644 app/javascript/dashboard/components-next/captain/AnimatingImg/Settings.vue diff --git a/app/javascript/dashboard/components-next/captain/AnimatingImg/AnimatingImg.story.vue b/app/javascript/dashboard/components-next/captain/AnimatingImg/AnimatingImg.story.vue new file mode 100644 index 000000000..c75e6bd6d --- /dev/null +++ b/app/javascript/dashboard/components-next/captain/AnimatingImg/AnimatingImg.story.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/javascript/dashboard/components-next/captain/AnimatingImg/Guardrails.vue b/app/javascript/dashboard/components-next/captain/AnimatingImg/Guardrails.vue new file mode 100644 index 000000000..e99d01758 --- /dev/null +++ b/app/javascript/dashboard/components-next/captain/AnimatingImg/Guardrails.vue @@ -0,0 +1,1000 @@ + + + + + diff --git a/app/javascript/dashboard/components-next/captain/AnimatingImg/ResponseGuidelines.vue b/app/javascript/dashboard/components-next/captain/AnimatingImg/ResponseGuidelines.vue new file mode 100644 index 000000000..958f97dee --- /dev/null +++ b/app/javascript/dashboard/components-next/captain/AnimatingImg/ResponseGuidelines.vue @@ -0,0 +1,990 @@ + + + + + diff --git a/app/javascript/dashboard/components-next/captain/AnimatingImg/Scenarios.vue b/app/javascript/dashboard/components-next/captain/AnimatingImg/Scenarios.vue new file mode 100644 index 000000000..b50bcf0ac --- /dev/null +++ b/app/javascript/dashboard/components-next/captain/AnimatingImg/Scenarios.vue @@ -0,0 +1,1060 @@ + + + + + diff --git a/app/javascript/dashboard/components-next/captain/AnimatingImg/Settings.vue b/app/javascript/dashboard/components-next/captain/AnimatingImg/Settings.vue new file mode 100644 index 000000000..d50b2ff54 --- /dev/null +++ b/app/javascript/dashboard/components-next/captain/AnimatingImg/Settings.vue @@ -0,0 +1,752 @@ + + +