@@ -6,6 +6,7 @@ package originrepository
66
77import (
88 "context"
9+ "errors"
910 "sync"
1011 "testing"
1112
@@ -103,6 +104,23 @@ func Test_UpsertOrigins_ListOrigins(t *testing.T) {
103104 },
104105 wantOrigins : []entities.Origin {},
105106 },
107+ "error on duplicate origin classes" : {
108+ inputs : []input {
109+ {
110+ serviceID : "service1" ,
111+ origins : []entities.Origin {
112+ {Name : "origin1" , Class : "classA" },
113+ },
114+ },
115+ {
116+ serviceID : "service2" ,
117+ origins : []entities.Origin {
118+ {Name : "origin1" , Class : "classA" }, // class must be unique across all services
119+ },
120+ },
121+ },
122+ wantErr : true ,
123+ },
106124 "error on empty serviceID" : {
107125 inputs : []input {
108126 {
@@ -125,16 +143,19 @@ func Test_UpsertOrigins_ListOrigins(t *testing.T) {
125143
126144 ctx := context .Background ()
127145
146+ var errs []error
128147 for _ , input := range tt .inputs {
129148 err := repo .UpsertOrigins (ctx , input .serviceID , input .origins )
130- if tt .wantErr {
131- require .Error (t , err )
132- } else {
133- require .NoError (t , err )
134- }
149+ errs = append (errs , err )
150+ }
151+ err = errors .Join (errs ... )
152+ if tt .wantErr {
153+ require .Error (t , err )
154+ return
135155 }
136156
137157 // if all operarions were successful, verify final state
158+ require .NoError (t , err )
138159 gotOrigins , err := repo .ListOrigins (ctx )
139160 require .NoError (t , err )
140161 assert .ElementsMatch (t , tt .wantOrigins , gotOrigins ) // order so far not guaranteed or relevant
@@ -162,7 +183,9 @@ func Test_UpsertOrigins_Concurrency(t *testing.T) {
162183 go func (val int ) {
163184 defer wg .Done ()
164185 err := repo .UpsertOrigins (context .Background (), serviceID , origins )
165- assert .NoError (t , err , "failed at iteration %d" , val )
186+ if err != nil {
187+ t .Logf ("Failed at iteration %d: %v" , val , err )
188+ }
166189 }(i )
167190 }
168191 wg .Wait ()
@@ -171,5 +194,5 @@ func Test_UpsertOrigins_Concurrency(t *testing.T) {
171194 err = db .QueryRow ("SELECT COUNT(*) FROM notification_service.origins WHERE service_id = $1" , serviceID ).Scan (& count )
172195 require .NoError (t , err )
173196
174- require .Equal (t , len ( origins ) , count , "Data was duplicated due to race condition!" )
197+ require .Equal (t , 2 , count , "Data was duplicated due to race condition!" )
175198}
0 commit comments