Skip to content

Commit 54ac9b7

Browse files
authored
fix: add additional BulkOperations fields, tests, and bump version to 0.1.20 (#41)
1 parent 7216feb commit 54ac9b7

6 files changed

+93
-9
lines changed

knock/bulk_operation.go

+8
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ const (
3838
Failed BulkOperationStatus = "failed"
3939
)
4040

41+
// ErrorItem represents an error that occurred during a bulk operation.
42+
// Error items have a dynamic schema that varies based on the operation type,
43+
type ErrorItem map[string]interface{}
44+
4145
type BulkOperation struct {
4246
ID string `json:"id"`
4347
CompletedAt time.Time `json:"completed_at"`
@@ -49,6 +53,10 @@ type BulkOperation struct {
4953
ProcessedRows int `json:"processed_rows"`
5054
ProgressPath string `json:"progress_path"`
5155
Status BulkOperationStatus `json:"status"`
56+
Name string `json:"name"`
57+
SuccessCount int `json:"success_count"`
58+
ErrorCount int `json:"error_count"`
59+
ErrorItems []ErrorItem `json:"error_items"`
5260
}
5361

5462
// Client structs

knock/bulk_operation_test.go

+49-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func TestBulkOperation_get(t *testing.T) {
1414

1515
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
1616
w.WriteHeader(200)
17-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":42,"failed_at":null,"id":"b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","name":"bulk_op","processed_rows":0,"progress_path":"/v1/bulk_operations/b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","started_at":null,"status":"queued","inserted_at":"2021-03-05T12:00:00Z","updated_at":"2021-03-05T12:00:00Z"}`
17+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":42,"failed_at":null,"id":"b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","name":"bulk_op","processed_rows":0,"progress_path":"/v1/bulk_operations/b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","started_at":null,"status":"queued","inserted_at":"2021-03-05T12:00:00Z","updated_at":"2021-03-05T12:00:00Z","error_count":0,"success_count":0,"error_items":[]}`
1818
_, err := w.Write([]byte(out))
1919
c.Assert(err, qt.IsNil)
2020
}))
@@ -35,6 +35,54 @@ func TestBulkOperation_get(t *testing.T) {
3535
InsertedAt: ParseRFC3339Timestamp("2021-03-05T12:00:00Z"),
3636
UpdatedAt: ParseRFC3339Timestamp("2021-03-05T12:00:00Z"),
3737
EstimatedTotalRows: 42,
38+
Name: "bulk_op",
39+
SuccessCount: 0,
40+
ErrorCount: 0,
41+
ErrorItems: []ErrorItem{},
42+
}
43+
44+
c.Assert(err, qt.IsNil)
45+
c.Assert(have, qt.DeepEquals, want)
46+
}
47+
48+
func TestBulkOperation_get_with_error(t *testing.T) {
49+
c := qt.New(t)
50+
51+
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
52+
w.WriteHeader(200)
53+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":5,"failed_at":null,"id":"b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","name":"bulk_op","processed_rows":3,"progress_path":"/v1/bulk_operations/b4f6f61e-3634-4e80-af0d-9c83e9acc6f3","started_at":null,"status":"completed","inserted_at":"2021-03-05T12:00:00Z","updated_at":"2021-03-05T12:00:00Z","error_count":2,"success_count":1,"error_items":[{"id":"1"},{"id":"2"}]}`
54+
_, err := w.Write([]byte(out))
55+
c.Assert(err, qt.IsNil)
56+
}))
57+
58+
client, err := NewClient(WithBaseURL(ts.URL))
59+
c.Assert(err, qt.IsNil)
60+
61+
ctx := context.Background()
62+
63+
have, err := client.BulkOperations.Get(ctx, &GetBulkOperationRequest{
64+
ID: "b4f6f61e-3634-4e80-af0d-9c83e9acc6f3",
65+
})
66+
67+
want := &BulkOperation{
68+
ID: "b4f6f61e-3634-4e80-af0d-9c83e9acc6f3",
69+
ProgressPath: "/v1/bulk_operations/b4f6f61e-3634-4e80-af0d-9c83e9acc6f3",
70+
Status: BulkOperationStatus(Completed),
71+
InsertedAt: ParseRFC3339Timestamp("2021-03-05T12:00:00Z"),
72+
UpdatedAt: ParseRFC3339Timestamp("2021-03-05T12:00:00Z"),
73+
EstimatedTotalRows: 5,
74+
ProcessedRows: 3,
75+
Name: "bulk_op",
76+
SuccessCount: 1,
77+
ErrorCount: 2,
78+
ErrorItems: []ErrorItem{
79+
map[string]interface{}{
80+
"id": "1",
81+
},
82+
map[string]interface{}{
83+
"id": "2",
84+
},
85+
},
3886
}
3987

