package queryapitest import ( "context" "fmt" "log/slog" "testing" "time" queryapi "queryorchestration/pkg/queryAPI" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func CreateClientWithSync(t testing.TB, ctx context.Context, client queryapi.ClientWithResponsesInterface) *queryapi.DocClient { t.Helper() clientCreateRes, err := client.CreateClientWithResponse(ctx, queryapi.ClientCreate{ Name: "example_name", Id: "ID", }) require.NoError(t, err) canSync := true _, err = client.UpdateClientWithResponse(ctx, clientCreateRes.JSON201.Id, queryapi.ClientUpdate{ CanSync: &canSync, }) require.NoError(t, err) clientRes, err := client.GetClientWithResponse(ctx, clientCreateRes.JSON201.Id) require.NoError(t, err) return clientRes.JSON200 } func WaitForClientStatus(t testing.TB, ctx context.Context, service queryapi.ClientWithResponsesInterface, id string, status queryapi.ClientStatus) { t.Helper() timeout := time.After(60 * time.Second) ticker := time.NewTicker(500 * time.Millisecond) defer ticker.Stop() for { select { case <-timeout: require.NoError(t, fmt.Errorf("Timeout waiting for client status to become %s", status)) case <-ticker.C: jRes, err := service.GetStatusByClientIdWithResponse(ctx, id) if err != nil { slog.Error("error getting status", "error", err.Error()) require.NoError(t, err) } if jRes.JSON200.Status == status { assert.Equal(t, status, jRes.JSON200.Status) return } slog.Error("unexpected status", "status", jRes.JSON200.Status) } } }