 ### Snyk has created this PR to fix 1 vulnerabilities in the rubygems dependencies of this project. #### Snyk changed the following file(s): - `Gemfile` <details> <summary>⚠️ <b>Warning</b></summary> ``` Failed to update the Gemfile.lock, please update manually before merging. ``` </details> #### Vulnerabilities that will be fixed with an upgrade: | | Issue | Score | :-------------------------:|:-------------------------|:-------------------------  | Web Cache Poisoning <br/>[SNYK-RUBY-RACK-1061917](https://snyk.io/vuln/SNYK-RUBY-RACK-1061917) | **616** --- > [!IMPORTANT] > > - Check the changes in this PR to ensure they won't cause issues with your project. > - Max score is 1000. Note that the real score may have changed since the PR was raised. > - This PR was automatically created by Snyk using the credentials of a real user. --- **Note:** _You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs._ For more information: <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJhMWE2MzkzZS03ODdhLTRmYWItOGY1MS0zZjdmN2YzNzVlZDYiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImExYTYzOTNlLTc4N2EtNGZhYi04ZjUxLTNmN2Y3ZjM3NWVkNiJ9fQ==" width="0" height="0"/> 🧐 [View latest project report](https://app.snyk.io/org/chatwoot/project/b7197bbd-6200-4f23-931d-c39928584360?utm_source=github&utm_medium=referral&page=fix-pr) 📜 [Customise PR templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates) 🛠 [Adjust project settings](https://app.snyk.io/org/chatwoot/project/b7197bbd-6200-4f23-931d-c39928584360?utm_source=github&utm_medium=referral&page=fix-pr/settings) 📚 [Read about Snyk's upgrade logic](https://support.snyk.io/hc/en-us/articles/360003891078-Snyk-patches-to-fix-vulnerabilities) --- **Learn how to fix vulnerabilities with free interactive lessons:** 🦉 [Learn about vulnerability in an interactive lesson of Snyk Learn.](https://learn.snyk.io/?loc=fix-pr) [//]: # 'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"rspec-rails","from":"6.1.4","to":"6.1.5"}],"env":"prod","issuesToFix":[{"exploit_maturity":"Proof of Concept","id":"SNYK-RUBY-RACK-1061917","priority_score":616,"priority_score_factors":[{"type":"exploit","label":"Proof of Concept","score":107},{"type":"fixability","label":true,"score":214},{"type":"cvssScore","label":"5.9","score":295},{"type":"scoreVersion","label":"v1","score":1}],"severity":"medium","title":"Web Cache Poisoning"},{"exploit_maturity":"Proof of Concept","id":"SNYK-RUBY-RACK-1061917","priority_score":616,"priority_score_factors":[{"type":"exploit","label":"Proof of Concept","score":107},{"type":"fixability","label":true,"score":214},{"type":"cvssScore","label":"5.9","score":295},{"type":"scoreVersion","label":"v1","score":1}],"severity":"medium","title":"Web Cache Poisoning"},{"exploit_maturity":"Proof of Concept","id":"SNYK-RUBY-RACK-1061917","priority_score":616,"priority_score_factors":[{"type":"exploit","label":"Proof of Concept","score":107},{"type":"fixability","label":true,"score":214},{"type":"cvssScore","label":"5.9","score":295},{"type":"scoreVersion","label":"v1","score":1}],"severity":"medium","title":"Web Cache Poisoning"},{"exploit_maturity":"Proof of Concept","id":"SNYK-RUBY-RACK-1061917","priority_score":616,"priority_score_factors":[{"type":"exploit","label":"Proof of Concept","score":107},{"type":"fixability","label":true,"score":214},{"type":"cvssScore","label":"5.9","score":295},{"type":"scoreVersion","label":"v1","score":1}],"severity":"medium","title":"Web Cache Poisoning"}],"prId":"a1a6393e-787a-4fab-8f51-3f7f7f375ed6","prPublicId":"a1a6393e-787a-4fab-8f51-3f7f7f375ed6","packageManager":"rubygems","priorityScoreList":[616],"projectPublicId":"b7197bbd-6200-4f23-931d-c39928584360","projectUrl":"https://app.snyk.io/org/chatwoot/project/b7197bbd-6200-4f23-931d-c39928584360?utm_source=github&utm_medium=referral&page=fix-pr","prType":"fix","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":["updated-fix-title","pr-warning-shown","priorityScore"],"type":"auto","upgrade":["SNYK-RUBY-RACK-1061917"],"vulns":["SNYK-RUBY-RACK-1061917"],"patch":[],"isBreakingChange":false,"remediationStrategy":"vuln"}' --------- Co-authored-by: snyk-bot <snyk-bot@snyk.io>
81 lines
3.1 KiB
Ruby
81 lines
3.1 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Conversations::UpdateMessageStatusJob do
|
|
subject(:job) { described_class.perform_later(conversation.id, conversation.contact_last_seen_at, :read) }
|
|
|
|
let!(:account) { create(:account) }
|
|
let!(:conversation) { create(:conversation, account: account, contact_last_seen_at: DateTime.now.utc) }
|
|
let!(:message) { create(:message, conversation: conversation, message_type: 'outgoing', status: 'sent', created_at: 1.day.ago) }
|
|
|
|
it 'enqueues the job' do
|
|
expect { job }.to have_enqueued_job(described_class)
|
|
.with(conversation.id, conversation.contact_last_seen_at, :read)
|
|
.on_queue('low')
|
|
end
|
|
|
|
context 'when called' do
|
|
it 'marks all sent messages in a conversation as read' do
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
message.reload
|
|
end.to change(message, :status).from('sent').to('read')
|
|
end
|
|
|
|
it 'marks all sent messages in a conversation as delivered if specified' do
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at, :delivered)
|
|
message.reload
|
|
end.to change(message, :status).from('sent').to('delivered')
|
|
end
|
|
|
|
it 'marks all delivered messages in a conversation as read' do
|
|
message.update!(status: 'delivered')
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
message.reload
|
|
end.to change(message, :status).from('delivered').to('read')
|
|
end
|
|
|
|
it 'marks all templates messages in a conversation as read' do
|
|
message.update!(status: 'delivered', message_type: 'template')
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
message.reload
|
|
end.to change(message, :status).from('delivered').to('read')
|
|
end
|
|
|
|
it 'does not mark failed messages as read' do
|
|
message.update!(status: 'failed')
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
end.not_to change(message.reload, :status)
|
|
end
|
|
|
|
it 'does not mark incoming messages as read' do
|
|
message.update!(message_type: 'incoming')
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
end.not_to change(message.reload, :status)
|
|
end
|
|
|
|
it 'does not mark messages created after the contact last seen time as read' do
|
|
message.update!(created_at: DateTime.now.utc)
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at)
|
|
end.not_to change(message.reload, :status)
|
|
end
|
|
|
|
it 'does not run the job if the conversation does not exist' do
|
|
expect do
|
|
described_class.perform_now(1212, conversation.contact_last_seen_at)
|
|
end.not_to change(message.reload, :status)
|
|
end
|
|
|
|
it 'does not run the job if the status is failed' do
|
|
expect do
|
|
described_class.perform_now(conversation.id, conversation.contact_last_seen_at, :failed)
|
|
end.not_to change(message.reload, :status)
|
|
end
|
|
end
|
|
end
|