Search Apps Documentation Source Content File Folder Download Copy Actions Download

flag_storage_test.gno

4.81 Kb · 235 lines
  1package boards_test
  2
  3import (
  4	"testing"
  5
  6	"gno.land/p/nt/urequire/v0"
  7
  8	"gno.land/p/gnoland/boards"
  9)
 10
 11func TestFlagStorageExists(t *testing.T) {
 12	tests := []struct {
 13		name   string
 14		setup  func() boards.FlagStorage
 15		user   address
 16		exists bool
 17	}{
 18		{
 19			name: "found",
 20			setup: func() boards.FlagStorage {
 21				s := boards.NewFlagStorage()
 22				s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
 23				return s
 24			},
 25			user:   "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
 26			exists: true,
 27		},
 28		{
 29			name: "not found",
 30			setup: func() boards.FlagStorage {
 31				return boards.NewFlagStorage()
 32			},
 33			user:   "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
 34			exists: false,
 35		},
 36	}
 37
 38	for _, tt := range tests {
 39		t.Run(tt.name, func(t *testing.T) {
 40			s := tt.setup()
 41
 42			urequire.Equal(t, tt.exists, s.Exists(tt.user))
 43		})
 44	}
 45}
 46
 47func TestFlagStorageAdd(t *testing.T) {
 48	tests := []struct {
 49		name   string
 50		setup  func() boards.FlagStorage
 51		flag   boards.Flag
 52		errMsg string
 53	}{
 54		{
 55			name: "ok",
 56			setup: func() boards.FlagStorage {
 57				return boards.NewFlagStorage()
 58			},
 59			flag: boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
 60		},
 61		{
 62			name: "flag exists",
 63			setup: func() boards.FlagStorage {
 64				s := boards.NewFlagStorage()
 65				s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
 66				return s
 67			},
 68			flag:   boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
 69			errMsg: "flag from user already exists: g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
 70		},
 71		{
 72			name: "invalid user address",
 73			setup: func() boards.FlagStorage {
 74				return boards.NewFlagStorage()
 75			},
 76			flag:   boards.Flag{User: "foo"},
 77			errMsg: "post flagging error, invalid user address: foo",
 78		},
 79	}
 80
 81	for _, tt := range tests {
 82		t.Run(tt.name, func(t *testing.T) {
 83			s := tt.setup()
 84
 85			err := s.Add(tt.flag)
 86
 87			if tt.errMsg != "" {
 88				urequire.Error(t, err, "expect an error")
 89				urequire.ErrorContains(t, err, tt.errMsg, "expect error to match")
 90				return
 91			}
 92
 93			urequire.NoError(t, err, "expect no error")
 94			urequire.True(t, s.Exists(tt.flag.User), "expect flag to be added")
 95		})
 96	}
 97}
 98
 99func TestFlagStorageRemove(t *testing.T) {
100	tests := []struct {
101		name    string
102		setup   func() boards.FlagStorage
103		address address
104		removed bool
105	}{
106		{
107			name: "ok",
108			setup: func() boards.FlagStorage {
109				s := boards.NewFlagStorage()
110				s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
111				return s
112			},
113			address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
114			removed: true,
115		},
116		{
117			name: "not found",
118			setup: func() boards.FlagStorage {
119				return boards.NewFlagStorage()
120			},
121			address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
122		},
123	}
124
125	for _, tt := range tests {
126		t.Run(tt.name, func(t *testing.T) {
127			s := tt.setup()
128
129			urequire.Equal(t, tt.removed, s.Remove(tt.address))
130		})
131	}
132}
133
134func TestFlagStorageSize(t *testing.T) {
135	tests := []struct {
136		name  string
137		setup func() boards.FlagStorage
138		size  int
139	}{
140		{
141			name: "empty",
142			setup: func() boards.FlagStorage {
143				return boards.NewFlagStorage()
144			},
145			size: 0,
146		},
147		{
148			name: "one flag",
149			setup: func() boards.FlagStorage {
150				s := boards.NewFlagStorage()
151				s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
152				return s
153			},
154			size: 1,
155		},
156		{
157			name: "multiple flags",
158			setup: func() boards.FlagStorage {
159				s := boards.NewFlagStorage()
160				s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
161				s.Add(boards.Flag{User: "g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq"})
162				return s
163			},
164			size: 2,
165		},
166	}
167
168	for _, tt := range tests {
169		t.Run(tt.name, func(t *testing.T) {
170			s := tt.setup()
171
172			urequire.Equal(t, tt.size, s.Size())
173		})
174	}
175}
176
177func TestFlagStorageIterate(t *testing.T) {
178	flags := []boards.Flag{
179		{
180			User:   "g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq",
181			Reason: "a",
182		},
183		{
184			User:   "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
185			Reason: "b",
186		},
187	}
188	tests := []struct {
189		name    string
190		setup   func() boards.FlagStorage
191		reverse bool
192		flags   []boards.Flag
193	}{
194		{
195			name: "default",
196			setup: func() boards.FlagStorage {
197				s := boards.NewFlagStorage()
198				s.Add(flags[0])
199				s.Add(flags[1])
200				return s
201			},
202			flags: flags,
203		},
204		{
205			name: "reverse",
206			setup: func() boards.FlagStorage {
207				s := boards.NewFlagStorage()
208				s.Add(flags[0])
209				s.Add(flags[1])
210				return s
211			},
212			reverse: true,
213			flags:   []boards.Flag{flags[1], flags[0]},
214		},
215	}
216
217	for _, tt := range tests {
218		t.Run(tt.name, func(t *testing.T) {
219			s := tt.setup()
220			count := s.Size()
221			if tt.reverse {
222				count = -count
223			}
224
225			var i int
226			s.Iterate(0, count, func(f boards.Flag) bool {
227				urequire.Equal(t, tt.flags[i].User, f.User, "expect user to match")
228				urequire.Equal(t, tt.flags[i].Reason, f.Reason, "expect reason to match")
229
230				i++
231				return false
232			})
233		})
234	}
235}