3
0

fix(crm): overwriting of module form fields

This commit is contained in:
Mitja Zivkovic
2018-12-02 17:18:30 +01:00
committed by Denis Arh
parent 1387f56f35
commit 35a86793f6
5 changed files with 44 additions and 7 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
ALTER TABLE `crm_module_form` DROP PRIMARY KEY, ADD PRIMARY KEY(`module_id`, `place`);

View File

@@ -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")
}

View File

@@ -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)
}

View File

@@ -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)
}
}
}