1
1
package duty
2
2
3
3
import (
4
- "context"
5
- "encoding/json"
4
+ "database/sql/driver"
5
+ "fmt"
6
+ "time"
6
7
7
8
"github.com/flanksource/duty/fixtures/dummy"
9
+ "github.com/flanksource/duty/models"
8
10
"github.com/flanksource/duty/testutils"
11
+ "github.com/flanksource/duty/types"
12
+ "github.com/google/uuid"
9
13
ginkgo "github.com/onsi/ginkgo/v2"
10
14
. "github.com/onsi/gomega"
11
15
)
@@ -17,58 +21,100 @@ type actor struct {
17
21
Avatar string `json:"avatar"`
18
22
}
19
23
24
+ func (t actor ) Value () (driver.Value , error ) {
25
+ return types .GenericStructValue (t , true )
26
+ }
27
+
28
+ func (t * actor ) Scan (val any ) error {
29
+ return types .GenericStructScan (& t , val )
30
+ }
31
+
32
+ func (t * actor ) FromPerson (p models.Person ) {
33
+ t .Avatar = p .Avatar
34
+ t .Name = p .Name
35
+ t .ID = p .ID .String ()
36
+ }
37
+
38
+ func actorFromPerson (p models.Person ) actor {
39
+ var a actor
40
+ a .FromPerson (p )
41
+ return a
42
+ }
43
+
44
+ type actors []actor
45
+
46
+ func (t actors ) Value () (driver.Value , error ) {
47
+ return types .GenericStructValue (t , true )
48
+ }
49
+
50
+ func (t * actors ) Scan (val any ) error {
51
+ return types .GenericStructScan (& t , val )
52
+ }
53
+
54
+ // IncidentSummary represents the incident_summary view
55
+ type IncidentSummary struct {
56
+ ID uuid.UUID
57
+ IncidentID string
58
+ Title string
59
+ Severity string
60
+ Type models.IncidentType
61
+ Status models.IncidentStatus
62
+ CreatedAt time.Time
63
+ UpdatedAt time.Time
64
+ Responders actors
65
+ Commander actor
66
+ Commenters actors
67
+ }
68
+
20
69
var _ = ginkgo .Describe ("Check incident_summary view" , ginkgo .Ordered , func () {
21
70
ginkgo .It ("Should query incident_summary view" , func () {
22
- row := testutils .TestDBPGPool .QueryRow (context .Background (), "SELECT id, incident_id, title, responders, commenters, commander FROM incident_summary" )
23
- var id , incidentID , title string
24
- var respondersRaw , commentersRaw , commanderRaw json.RawMessage
25
-
26
- err := row .Scan (& id , & incidentID , & title , & respondersRaw , & commentersRaw , & commanderRaw )
71
+ var incidents []IncidentSummary
72
+ err := testutils .TestDB .Raw ("SELECT * FROM incident_summary" ).Scan (& incidents ).Error
27
73
Expect (err ).ToNot (HaveOccurred ())
28
74
29
- Expect (id ).To (Equal (dummy .LogisticsAPIDownIncident .ID .String ()))
30
- Expect (title ).To (Equal (dummy .LogisticsAPIDownIncident .Title ))
75
+ Expect (len (incidents )).To (Equal (len (dummy .AllDummyIncidents )))
31
76
32
- Expect (incidentID ).To (Equal ("INC0000001" ))
77
+ for _ , incidentSummary := range incidents {
78
+ var (
79
+ incident models.Incident
80
+ commander actor
81
+ responders actors
82
+ commenters actors
83
+ )
33
84
34
- var commander actor
35
- err = json .Unmarshal (commanderRaw , & commander )
36
- Expect (err ).ToNot (HaveOccurred ())
37
- Expect (commander .ID ).To (Equal (dummy .JohnDoe .ID .String ()))
38
- Expect (commander .Name ).To (Equal (dummy .JohnDoe .Name ))
85
+ switch incidentSummary .ID {
86
+ case dummy .LogisticsAPIDownIncident .ID :
87
+ incident = dummy .LogisticsAPIDownIncident
88
+ commander .FromPerson (dummy .JohnDoe )
89
+ responders = []actor {actorFromPerson (dummy .JohnDoe ), actorFromPerson (dummy .JohnWick )}
90
+ commenters = []actor {actorFromPerson (dummy .JohnDoe ), actorFromPerson (dummy .JohnWick )}
39
91
40
- var responders []actor
41
- err = json .Unmarshal (respondersRaw , & responders )
42
- Expect (err ).ToNot (HaveOccurred ())
43
- Expect (len (responders )).To (Equal (2 ))
44
- Expect (responders ).To (Equal ([]actor {
45
- {
46
- ID : dummy .JohnDoe .ID .String (),
47
- Name : dummy .JohnDoe .Name ,
48
- Avatar : dummy .JohnDoe .Avatar ,
49
- },
50
- {
51
- ID : dummy .JohnWick .ID .String (),
52
- Name : dummy .JohnWick .Name ,
53
- Avatar : dummy .JohnWick .Avatar ,
54
- },
55
- }))
56
-
57
- var commenters []actor
58
- err = json .Unmarshal (commentersRaw , & commenters )
59
- Expect (err ).ToNot (HaveOccurred ())
60
- Expect (len (commenters )).To (Equal (2 ))
61
- Expect (commenters ).To (Equal ([]actor {
62
- {
63
- ID : dummy .JohnDoe .ID .String (),
64
- Name : dummy .JohnDoe .Name ,
65
- Avatar : dummy .JohnDoe .Avatar ,
66
- },
67
- {
68
- ID : dummy .JohnWick .ID .String (),
69
- Name : dummy .JohnWick .Name ,
70
- Avatar : dummy .JohnWick .Avatar ,
71
- },
72
- }))
92
+ case dummy .UIDownIncident .ID :
93
+ incident = dummy .UIDownIncident
94
+ commander .FromPerson (dummy .JohnWick )
95
+ responders = []actor {
96
+ actorFromPerson (dummy .JohnDoe ),
97
+ actorFromPerson (dummy .JohnWick ),
98
+ {
99
+ ID : dummy .BackendTeam .ID .String (),
100
+ Avatar : dummy .BackendTeam .Icon ,
101
+ Name : dummy .BackendTeam .Name ,
102
+ },
103
+ }
104
+
105
+ default :
106
+ ginkgo .Fail (fmt .Sprintf ("unexpected incident: %s" , incidentSummary .Title ))
107
+ }
108
+
109
+ Expect (incidentSummary .ID ).To (Equal (incident .ID ))
110
+ Expect (incidentSummary .IncidentID ).To (BeElementOf ([]string {"INC0000001" , "INC0000002" }))
111
+ Expect (incidentSummary .Title ).To (Equal (incident .Title ))
112
+ Expect (incidentSummary .Severity ).To (Equal (incident .Severity ))
113
+ Expect (incidentSummary .Type ).To (Equal (incident .Type ))
114
+ Expect (incidentSummary .Status ).To (Equal (incident .Status ))
115
+ Expect (incidentSummary .Commander ).To (Equal (commander ))
116
+ Expect (incidentSummary .Responders ).To (ConsistOf (responders ))
117
+ Expect (incidentSummary .Commenters ).To (ConsistOf (commenters ))
118
+ }
73
119
})
74
120
})
0 commit comments