@@ -185,48 +185,103 @@ func TestRequestQueueSummaryStore_Update(t *testing.T) {
185185 summary := entity.RequestQueueSummary {
186186 RequestID : "monorepo/1" ,
187187 Queue : "monorepo" ,
188+ ChangeURIs : []string {"github://github.example.com/uber/submitqueue/pull/456/cafebabe" },
188189 ReceivedAtMs : 1000 ,
189190 Status : entity .RequestStatusValidated ,
190- LastError : "" ,
191+ LastError : "validation detail" ,
192+ Metadata : map [string ]string {"result" : "validated" },
191193 }
192194 const oldVersion , newVersion = int32 (1 ), int32 (2 )
193195
194196 tests := []struct {
195197 name string
198+ summary entity.RequestQueueSummary
196199 setup func (mock sqlmock.Sqlmock )
197200 wantErr bool
198201 wantErrIs error
199202 }{
200203 {
201- name : "success" ,
204+ name : "success replaces all non-key fields" ,
205+ summary : summary ,
206+ setup : func (mock sqlmock.Sqlmock ) {
207+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ?" ).
208+ WithArgs ([]byte (`["github://github.example.com/uber/submitqueue/pull/456/cafebabe"]` ),
209+ summary .Status , newVersion , summary .LastError , []byte (`{"result":"validated"}` ),
210+ summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
211+ WillReturnResult (sqlmock .NewResult (0 , 1 ))
212+ },
213+ },
214+ {
215+ name : "success normalizes nil collections" ,
216+ summary : entity.RequestQueueSummary {
217+ RequestID : summary .RequestID ,
218+ Queue : summary .Queue ,
219+ ReceivedAtMs : summary .ReceivedAtMs ,
220+ Status : summary .Status ,
221+ LastError : summary .LastError ,
222+ },
223+ setup : func (mock sqlmock.Sqlmock ) {
224+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ?" ).
225+ WithArgs ([]byte (`[]` ), summary .Status , newVersion , summary .LastError , []byte (`{}` ),
226+ summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
227+ WillReturnResult (sqlmock .NewResult (0 , 1 ))
228+ },
229+ },
230+ {
231+ name : "success persists empty collections" ,
232+ summary : entity.RequestQueueSummary {
233+ RequestID : summary .RequestID ,
234+ Queue : summary .Queue ,
235+ ChangeURIs : []string {},
236+ ReceivedAtMs : summary .ReceivedAtMs ,
237+ Status : summary .Status ,
238+ LastError : summary .LastError ,
239+ Metadata : map [string ]string {},
240+ },
202241 setup : func (mock sqlmock.Sqlmock ) {
203- mock .ExpectExec ("UPDATE request_summary_by_queue " ).
204- WithArgs (summary .Status , newVersion , summary .LastError , sqlmock . AnyArg ( ),
242+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ? " ).
243+ WithArgs ([] byte ( `[]` ), summary .Status , newVersion , summary .LastError , [] byte ( `{}` ),
205244 summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
206245 WillReturnResult (sqlmock .NewResult (0 , 1 ))
207246 },
208247 },
209248 {
210- name : "version mismatch" ,
249+ name : "version mismatch" ,
250+ summary : summary ,
211251 setup : func (mock sqlmock.Sqlmock ) {
212- mock .ExpectExec ("UPDATE request_summary_by_queue" ).
213- WithArgs (summary .Status , newVersion , summary .LastError , sqlmock .AnyArg (),
252+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ?" ).
253+ WithArgs ([]byte (`["github://github.example.com/uber/submitqueue/pull/456/cafebabe"]` ),
254+ summary .Status , newVersion , summary .LastError , []byte (`{"result":"validated"}` ),
214255 summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
215256 WillReturnResult (sqlmock .NewResult (0 , 0 ))
216257 },
217258 wantErr : true ,
218259 wantErrIs : storage .ErrVersionMismatch ,
219260 },
220261 {
221- name : "exec error" ,
262+ name : "exec error" ,
263+ summary : summary ,
222264 setup : func (mock sqlmock.Sqlmock ) {
223- mock .ExpectExec ("UPDATE request_summary_by_queue" ).
224- WithArgs (summary .Status , newVersion , summary .LastError , sqlmock .AnyArg (),
265+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ?" ).
266+ WithArgs ([]byte (`["github://github.example.com/uber/submitqueue/pull/456/cafebabe"]` ),
267+ summary .Status , newVersion , summary .LastError , []byte (`{"result":"validated"}` ),
225268 summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
226269 WillReturnError (fmt .Errorf ("connection reset" ))
227270 },
228271 wantErr : true ,
229272 },
273+ {
274+ name : "rows affected error" ,
275+ summary : summary ,
276+ setup : func (mock sqlmock.Sqlmock ) {
277+ mock .ExpectExec ("SET change_uris = \\ ?, status = \\ ?, version = \\ ?, last_error = \\ ?, metadata = \\ ?" ).
278+ WithArgs ([]byte (`["github://github.example.com/uber/submitqueue/pull/456/cafebabe"]` ),
279+ summary .Status , newVersion , summary .LastError , []byte (`{"result":"validated"}` ),
280+ summary .Queue , summary .ReceivedAtMs , summary .RequestID , oldVersion ).
281+ WillReturnResult (sqlmock .NewErrorResult (fmt .Errorf ("driver error" )))
282+ },
283+ wantErr : true ,
284+ },
230285 }
231286
232287 for _ , tt := range tests {
@@ -236,7 +291,7 @@ func TestRequestQueueSummaryStore_Update(t *testing.T) {
236291
237292 tt .setup (mock )
238293
239- err := store .Update (context .Background (), summary , oldVersion , newVersion )
294+ err := store .Update (context .Background (), tt . summary , oldVersion , newVersion )
240295 if tt .wantErr {
241296 require .Error (t , err )
242297 if tt .wantErrIs != nil {
0 commit comments