docbrown/spec/services/segmented_users/bulk_delete_spec.rb
PJ 795cfc3da0
Manual Audience Segments API write endpoints (#19476)
* add composite index to segmented_users table

* bulk queries for segmented users

* create segment endpoint

* adding and removing users

* deleting segments 😪

* fix time precision in specs

* api docs 🎉

* pluck improvements that couldn't be cherry-picked

* better service objects; also introduce batch upserting

* docs???
2023-05-25 20:37:18 +01:00

32 lines
1.2 KiB
Ruby

require "rails_helper"
RSpec.describe SegmentedUsers::BulkDelete, type: :service do
let(:audience_segment) { AudienceSegment.create!(type_of: "manual") }
let(:users) { create_list(:user, 5) }
it "removes only the passed users from the segment" do
retained_users = create_list(:user, 3)
audience_segment.users << users
audience_segment.users << retained_users
user_ids = users.map(&:id)
result = described_class.call(audience_segment, user_ids: user_ids)
expect(result.succeeded).to match_array(user_ids)
expect(result.failed).to be_empty
expect(audience_segment.users).to match_array(retained_users)
end
it "gracefully handles users that don't exist or aren't part of the segment" do
user_in_segment = users.first
audience_segment.users << user_in_segment
user_not_in_segment = create(:user)
user_ids = [user_in_segment.id, user_not_in_segment.id, "foo", 1_234_567_890]
result = described_class.call(audience_segment, user_ids: user_ids)
expect(result.succeeded).to contain_exactly(user_in_segment.id)
expect(result.failed).to contain_exactly(user_not_in_segment.id, "foo", 1_234_567_890)
expect(audience_segment.reload.users).to be_empty
end
end