@@ -230,6 +230,44 @@ func TestDocumentClient_Create(t *testing.T) {
230230 assert .ErrorContains (t , err , "some internal error" )
231231 })
232232
233+ t .Run ("patch call returns 404 - retry succeeds" , func (t * testing.T ) {
234+ ctx := testutils .ContextWithLogger (t )
235+ mockClient := documents .NewMockclient (gomock .NewController (t ))
236+ mockClient .EXPECT ().Create (ctx , givenDoc ).
237+ Return (& http.Response {Status : http .StatusText (http .StatusCreated ), StatusCode : http .StatusCreated , Body : io .NopCloser (strings .NewReader (respCreate )), Request : & http.Request {Method : http .MethodGet , URL : & url.URL {}}}, nil )
238+ mockClient .EXPECT ().Patch (ctx , "f6e26fdd-1451-4655-b6ab-1240a00c1fba" , 1 , givenDoc ).Times (4 ).
239+ Return (& http.Response {Status : http .StatusText (http .StatusNotFound ), StatusCode : http .StatusNotFound , Body : io .NopCloser (strings .NewReader ("some internal error" )), Request : & http.Request {Method : http .MethodPatch , URL : & url.URL {}}}, nil )
240+ mockClient .EXPECT ().Patch (ctx , "f6e26fdd-1451-4655-b6ab-1240a00c1fba" , 1 , givenDoc ).
241+ Return (& http.Response {Status : http .StatusText (http .StatusOK ), StatusCode : http .StatusOK , Body : io .NopCloser (strings .NewReader (respPatch )), Request : & http.Request {Method : http .MethodPatch , URL : & url.URL {}}}, nil )
242+
243+ docClient := documents .NewTestClient (mockClient )
244+
245+ res , err := docClient .Create (ctx , "name" , false , "extID" , []byte ("this is the content" ), documents .Notebook )
246+
247+ require .NoError (t , err )
248+ assert .JSONEq (t , expected , string (res .Data ))
249+ })
250+
251+ t .Run ("patch call returns 404 - retry fails" , func (t * testing.T ) {
252+ ctx := testutils .ContextWithLogger (t )
253+ mockClient := documents .NewMockclient (gomock .NewController (t ))
254+ mockClient .EXPECT ().Create (ctx , givenDoc ).
255+ Return (& http.Response {Status : http .StatusText (http .StatusCreated ), StatusCode : http .StatusCreated , Body : io .NopCloser (strings .NewReader (respCreate )), Request : & http.Request {Method : http .MethodGet , URL : & url.URL {}}}, nil )
256+ mockClient .EXPECT ().Patch (ctx , "f6e26fdd-1451-4655-b6ab-1240a00c1fba" , 1 , givenDoc ).Times (5 ).
257+ Return (& http.Response {Status : http .StatusText (http .StatusNotFound ), StatusCode : http .StatusNotFound , Body : io .NopCloser (strings .NewReader ("some internal error" )), Request : & http.Request {Method : http .MethodPatch , URL : & url.URL {}}}, nil )
258+
259+ docClient := documents .NewTestClient (mockClient )
260+
261+ res , err := docClient .Create (ctx , "name" , false , "extID" , []byte ("this is the content" ), documents .Notebook )
262+
263+ require .Empty (t , res )
264+ require .Error (t , err )
265+
266+ // var apiErr api.APIError
267+ assert .ErrorAs (t , err , & api.APIError {})
268+ assert .ErrorContains (t , err , "API request HTTP PATCH failed with status code 404" )
269+ })
270+
233271 t .Run ("patch call returns non successful response; rollback fails" , func (t * testing.T ) {
234272 ctx := testutils .ContextWithLogger (t )
235273 mockClient := documents .NewMockclient (gomock .NewController (t ))
0 commit comments