github.com/nais/knorten@v0.0.0-20240104110906-55926958e361/pkg/database/events_test.go (about) 1 package database 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/nais/knorten/pkg/database/gensql" 8 ) 9 10 func TestRepo_DispatchableEventsGet(t *testing.T) { 11 ctx := context.Background() 12 team := gensql.Team{ 13 ID: "team-a-1234", 14 Slug: "team-a", 15 Users: []string{"dummy@nav.no"}, 16 } 17 if err := repo.TeamCreate(ctx, team); err != nil { 18 t.Fatal(err) 19 } 20 if err := cleanupEvents(); err != nil { 21 t.Fatal(err) 22 } 23 t.Cleanup(func() { 24 if err := repo.TeamDelete(ctx, team.ID); err != nil { 25 t.Fatal(err) 26 } 27 }) 28 29 type args struct { 30 events []gensql.Event 31 } 32 tests := []struct { 33 name string 34 args args 35 want []gensql.Event 36 }{ 37 { 38 name: "Dispatchable events verify priority", 39 args: args{ 40 events: []gensql.Event{ 41 { 42 Type: string(EventTypeUpdateTeam), 43 Payload: []byte("{}"), 44 Status: string(EventStatusPending), 45 Owner: team.ID, 46 }, 47 { 48 Type: string(EventTypeDeleteTeam), 49 Payload: []byte("{}"), 50 Status: string(EventStatusNew), 51 Owner: team.ID, 52 }, 53 { 54 Type: string(EventTypeCreateTeam), 55 Payload: []byte("{}"), 56 Status: string(EventStatusNew), 57 Owner: team.ID, 58 }, 59 }, 60 }, 61 want: []gensql.Event{ 62 { 63 Type: string(EventTypeUpdateTeam), 64 Payload: []byte("{}"), 65 Status: string(EventStatusPending), 66 Owner: team.ID, 67 }, 68 }, 69 }, 70 { 71 name: "Dispatchable events verify new not dispatchable when processing same type", 72 args: args{ 73 events: []gensql.Event{ 74 { 75 Type: string(EventTypeDeleteJupyter), 76 Payload: []byte("{}"), 77 Status: string(EventStatusNew), 78 Owner: team.ID, 79 }, 80 { 81 Type: string(EventTypeUpdateJupyter), 82 Payload: []byte("{}"), 83 Status: string(EventStatusProcessing), 84 Owner: team.ID, 85 }, 86 }, 87 }, 88 want: []gensql.Event{}, 89 }, 90 } 91 for _, tt := range tests { 92 t.Run(tt.name, func(t *testing.T) { 93 if err := prepareEventsTest(tt.args.events); err != nil { 94 t.Error(err) 95 } 96 t.Cleanup(func() { 97 if err := cleanupEvents(); err != nil { 98 t.Error(err) 99 } 100 }) 101 102 events, err := repo.DispatchableEventsGet(ctx) 103 if err != nil { 104 t.Error(err) 105 } 106 107 if len(events) != len(tt.want) { 108 t.Errorf("dispatchable events: expected %v events, got %v", len(tt.want), len(events)) 109 } 110 111 for i, event := range events { 112 if event.Type != tt.want[i].Type { 113 t.Errorf("dispatchable events: expected type %v, got %v", tt.want[i].Type, event.Type) 114 } 115 if event.Owner != tt.want[i].Owner { 116 t.Errorf("dispatchable events: expected owner %v, got %v", tt.want[i].Owner, event.Owner) 117 } 118 if event.Status != tt.want[i].Status { 119 t.Errorf("dispatchable events: expected status %v, got %v", tt.want[i].Status, event.Status) 120 } 121 } 122 }) 123 } 124 } 125 126 func prepareEventsTest(events []gensql.Event) error { 127 for _, event := range events { 128 _, err := repo.db.Exec("INSERT INTO events (owner,type,payload,deadline,status) VALUES ($1,$2,$3,$4,$5);", 129 event.Owner, EventType(event.Type), event.Payload, "00:05:00", event.Status) 130 if err != nil { 131 return err 132 } 133 } 134 135 return nil 136 } 137 138 func cleanupEvents() error { 139 _, err := repo.db.Exec("DELETE FROM events") 140 if err != nil { 141 return err 142 } 143 144 return nil 145 }