MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / TestHeartbeat_StoreAndIndex

Function TestHeartbeat_StoreAndIndex

tests/integration_test.go:351–405  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

349}
350
351func TestHeartbeat_StoreAndIndex(t *testing.T) {
352 ctx := context.Background()
353 phone := setupPhone(ctx, t, 60)
354
355 // Store a heartbeat via phone API key (retry to allow async phone-API-key association)
356 storePayload := map[string]interface{}{
357 "phone_numbers": []string{phone.PhoneNumber},
358 "charging": true,
359 }
360
361 url := apiBaseURL + "/v1/heartbeats"
362 var respBody []byte
363 var statusCode int
364 deadline := time.Now().Add(15 * time.Second)
365 for time.Now().Before(deadline) {
366 body, err := json.Marshal(storePayload)
367 require.NoError(t, err)
368
369 req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(body))
370 require.NoError(t, err)
371 req.Header.Set("Content-Type", "application/json")
372 req.Header.Set("x-api-key", phone.PhoneAPIKey)
373
374 resp, err := http.DefaultClient.Do(req)
375 require.NoError(t, err)
376
377 respBody, err = io.ReadAll(resp.Body)
378 resp.Body.Close()
379 require.NoError(t, err)
380
381 statusCode = resp.StatusCode
382 if statusCode == http.StatusCreated {
383 break
384 }
385 time.Sleep(500 * time.Millisecond)
386 }
387 require.Equal(t, http.StatusCreated, statusCode, "store heartbeat failed: %s", string(respBody))
388
389 // Read heartbeats back via user API key
390 client := newAPIClient()
391 heartbeats, indexResp, err := client.Heartbeats.Index(ctx, &httpsms.HeartbeatIndexParams{
392 Owner: phone.PhoneNumber,
393 Limit: 1,
394 })
395 require.NoError(t, err)
396 require.Equal(t, http.StatusOK, indexResp.HTTPResponse.StatusCode)
397
398 require.NotNil(t, heartbeats)
399 require.GreaterOrEqual(t, len(heartbeats.Data), 1, "expected at least 1 heartbeat")
400
401 hb := heartbeats.Data[0]
402 assert.Equal(t, phone.PhoneNumber, hb.Owner)
403 assert.True(t, hb.Charging)
404 assert.False(t, hb.Timestamp.IsZero(), "timestamp should not be zero")
405}
406
407func TestBulkSMS_CSV(t *testing.T) {
408 ctx := context.Background()

Callers

nothing calls this directly

Calls 4

setupPhoneFunction · 0.85
newAPIClientFunction · 0.85
SetMethod · 0.65
IndexMethod · 0.65

Tested by

no test coverage detected