-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain_test.go
131 lines (115 loc) · 3.36 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package main
// // TODO FIXME
// import (
// "context"
// "encoding/json"
// "log/slog"
// "os"
// "sync"
// "testing"
// "net/http"
// "net/http/httptest"
// "time"
// "github.com/matryer/is"
// "github.com/hotosm/odk-webhook/parser"
// "github.com/hotosm/odk-webhook/db"
// )
// func TestSetupWebhook(t *testing.T) {
// dbUri := os.Getenv("ODK_WEBHOOK_DB_URI")
// if len(dbUri) == 0 {
// // Default
// dbUri = "postgresql://odk:odk@db:5432/odkhook?sslmode=disable"
// }
// is := is.New(t)
// log := slog.New(slog.NewJSONHandler(os.Stdout, nil))
// ctx := context.Background()
// ctx, cancel := context.WithCancel(ctx)
// wg := sync.WaitGroup{}
// dbPool, err := db.InitPool(ctx, log, dbUri)
// is.NoErr(err)
// // Get connection and defer close
// conn, err := dbPool.Acquire(ctx)
// is.NoErr(err)
// defer conn.Release()
// // Create entity_defs table
// _, err = conn.Exec(ctx, `DROP TABLE IF EXISTS entity_defs;`)
// is.NoErr(err)
// entityTableCreateSql := `
// CREATE TABLE entity_defs (
// id int4,
// "entityId" int4,
// "createdAt" timestamptz,
// "current" bool,
// "data" jsonb,
// "creatorId" int4,
// "label" text
// );
// `
// _, err = conn.Exec(ctx, entityTableCreateSql)
// is.NoErr(err)
// // Create audits_test table
// _, err = conn.Exec(ctx, `DROP TABLE IF EXISTS audits_test;`)
// is.NoErr(err)
// auditTableCreateSql := `
// CREATE TABLE audits_test (
// "actorId" int,
// action varchar,
// details jsonb
// );
// `
// _, err = conn.Exec(ctx, auditTableCreateSql)
// is.NoErr(err)
// // Insert an entity record
// entityInsertSql := `
// INSERT INTO public.entity_defs (
// id, "entityId","createdAt","current","data","creatorId","label"
// ) VALUES (
// 1001,
// 900,
// '2025-01-10 16:23:40.073',
// true,
// '{"status": "0", "task_id": "26", "version": "1"}',
// 5,
// 'Task 26 Feature 904487737'
// );
// `
// _, err = conn.Exec(ctx, entityInsertSql)
// is.NoErr(err)
// // Mock webhook server
// webhookReceived := make(chan bool, 1)
// mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// defer r.Body.Close()
// var payload parser.ProcessedEvent
// err := json.NewDecoder(r.Body).Decode(&payload)
// // This is where the actual payload is inspected
// is.NoErr(err)
// is.Equal("xxx", payload.ID) // Check if the ID matches
// is.Equal(`{"status": "0", "task_id": "26", "version": "1"}`, payload.Data) // Check the data
// webhookReceived <- true
// w.WriteHeader(http.StatusOK)
// }))
// defer mockServer.Close()
// // Run Webhook trigger in background
// go func() {
// err := SetupWebhook(log, ctx, dbPool, mockServer.URL, mockServer.URL)
// is.NoErr(err)
// }()
// // Insert an audit record (trigger event)
// auditInsertSql := `
// INSERT INTO audits_test ("actorId", action, details)
// VALUES (1, 'entity.update.version', '{"entityDefId": 1001, "entityId": 1000, "entity": {"uuid": "xxx", "dataset": "test"}}');
// `
// _, err = conn.Exec(ctx, auditInsertSql)
// is.NoErr(err)
// // Wait for the webhook to be received
// select {
// case <-webhookReceived:
// // Success
// case <-time.After(3 * time.Second):
// t.Fatalf("Test timed out waiting for webhook")
// }
// // Cleanup
// conn.Exec(ctx, `DROP TABLE IF EXISTS audits_test;`)
// cancel()
// wg.Wait()
// }