fix(crm): overwriting of module form fields
This commit is contained in:
committed by
Denis Arh
parent
1387f56f35
commit
35a86793f6
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
ALTER TABLE `crm_module_form` DROP PRIMARY KEY, ADD PRIMARY KEY(`module_id`, `place`);
|
||||
@@ -67,8 +67,9 @@ func (r *module) Create(mod *types.Module) (*types.Module, error) {
|
||||
return nil, errors.Wrap(err, "No fields")
|
||||
}
|
||||
|
||||
for _, v := range fields {
|
||||
for idx, v := range fields {
|
||||
v.ModuleID = mod.ID
|
||||
v.Place = idx
|
||||
if err := r.db().Replace("crm_module_form", v); err != nil {
|
||||
return nil, errors.Wrap(err, "Error adding module fields")
|
||||
}
|
||||
@@ -78,7 +79,7 @@ func (r *module) Create(mod *types.Module) (*types.Module, error) {
|
||||
|
||||
func (r *module) Update(mod *types.Module) (*types.Module, error) {
|
||||
if mod.ID == 0 {
|
||||
return nil, errors.New("Error when savig module, invalid ID")
|
||||
return nil, errors.New("Error when saving module, invalid ID")
|
||||
}
|
||||
now := time.Now()
|
||||
mod.UpdatedAt = &now
|
||||
@@ -88,8 +89,9 @@ func (r *module) Update(mod *types.Module) (*types.Module, error) {
|
||||
return nil, errors.Wrap(err, "No fields")
|
||||
}
|
||||
|
||||
for _, v := range fields {
|
||||
for idx, v := range fields {
|
||||
v.ModuleID = mod.ID
|
||||
v.Place = idx
|
||||
if err := r.db().Replace("crm_module_form", v); err != nil {
|
||||
return nil, errors.Wrap(err, "Error adding module fields")
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ type (
|
||||
Create(module *types.Module) (*types.Module, error)
|
||||
Update(module *types.Module) (*types.Module, error)
|
||||
DeleteByID(moduleID uint64) error
|
||||
|
||||
FieldNames(mod *types.Module) ([]string, error)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -77,3 +79,7 @@ func (s *module) Update(mod *types.Module) (*types.Module, error) {
|
||||
func (s *module) DeleteByID(id uint64) error {
|
||||
return s.moduleRepo.DeleteByID(id)
|
||||
}
|
||||
|
||||
func (s *module) FieldNames(mod *types.Module) ([]string, error) {
|
||||
return s.moduleRepo.FieldNames(mod)
|
||||
}
|
||||
|
||||
@@ -2,18 +2,40 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
)
|
||||
|
||||
func TestModule(t *testing.T) {
|
||||
repository := Module().With(context.Background())
|
||||
|
||||
fields, err := json.Marshal([]types.Field{
|
||||
types.Field{
|
||||
Name: "name",
|
||||
Type: "input",
|
||||
},
|
||||
types.Field{
|
||||
Name: "email",
|
||||
Type: "email",
|
||||
},
|
||||
types.Field{
|
||||
Name: "options",
|
||||
Type: "select_multi",
|
||||
},
|
||||
types.Field{
|
||||
Name: "description",
|
||||
Type: "text",
|
||||
},
|
||||
})
|
||||
assert(t, err == nil, "Error when encoding JSON fields: %+v", err)
|
||||
|
||||
// the module object we're working with
|
||||
module := &types.Module{
|
||||
Name: "Test",
|
||||
}
|
||||
(&module.Fields).Scan([]byte("[]"))
|
||||
(&module.Fields).Scan(fields)
|
||||
|
||||
prevModuleCount := 0
|
||||
|
||||
@@ -44,6 +66,13 @@ func TestModule(t *testing.T) {
|
||||
assert(t, err == nil, "Error when updating module, %+v", err)
|
||||
}
|
||||
|
||||
// fetch module fields
|
||||
{
|
||||
fl, err := repository.FieldNames(m)
|
||||
assert(t, err == nil, "Error when retrieving module fields by module: %+v", err)
|
||||
assert(t, len(fl) == 4, "Expected 4 fields, got %d", len(fl))
|
||||
}
|
||||
|
||||
// re-fetch module
|
||||
{
|
||||
ms, err := repository.FindByID(m.ID)
|
||||
@@ -73,5 +102,4 @@ func TestModule(t *testing.T) {
|
||||
assert(t, len(ms) < prevModuleCount, "Expected modules count to decrease after deletion, %d < %d", len(ms), prevModuleCount)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user