1 package services
2
3 import (
4 "context"
5 "testing"
6
7 "github.com/DATA-DOG/go-sqlmock"
8 "github.com/stretchr/testify/assert"
9
10 "edge-infra.dev/pkg/edge/api/graph/model"
11 )
12
13
14 func TestGetBannerConfig(t *testing.T) {
15 db, mock, err := sqlmock.New()
16 assert.NoError(t, err)
17 defer db.Close()
18
19 service := NewBannerConfigService(db)
20
21 rows := sqlmock.NewRows([]string{"config_key", "config_value"}).
22 AddRow(VNCReadWriteAuthRequired, "true").
23 AddRow(VNCReadWriteAuthRequiredOverride, "false").
24 AddRow(VNCReadAuthRequired, "true").
25 AddRow(VNCReadAuthRequiredOverride, "false")
26
27 mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
28 WithArgs("test-banner-edge-id").
29 WillReturnRows(rows)
30
31 cfg, err := service.GetBannerConfig(context.Background(), "test-banner-edge-id")
32 assert.NoError(t, err)
33 assert.NotNil(t, cfg)
34 assert.Equal(t, true, cfg.VncReadWriteAuthRequired)
35 assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
36 assert.Equal(t, true, cfg.VncReadAuthRequired)
37 assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
38 assert.NoError(t, mock.ExpectationsWereMet())
39 }
40
41
42 func TestGetBannerConfigDefault(t *testing.T) {
43 db, mock, err := sqlmock.New()
44 assert.NoError(t, err)
45 defer db.Close()
46
47 service := NewBannerConfigService(db)
48
49
50 mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
51 WithArgs("test-banner-edge-id").
52 WillReturnRows(sqlmock.NewRows([]string{"config_key", "config_value"}))
53
54 cfg, err := service.GetBannerConfig(context.Background(), "test-banner-edge-id")
55 assert.NoError(t, err)
56 assert.NotNil(t, cfg)
57 assert.Equal(t, false, cfg.VncReadWriteAuthRequired)
58 assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
59 assert.Equal(t, false, cfg.VncReadAuthRequired)
60 assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
61 assert.NoError(t, mock.ExpectationsWereMet())
62 }
63
64
65 func TestUpdateBannerConfig(t *testing.T) {
66 db, mock, err := sqlmock.New()
67 assert.NoError(t, err)
68 defer db.Close()
69
70 service := NewBannerConfigService(db)
71
72 rows := sqlmock.NewRows([]string{"config_key", "config_value"}).
73 AddRow(VNCReadWriteAuthRequired, "true").
74 AddRow(VNCReadWriteAuthRequiredOverride, "false").
75 AddRow(VNCReadAuthRequired, "true").
76 AddRow(VNCReadAuthRequiredOverride, "false")
77
78 mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
79 WithArgs("test-banner-edge-id").
80 WillReturnRows(rows)
81
82 mock.ExpectBegin()
83
84 mock.MatchExpectationsInOrder(false)
85 mock.ExpectExec("INSERT INTO banner_configs").
86 WithArgs("test-banner-edge-id", VNCReadWriteAuthRequired, "false").
87 WillReturnResult(sqlmock.NewResult(1, 1))
88 mock.ExpectExec("INSERT INTO banner_configs").
89 WithArgs("test-banner-edge-id", VNCReadWriteAuthRequiredOverride, "true").
90 WillReturnResult(sqlmock.NewResult(1, 1))
91 mock.ExpectExec("INSERT INTO banner_configs").
92 WithArgs("test-banner-edge-id", VNCReadAuthRequired, "false").
93 WillReturnResult(sqlmock.NewResult(1, 1))
94 mock.ExpectExec("INSERT INTO banner_configs").
95 WithArgs("test-banner-edge-id", VNCReadAuthRequiredOverride, "true").
96 WillReturnResult(sqlmock.NewResult(1, 1))
97 mock.ExpectCommit()
98
99 updateCfg := &model.UpdateBannerConfig{
100 VncReadWriteAuthRequired: boolPtr(false),
101 VncReadWriteAuthRequiredOverride: boolPtr(true),
102 VncReadAuthRequired: boolPtr(false),
103 VncReadAuthRequiredOverride: boolPtr(true),
104 }
105
106 cfg, err := service.UpdateBannerConfig(context.Background(), "test-banner-edge-id", updateCfg)
107 assert.NoError(t, err)
108 assert.NotNil(t, cfg)
109 assert.Equal(t, false, cfg.VncReadWriteAuthRequired)
110 assert.Equal(t, true, cfg.VncReadWriteAuthRequiredOverride)
111 assert.Equal(t, false, cfg.VncReadAuthRequired)
112 assert.Equal(t, true, cfg.VncReadAuthRequiredOverride)
113 assert.NoError(t, mock.ExpectationsWereMet())
114 }
115
116
117 func TestUpsertBannerConfig(t *testing.T) {
118 db, mock, err := sqlmock.New()
119 assert.NoError(t, err)
120 defer db.Close()
121
122 service := NewBannerConfigService(db)
123
124
125 mock.ExpectQuery("SELECT config_key, config_value FROM banner_configs WHERE banner_edge_id = \\$1").
126 WithArgs("test-banner-edge-id").
127 WillReturnRows(sqlmock.NewRows([]string{"config_key", "config_value"}))
128
129 mock.ExpectBegin()
130
131 mock.MatchExpectationsInOrder(false)
132 mock.ExpectExec("INSERT INTO banner_configs").
133 WithArgs("test-banner-edge-id", VNCReadWriteAuthRequired, "true").
134 WillReturnResult(sqlmock.NewResult(1, 1))
135 mock.ExpectExec("INSERT INTO banner_configs").
136 WithArgs("test-banner-edge-id", VNCReadWriteAuthRequiredOverride, "false").
137 WillReturnResult(sqlmock.NewResult(1, 1))
138 mock.ExpectExec("INSERT INTO banner_configs").
139 WithArgs("test-banner-edge-id", VNCReadAuthRequired, "true").
140 WillReturnResult(sqlmock.NewResult(1, 1))
141 mock.ExpectExec("INSERT INTO banner_configs").
142 WithArgs("test-banner-edge-id", VNCReadAuthRequiredOverride, "false").
143 WillReturnResult(sqlmock.NewResult(1, 1))
144 mock.ExpectCommit()
145
146 upsertCfg := &model.UpdateBannerConfig{
147 VncReadWriteAuthRequired: boolPtr(true),
148 VncReadWriteAuthRequiredOverride: boolPtr(false),
149 VncReadAuthRequired: boolPtr(true),
150 VncReadAuthRequiredOverride: boolPtr(false),
151 }
152
153 cfg, err := service.UpdateBannerConfig(context.Background(), "test-banner-edge-id", upsertCfg)
154 assert.NoError(t, err)
155 assert.NotNil(t, cfg)
156 assert.Equal(t, true, cfg.VncReadWriteAuthRequired)
157 assert.Equal(t, false, cfg.VncReadWriteAuthRequiredOverride)
158 assert.Equal(t, true, cfg.VncReadAuthRequired)
159 assert.Equal(t, false, cfg.VncReadAuthRequiredOverride)
160 assert.NoError(t, mock.ExpectationsWereMet())
161 }
162
163 func boolPtr(b bool) *bool {
164 return &b
165 }
166
View as plain text