4088
c.Assert(err, qt.IsNil)

knock/internal/sdk_version.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package internal
22

33
// SDKVersion is used to populate the sdk's user agent. It should be updated before
44
// releasing new versions of the SDK. Eventually we can automate this process.
5-
const SDKVersion = "0.1.19"
5+
const SDKVersion = "0.1.20"

knock/messages_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ func TestMessages_BulkChangeChannelStatus(t *testing.T) {
498498

499499
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
500500
w.WriteHeader(200)
501-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":1,"failed_at":null,"id":"fbf36d40-b6f8-4675-a362-ede1b859f757","inserted_at":"2022-05-28T00:51:26.343157Z","name":"messages.unread","processed_rows":0,"progress_path":"/v1/bulk_operations/fbf36d40-b6f8-4675-a362-ede1b859f757","started_at":null,"status":"queued","updated_at":"2022-05-28T00:51:26.349222Z"}`
501+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":1,"failed_at":null,"id":"fbf36d40-b6f8-4675-a362-ede1b859f757","inserted_at":"2022-05-28T00:51:26.343157Z","name":"messages.unread","processed_rows":0,"progress_path":"/v1/bulk_operations/fbf36d40-b6f8-4675-a362-ede1b859f757","started_at":null,"status":"queued","updated_at":"2022-05-28T00:51:26.349222Z","success_count":0,"error_count":0,"error_items":[]}`
502502
_, err := w.Write([]byte(out))
503503
c.Assert(err, qt.IsNil)
504504
}))
@@ -524,6 +524,10 @@ func TestMessages_BulkChangeChannelStatus(t *testing.T) {
524524
InsertedAt: ParseRFC3339Timestamp("2022-05-28T00:51:26.343157Z"),
525525
UpdatedAt: ParseRFC3339Timestamp("2022-05-28T00:51:26.349222Z"),
526526
EstimatedTotalRows: 1,
527+
Name: "messages.unread",
528+
SuccessCount: 0,
529+
ErrorCount: 0,
530+
ErrorItems: []ErrorItem{},
527531
}
528532

529533
c.Assert(err, qt.IsNil)

knock/objects_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func TestObjects_BulkSet(t *testing.T) {
5050

5151
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
5252
w.WriteHeader(200)
53-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z"}`
53+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z","error_count":0,"success_count":0,"error_items":[]}`
5454
_, err := w.Write([]byte(out))
5555
c.Assert(err, qt.IsNil)
5656
}))
@@ -85,6 +85,10 @@ func TestObjects_BulkSet(t *testing.T) {
8585
Status: BulkOperationQueued,
8686
InsertedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.281201Z"),
8787
UpdatedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.286507Z"),
88+
Name: "users.identify",
89+
SuccessCount: 0,
90+
ErrorCount: 0,
91+
ErrorItems: []ErrorItem{},
8892
}
8993

9094
c.Assert(err, qt.IsNil)
@@ -196,7 +200,7 @@ func TestObjects_BulkDelete(t *testing.T) {
196200

197201
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
198202
w.WriteHeader(200)
199-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z"}`
203+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.delete","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z","error_count":0,"success_count":0,"error_items":[]}`
200204
_, err := w.Write([]byte(out))
201205
c.Assert(err, qt.IsNil)
202206
}))
@@ -218,6 +222,10 @@ func TestObjects_BulkDelete(t *testing.T) {
218222
Status: BulkOperationQueued,
219223
InsertedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.281201Z"),
220224
UpdatedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.286507Z"),
225+
Name: "users.delete",
226+
SuccessCount: 0,
227+
ErrorCount: 0,
228+
ErrorItems: []ErrorItem{},
221229
}
222230

