[MM-62153] Avoid SELECT * in preference_store.go (#30081)
* refractored sql queries * GetBuilder to Select Builder as preferences is slice (fix failing test) * test: Add test for GetCategoryAndName preference method * fix s/GetBuilder/SelectBuilder * linting * make mocks * make store-layers --------- Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
a3f22bd349
Коммит
50258a6510
@@ -242,9 +242,9 @@ func (_m *PreferenceStore) GetCategory(userID string, category string) (model.Pr
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetCategoryAndName provides a mock function with given fields: category, nane
|
||||
func (_m *PreferenceStore) GetCategoryAndName(category string, nane string) (model.Preferences, error) {
|
||||
ret := _m.Called(category, nane)
|
||||
// GetCategoryAndName provides a mock function with given fields: category, name
|
||||
func (_m *PreferenceStore) GetCategoryAndName(category string, name string) (model.Preferences, error) {
|
||||
ret := _m.Called(category, name)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for GetCategoryAndName")
|
||||
@@ -253,10 +253,10 @@ func (_m *PreferenceStore) GetCategoryAndName(category string, nane string) (mod
|
||||
var r0 model.Preferences
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(string, string) (model.Preferences, error)); ok {
|
||||
return rf(category, nane)
|
||||
return rf(category, name)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(string, string) model.Preferences); ok {
|
||||
r0 = rf(category, nane)
|
||||
r0 = rf(category, name)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(model.Preferences)
|
||||
@@ -264,7 +264,7 @@ func (_m *PreferenceStore) GetCategoryAndName(category string, nane string) (mod
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(string, string) error); ok {
|
||||
r1 = rf(category, nane)
|
||||
r1 = rf(category, name)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ func TestPreferenceStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlSt
|
||||
t.Run("PreferenceSave", func(t *testing.T) { testPreferenceSave(t, rctx, ss) })
|
||||
t.Run("PreferenceGet", func(t *testing.T) { testPreferenceGet(t, rctx, ss) })
|
||||
t.Run("PreferenceGetCategory", func(t *testing.T) { testPreferenceGetCategory(t, rctx, ss) })
|
||||
t.Run("PreferenceGetCategoryAndName", func(t *testing.T) { testPreferenceGetCategoryAndName(t, rctx, ss) })
|
||||
t.Run("PreferenceGetAll", func(t *testing.T) { testPreferenceGetAll(t, rctx, ss) })
|
||||
t.Run("PreferenceDeleteByUser", func(t *testing.T) { testPreferenceDeleteByUser(t, rctx, ss) })
|
||||
t.Run("PreferenceDelete", func(t *testing.T) { testPreferenceDelete(t, rctx, ss) })
|
||||
@@ -27,7 +28,7 @@ func TestPreferenceStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlSt
|
||||
t.Run("PreferenceDeleteInvalidVisibleDmsGms", func(t *testing.T) { testDeleteInvalidVisibleDmsGms(t, rctx, ss, s) })
|
||||
}
|
||||
|
||||
func testPreferenceSave(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceSave(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
id := model.NewId()
|
||||
|
||||
preferences := model.Preferences{
|
||||
@@ -63,7 +64,7 @@ func testPreferenceSave(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
}
|
||||
}
|
||||
|
||||
func testPreferenceGet(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceGet(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
category := model.PreferenceCategoryDirectChannelShow
|
||||
name := model.NewId()
|
||||
@@ -103,7 +104,71 @@ func testPreferenceGet(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
require.Error(t, err, "no error on getting a missing preference")
|
||||
}
|
||||
|
||||
func testPreferenceGetCategory(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceGetCategoryAndName(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
category := model.PreferenceCategoryGroupChannelShow
|
||||
name := model.NewId()
|
||||
|
||||
preferences := model.Preferences{
|
||||
{
|
||||
UserId: userId,
|
||||
Category: category,
|
||||
Name: name,
|
||||
Value: "user1",
|
||||
},
|
||||
// same category/name, different user
|
||||
{
|
||||
UserId: model.NewId(),
|
||||
Category: category,
|
||||
Name: name,
|
||||
Value: "otherUser",
|
||||
},
|
||||
// same user/name, different category
|
||||
{
|
||||
UserId: userId,
|
||||
Category: model.NewId(),
|
||||
Name: name,
|
||||
Value: "",
|
||||
},
|
||||
// same user/category, different name
|
||||
{
|
||||
UserId: userId,
|
||||
Category: category,
|
||||
Name: model.NewId(),
|
||||
Value: "",
|
||||
},
|
||||
}
|
||||
|
||||
err := ss.Preference().Save(preferences)
|
||||
require.NoError(t, err)
|
||||
|
||||
actualPreferences, err := ss.Preference().GetCategoryAndName(category, name)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, len(actualPreferences), "got the wrong number of preferences")
|
||||
|
||||
for _, preference := range preferences {
|
||||
// Preferences with empty values aren't expected.
|
||||
if preference.Value == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
found := false
|
||||
for _, actualPreference := range actualPreferences {
|
||||
if actualPreference == preference {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
|
||||
assert.True(t, found, "didnt find preference with value %s", preference.Value)
|
||||
}
|
||||
|
||||
// make sure getting a missing preference category and name doesn't fail
|
||||
actualPreferences, err = ss.Preference().GetCategoryAndName(model.NewId(), model.NewId())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, len(actualPreferences), "shouldn't have got any preferences")
|
||||
}
|
||||
|
||||
func testPreferenceGetCategory(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
category := model.PreferenceCategoryDirectChannelShow
|
||||
name := model.NewId()
|
||||
@@ -152,7 +217,7 @@ func testPreferenceGetCategory(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
require.Equal(t, 0, len(preferencesByCategory), "shouldn't have got any preferences")
|
||||
}
|
||||
|
||||
func testPreferenceGetAll(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceGetAll(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
category := model.PreferenceCategoryDirectChannelShow
|
||||
name := model.NewId()
|
||||
@@ -195,7 +260,7 @@ func testPreferenceGetAll(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
}
|
||||
}
|
||||
|
||||
func testPreferenceDeleteByUser(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceDeleteByUser(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
category := model.PreferenceCategoryDirectChannelShow
|
||||
name := model.NewId()
|
||||
@@ -233,7 +298,7 @@ func testPreferenceDeleteByUser(t *testing.T, rctx request.CTX, ss store.Store)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func testPreferenceDelete(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceDelete(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
preference := model.Preference{
|
||||
UserId: model.NewId(),
|
||||
Category: model.PreferenceCategoryDirectChannelShow,
|
||||
@@ -255,7 +320,7 @@ func testPreferenceDelete(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
assert.Empty(t, preferences, "should've returned no preferences")
|
||||
}
|
||||
|
||||
func testPreferenceDeleteCategory(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceDeleteCategory(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
category := model.NewId()
|
||||
userId := model.NewId()
|
||||
|
||||
@@ -288,7 +353,7 @@ func testPreferenceDeleteCategory(t *testing.T, rctx request.CTX, ss store.Store
|
||||
assert.Empty(t, preferences, "should've returned no preferences")
|
||||
}
|
||||
|
||||
func testPreferenceDeleteCategoryAndName(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
func testPreferenceDeleteCategoryAndName(t *testing.T, _ request.CTX, ss store.Store) {
|
||||
category := model.NewId()
|
||||
name := model.NewId()
|
||||
userId := model.NewId()
|
||||
@@ -404,7 +469,7 @@ func testPreferenceDeleteOrphanedRows(t *testing.T, rctx request.CTX, ss store.S
|
||||
assert.NoError(t, nErr, "newer preference should not have been deleted")
|
||||
}
|
||||
|
||||
func testDeleteInvalidVisibleDmsGms(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore) {
|
||||
func testDeleteInvalidVisibleDmsGms(t *testing.T, _ request.CTX, ss store.Store, s SqlStore) {
|
||||
userId1 := model.NewId()
|
||||
userId2 := model.NewId()
|
||||
userId3 := model.NewId()
|
||||
|
||||
Ссылка в новой задаче
Block a user