| Conditions | 7 |
| Total Lines | 82 |
| Code Lines | 58 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | package repository |
||
| 147 | func TestBookingPostgres_GetByRoomId(t *testing.T) { |
||
| 148 | db, mock, err := sqlmock.Newx() |
||
| 149 | if err != nil { |
||
| 150 | t.Fatalf("an error '%s' was not expected when opening a stub database connection", err) |
||
| 151 | } |
||
| 152 | defer db.Close() |
||
| 153 | |||
| 154 | r := NewBookingPostgres(db) |
||
| 155 | |||
| 156 | type args struct { |
||
| 157 | roomId int |
||
| 158 | } |
||
| 159 | type mockBehavior func(args args) |
||
| 160 | |||
| 161 | tests := []struct { |
||
| 162 | name string |
||
| 163 | mock mockBehavior |
||
| 164 | input args |
||
| 165 | want []*model.Booking |
||
| 166 | wantErr bool |
||
| 167 | }{ |
||
| 168 | { |
||
| 169 | name: "Ok", |
||
| 170 | input: args{ |
||
| 171 | roomId: 1, |
||
| 172 | }, |
||
| 173 | mock: func(args args) { |
||
| 174 | dateStart1 := time.Date(2021, time.January, 5, 0, 0, 0, 0, time.UTC) |
||
| 175 | dateEnd1 := time.Date(2021, time.January, 8, 0, 0, 0, 0, time.UTC) |
||
| 176 | |||
| 177 | dateStart2 := time.Date(2021, time.January, 25, 0, 0, 0, 0, time.UTC) |
||
| 178 | dateEnd2 := time.Date(2021, time.January, 28, 0, 0, 0, 0, time.UTC) |
||
| 179 | |||
| 180 | rows := sqlmock.NewRows([]string{"id", "room_id", "date_start", "date_end"}). |
||
| 181 | AddRow(1, 1, dateStart1, dateEnd1). |
||
| 182 | AddRow(2, 1, dateStart2, dateEnd2) |
||
| 183 | |||
| 184 | mock.ExpectQuery(fmt.Sprintf("SELECT (.+) FROM %s WHERE (.+)", bookingsTable)). |
||
| 185 | WithArgs(args.roomId).WillReturnRows(rows) |
||
| 186 | }, |
||
| 187 | want: []*model.Booking{ |
||
| 188 | { |
||
| 189 | Id: 1, |
||
| 190 | RoomId: 1, |
||
| 191 | DateStart: time.Date(2021, time.January, 5, 0, 0, 0, 0, time.UTC), |
||
| 192 | DateEnd: time.Date(2021, time.January, 8, 0, 0, 0, 0, time.UTC), |
||
| 193 | }, |
||
| 194 | { |
||
| 195 | Id: 2, |
||
| 196 | RoomId: 1, |
||
| 197 | DateStart: time.Date(2021, time.January, 25, 0, 0, 0, 0, time.UTC), |
||
| 198 | DateEnd: time.Date(2021, time.January, 28, 0, 0, 0, 0, time.UTC), |
||
| 199 | }, |
||
| 200 | }, |
||
| 201 | wantErr: false, |
||
| 202 | }, |
||
| 203 | { |
||
| 204 | name: "Ok Empty List", |
||
| 205 | input: args{ |
||
| 206 | roomId: 1, |
||
| 207 | }, |
||
| 208 | mock: func(args args) { |
||
| 209 | rows := sqlmock.NewRows([]string{"id", "room_id", "date_start", "date_end"}) |
||
| 210 | |||
| 211 | mock.ExpectQuery(fmt.Sprintf("SELECT (.+) FROM %s WHERE (.+)", bookingsTable)). |
||
| 212 | WithArgs(args.roomId).WillReturnRows(rows) |
||
| 213 | }, |
||
| 214 | want: nil, |
||
| 215 | wantErr: false, |
||
| 216 | }, |
||
| 217 | } |
||
| 218 | |||
| 219 | for _, test := range tests { |
||
| 220 | t.Run(test.name, func(t *testing.T) { |
||
| 221 | test.mock(test.input) |
||
| 222 | |||
| 223 | got, err := r.GetByRoomId(test.input.roomId) |
||
| 224 | if test.wantErr { |
||
| 225 | assert.Error(t, err) |
||
| 226 | } else { |
||
| 227 | assert.NoError(t, err) |
||
| 228 | assert.Equal(t, test.want, got) |
||
| 229 | } |
||
| 306 |