|
4 | 4 |
|
5 | 5 | describe Jobs::DetectPostsTranslation do |
6 | 6 | fab!(:posts) { Fabricate.times(5, :post) } |
| 7 | + let(:redis_key) { DiscourseTranslator::LANG_DETECT_NEEDED } |
7 | 8 |
|
8 | 9 | before do |
9 | 10 | SiteSetting.translator_enabled = true |
|
14 | 15 | { translated_text: "大丈夫", source_language_code: "en", target_language_code: "jp" }, |
15 | 16 | ) |
16 | 17 | Aws::Translate::Client.stubs(:new).returns(client) |
17 | | - posts.each { |post| Discourse.redis.sadd?(DiscourseTranslator::LANG_DETECT_NEEDED, post.id) } |
| 18 | + posts.each { |post| Discourse.redis.sadd?(redis_key, post.id) } |
18 | 19 | end |
19 | 20 |
|
20 | 21 | it "processes posts in batches and updates their translations" do |
|
25 | 26 | expect(post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD]).not_to be_nil |
26 | 27 | end |
27 | 28 |
|
28 | | - expect(Discourse.redis.smembers(DiscourseTranslator::LANG_DETECT_NEEDED)).to be_empty |
| 29 | + expect(Discourse.redis.smembers(redis_key)).to be_empty |
29 | 30 | end |
30 | 31 |
|
31 | 32 | it "does not process posts if the translator is disabled" do |
|
37 | 38 | expect(post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD]).to be_nil |
38 | 39 | end |
39 | 40 |
|
40 | | - expect(Discourse.redis.smembers(DiscourseTranslator::LANG_DETECT_NEEDED)).to match_array( |
41 | | - posts.map(&:id).map(&:to_s), |
42 | | - ) |
| 41 | + expect(Discourse.redis.smembers(redis_key)).to match_array(posts.map(&:id).map(&:to_s)) |
43 | 42 | end |
44 | 43 |
|
45 | 44 | it "processes a maximum of MAX_QUEUE_SIZE posts per run" do |
46 | 45 | large_number = 2000 |
47 | | - large_number.times { |i| Discourse.redis.sadd?(DiscourseTranslator::LANG_DETECT_NEEDED, i + 1) } |
| 46 | + large_number.times { |i| Discourse.redis.sadd?(redis_key, i + 1) } |
48 | 47 | described_class.new.execute({}) |
49 | 48 |
|
50 | | - remaining = Discourse.redis.scard(DiscourseTranslator::LANG_DETECT_NEEDED) |
| 49 | + remaining = Discourse.redis.scard(redis_key) |
51 | 50 | expect(remaining).to eq(large_number - Jobs::DetectPostsTranslation::MAX_QUEUE_SIZE) |
52 | 51 | end |
53 | 52 |
|
54 | 53 | it "handles an empty Redis queue gracefully" do |
55 | | - Discourse.redis.del(DiscourseTranslator::LANG_DETECT_NEEDED) |
| 54 | + Discourse.redis.del(redis_key) |
56 | 55 | expect { described_class.new.execute({}) }.not_to raise_error |
57 | 56 | end |
58 | 57 |
|
59 | 58 | it "removes successfully processed posts from Redis" do |
60 | 59 | described_class.new.execute({}) |
61 | 60 |
|
62 | | - posts.each do |post| |
63 | | - expect( |
64 | | - Discourse.redis.sismember(DiscourseTranslator::LANG_DETECT_NEEDED, post.id), |
65 | | - ).to be_falsey |
66 | | - end |
| 61 | + posts.each { |post| expect(Discourse.redis.sismember(redis_key, post.id)).to be_falsey } |
67 | 62 | end |
68 | 63 |
|
69 | 64 | it "skips posts that no longer exist" do |
70 | 65 | non_existent_post_id = -1 |
71 | | - Discourse.redis.sadd?(DiscourseTranslator::LANG_DETECT_NEEDED, non_existent_post_id) |
| 66 | + Discourse.redis.sadd?(redis_key, non_existent_post_id) |
72 | 67 |
|
73 | 68 | expect { described_class.new.execute({}) }.not_to raise_error |
74 | 69 |
|
75 | | - expect( |
76 | | - Discourse.redis.sismember(DiscourseTranslator::LANG_DETECT_NEEDED, non_existent_post_id), |
77 | | - ).to be_falsey |
| 70 | + expect(Discourse.redis.sismember(redis_key, non_existent_post_id)).to be_falsey |
78 | 71 | end |
79 | 72 |
|
80 | 73 | it "ensures posts are processed within a distributed mutex" do |
81 | | - mutex_spy = instance_spy(DistributedMutex) |
82 | 74 | allow(DistributedMutex).to receive(:synchronize).and_yield |
83 | 75 |
|
84 | 76 | described_class.new.execute({}) |
|
0 commit comments