@@ -12,34 +12,30 @@ defmodule Sequin.Runtime.GcpPubsubPipelineTest do
1212 setup do
1313 consumer = ConsumersFactory . insert_sink_consumer! ( type: :gcp_pubsub , batch_size: 10 )
1414
15- # Setup auth token expectation for all tests
16- Req.Test . expect ( PubSub , fn conn ->
17- if conn . host == "oauth2.googleapis.com" do
18- Req.Test . json ( conn , % { "access_token" => "test_token" } )
19- end
20- end )
21-
2215 { :ok , % { consumer: consumer } }
2316 end
2417
2518 test "events are sent to PubSub" , % { consumer: consumer } do
2619 message = ConsumersFactory . consumer_message ( )
2720
28- # Mock PubSub publish
29- Req.Test . expect ( PubSub , fn conn ->
30- assert conn . method == "POST"
31- assert conn . host == "pubsub.googleapis.com"
32- assert String . contains? ( conn . request_path , ":publish" )
21+ Req.Test . stub ( PubSub , fn conn ->
22+ if conn . host == "oauth2.googleapis.com" do
23+ Req.Test . json ( conn , % { "access_token" => "test_token" } )
24+ else
25+ assert conn . method == "POST"
26+ assert conn . host == "pubsub.googleapis.com"
27+ assert String . contains? ( conn . request_path , ":publish" )
3328
34- { :ok , body , _ } = Plug.Conn . read_body ( conn )
35- body = Jason . decode! ( body )
29+ { :ok , body , _ } = Plug.Conn . read_body ( conn )
30+ body = Jason . decode! ( body )
3631
37- data = get_in ( body , [ "messages" , Access . at ( 0 ) , "data" ] )
38- data = data |> Base . decode64! ( ) |> Jason . decode! ( )
39- assert Map . has_key? ( data , "record" )
40- assert Map . has_key? ( data , "metadata" )
32+ data = get_in ( body , [ "messages" , Access . at ( 0 ) , "data" ] )
33+ data = data |> Base . decode64! ( ) |> Jason . decode! ( )
34+ assert Map . has_key? ( data , "record" )
35+ assert Map . has_key? ( data , "metadata" )
4136
42- Req.Test . json ( conn , % { } )
37+ Req.Test . json ( conn , % { } )
38+ end
4339 end )
4440
4541 start_pipeline! ( consumer )
@@ -55,16 +51,19 @@ defmodule Sequin.Runtime.GcpPubsubPipelineTest do
5551 message1 = ConsumersFactory . consumer_message ( group_id: group_id )
5652 message2 = ConsumersFactory . consumer_message ( group_id: group_id )
5753
58- # Mock PubSub publish and verify batch
59- Req.Test . expect ( PubSub , fn conn ->
60- assert conn . method == "POST"
61- assert conn . host == "pubsub.googleapis.com"
54+ Req.Test . stub ( PubSub , fn conn ->
55+ if conn . host == "oauth2.googleapis.com" do
56+ Req.Test . json ( conn , % { "access_token" => "test_token" } )
57+ else
58+ assert conn . method == "POST"
59+ assert conn . host == "pubsub.googleapis.com"
6260
63- { :ok , body , _ } = Plug.Conn . read_body ( conn )
64- body = Jason . decode! ( body )
65- assert length ( body [ "messages" ] ) == 2
61+ { :ok , body , _ } = Plug.Conn . read_body ( conn )
62+ body = Jason . decode! ( body )
63+ assert length ( body [ "messages" ] ) == 2
6664
67- Req.Test . json ( conn , % { } )
65+ Req.Test . json ( conn , % { } )
66+ end
6867 end )
6968
7069 start_pipeline! ( consumer )
@@ -78,7 +77,9 @@ defmodule Sequin.Runtime.GcpPubsubPipelineTest do
7877 message1 = ConsumersFactory . consumer_message ( group_id: group_id )
7978 message2 = ConsumersFactory . consumer_message ( group_id: group_id )
8079
81- Req.Test . expect ( PubSub , 3 , fn conn ->
80+ # Use stub to handle non-deterministic auth request count (1 or 2 auth requests
81+ # depending on whether the token is cached before the second batch processor starts)
82+ Req.Test . stub ( PubSub , fn conn ->
8283 if conn . host == "oauth2.googleapis.com" do
8384 Req.Test . json ( conn , % { "access_token" => "test_token" } )
8485 else
@@ -102,11 +103,14 @@ defmodule Sequin.Runtime.GcpPubsubPipelineTest do
102103
103104 @ tag capture_log: true
104105 test "failed PubSub publish results in failed events" , % { consumer: consumer } do
105- # Mock failed PubSub publish
106- Req.Test . expect ( PubSub , fn conn ->
107- conn
108- |> Plug.Conn . put_status ( 500 )
109- |> Req.Test . json ( % { "error" => "Failed to publish to PubSub" } )
106+ Req.Test . stub ( PubSub , fn conn ->
107+ if conn . host == "oauth2.googleapis.com" do
108+ Req.Test . json ( conn , % { "access_token" => "test_token" } )
109+ else
110+ conn
111+ |> Plug.Conn . put_status ( 500 )
112+ |> Req.Test . json ( % { "error" => "Failed to publish to PubSub" } )
113+ end
110114 end )
111115
112116 start_pipeline! ( consumer )
@@ -133,13 +137,16 @@ defmodule Sequin.Runtime.GcpPubsubPipelineTest do
133137
134138 message = ConsumersFactory . consumer_message ( )
135139
136- # Mock PubSub publish and verify topic
137- Req.Test . expect ( PubSub , fn conn ->
138- assert conn . method == "POST"
139- assert conn . host == "pubsub.googleapis.com"
140- assert String . contains? ( conn . request_path , "/my_topic:publish" )
140+ Req.Test . stub ( PubSub , fn conn ->
141+ if conn . host == "oauth2.googleapis.com" do
142+ Req.Test . json ( conn , % { "access_token" => "test_token" } )
143+ else
144+ assert conn . method == "POST"
145+ assert conn . host == "pubsub.googleapis.com"
146+ assert String . contains? ( conn . request_path , "/my_topic:publish" )
141147
142- Req.Test . json ( conn , % { } )
148+ Req.Test . json ( conn , % { } )
149+ end
143150 end )
144151
145152 start_pipeline! ( consumer )
0 commit comments