223231
c.Assert(err, qt.IsNil)
@@ -408,7 +416,7 @@ func TestObjects_BulkAddSubscriptions(t *testing.T) {
408416

409417
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
410418
w.WriteHeader(200)
411-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z"}`
419+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"objects.test-collection.upsert_subscriptions","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z","error_count":0,"success_count":0,"error_items":[]}`
412420
_, err := w.Write([]byte(out))
413421
c.Assert(err, qt.IsNil)
414422
}))
@@ -445,6 +453,10 @@ func TestObjects_BulkAddSubscriptions(t *testing.T) {
445453
Status: BulkOperationQueued,
446454
InsertedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.281201Z"),
447455
UpdatedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.286507Z"),
456+
Name: "objects.test-collection.upsert_subscriptions",
457+
SuccessCount: 0,
458+
ErrorCount: 0,
459+
ErrorItems: []ErrorItem{},
448460
}
449461

450462
c.Assert(err, qt.IsNil)

knock/users_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ func TestUsers_BulkIdentify(t *testing.T) {
232232

233233
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
234234
w.WriteHeader(200)
235-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z"}`
235+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"b19d032a-fc3b-4a54-9f54-369484527201","inserted_at":"2022-05-27T11:12:08.281201Z","name":"users.identify","processed_rows":0,"progress_path":"/v1/bulk_operations/b19d032a-fc3b-4a54-9f54-369484527201","started_at":null,"status":"queued","updated_at":"2022-05-27T11:12:08.286507Z","success_count":0,"error_count":0,"error_items":[]}`
236236
_, err := w.Write([]byte(out))
237237
c.Assert(err, qt.IsNil)
238238
}))
@@ -274,6 +274,10 @@ func TestUsers_BulkIdentify(t *testing.T) {
274274
Status: BulkOperationQueued,
275275
InsertedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.281201Z"),
276276
UpdatedAt: ParseRFC3339Timestamp("2022-05-27T11:12:08.286507Z"),
277+
Name: "users.identify",
278+
SuccessCount: 0,
279+
ErrorCount: 0,
280+
ErrorItems: []ErrorItem{},
277281
}
278282

279283
c.Assert(err, qt.IsNil)
@@ -285,7 +289,7 @@ func TestUsers_BulkDelete(t *testing.T) {
285289

286290
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
287291
w.WriteHeader(200)
288-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"0fb6a596-b579-455e-9a01-32b41fa5613a","inserted_at":"2022-05-27T11:26:50.869070Z","name":"users.delete","processed_rows":0,"progress_path":"/v1/bulk_operations/0fb6a596-b579-455e-9a01-32b41fa5613a","started_at":null,"status":"queued","updated_at":"2022-05-27T11:26:50.879642Z"}`
292+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":2,"failed_at":null,"id":"0fb6a596-b579-455e-9a01-32b41fa5613a","inserted_at":"2022-05-27T11:26:50.869070Z","name":"users.delete","processed_rows":0,"progress_path":"/v1/bulk_operations/0fb6a596-b579-455e-9a01-32b41fa5613a","started_at":null,"status":"queued","updated_at":"2022-05-27T11:26:50.879642Z","success_count":0,"error_count":0,"error_items":[]}`
289293
_, err := w.Write([]byte(out))
290294
c.Assert(err, qt.IsNil)
291295
}))
@@ -307,6 +311,10 @@ func TestUsers_BulkDelete(t *testing.T) {
307311
Status: BulkOperationQueued,
308312
InsertedAt: ParseRFC3339Timestamp("2022-05-27T11:26:50.869070Z"),
309313
UpdatedAt: ParseRFC3339Timestamp("2022-05-27T11:26:50.879642Z"),
314+
Name: "users.delete",
315+
SuccessCount: 0,
316+
ErrorCount: 0,
317+
ErrorItems: []ErrorItem{},
310318
}
311319

312320
c.Assert(err, qt.IsNil)
@@ -629,7 +637,7 @@ func TestUsers_BulkSetPreferences(t *testing.T) {
629637

630638
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
631639
w.WriteHeader(200)
632-
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":3,"failed_at":null,"id":"1dcdaee8-9f22-4308-8d58-e6532f1501bd","inserted_at":"2022-06-08T12:37:34.367249Z","name":"users.set_preferences","processed_rows":0,"progress_path":"/v1/bulk_operations/1dcdaee8-9f22-4308-8d58-e6532f1501bd","started_at":null,"status":"queued","updated_at":"2022-06-08T12:37:34.374113Z"}`
640+
out := `{"__typename":"BulkOperation","completed_at":null,"estimated_total_rows":3,"failed_at":null,"id":"1dcdaee8-9f22-4308-8d58-e6532f1501bd","inserted_at":"2022-06-08T12:37:34.367249Z","name":"users.set_preferences","processed_rows":0,"progress_path":"/v1/bulk_operations/1dcdaee8-9f22-4308-8d58-e6532f1501bd","started_at":null,"status":"queued","updated_at":"2022-06-08T12:37:34.374113Z","success_count":0,"error_count":0,"error_items":[]}`
633641
_, err := w.Write([]byte(out))
634642
c.Assert(err, qt.IsNil)
635643
}))
@@ -666,6 +674,10 @@ func TestUsers_BulkSetPreferences(t *testing.T) {
666674
ProgressPath: "/v1/bulk_operations/1dcdaee8-9f22-4308-8d58-e6532f1501bd",
667675
InsertedAt: ParseRFC3339Timestamp("2022-06-08T12:37:34.367249Z"),
668676
UpdatedAt: ParseRFC3339Timestamp("2022-06-08T12:37:34.374113Z"),
677+
Name: "users.set_preferences",
678+
SuccessCount: 0,
679+
ErrorCount: 0,
680+
ErrorItems: []ErrorItem{},
669681
}
670682

671683
c.Assert(err, qt.IsNil)

0 commit comments

Comments
 (0)