func TestSectionSliceSort(t *testing.T) { want := []int{-10, 1, 10, 11, 20} ss := config.SectionSlice{ &config.Section{ID: "a", SortOrder: 20}, &config.Section{ID: "b", SortOrder: -10}, &config.Section{ID: "c", SortOrder: 10}, &config.Section{ID: "d", SortOrder: 11}, &config.Section{ID: "e", SortOrder: 1}, } for i, f := range *(ss.Sort()) { assert.EqualValues(t, want[i], f.SortOrder) } }
func TestSectionSliceSortAll(t *testing.T) { want := `[{"ID":"b","SortOrder":-10,"Groups":null},{"ID":"e","SortOrder":1,"Groups":null},{"ID":"c","SortOrder":10,"Groups":null},{"ID":"a","SortOrder":20,"Groups":[{"ID":"b","SortOrder":-10,"Fields":[{"ID":"b","SortOrder":-10},{"ID":"e","SortOrder":1},{"ID":"c","SortOrder":10},{"ID":"d","SortOrder":11},{"ID":"a","SortOrder":20}]},{"ID":"e","SortOrder":1,"Fields":null},{"ID":"d","SortOrder":11,"Fields":[{"ID":"b","SortOrder":-10},{"ID":"e","SortOrder":1},{"ID":"c","SortOrder":10},{"ID":"d","SortOrder":11},{"ID":"a","SortOrder":20}]},{"ID":"a","SortOrder":20,"Fields":[{"ID":"b","SortOrder":-10},{"ID":"e","SortOrder":1},{"ID":"c","SortOrder":10},{"ID":"d","SortOrder":11},{"ID":"a","SortOrder":20}]}]}]` + "\n" ss := config.SectionSlice{ &config.Section{ID: "a", SortOrder: 20, Groups: config.GroupSlice{ &config.Group{ID: "a", SortOrder: 20, Fields: config.FieldSlice{&config.Field{ID: "a", SortOrder: 20}, &config.Field{ID: "b", SortOrder: -10}, &config.Field{ID: "c", SortOrder: 10}, &config.Field{ID: "d", SortOrder: 11}, &config.Field{ID: "e", SortOrder: 1}}}, &config.Group{ID: "b", SortOrder: -10, Fields: config.FieldSlice{&config.Field{ID: "a", SortOrder: 20}, &config.Field{ID: "b", SortOrder: -10}, &config.Field{ID: "c", SortOrder: 10}, &config.Field{ID: "d", SortOrder: 11}, &config.Field{ID: "e", SortOrder: 1}}}, &config.Group{ID: "d", SortOrder: 11, Fields: config.FieldSlice{&config.Field{ID: "a", SortOrder: 20}, &config.Field{ID: "b", SortOrder: -10}, &config.Field{ID: "c", SortOrder: 10}, &config.Field{ID: "d", SortOrder: 11}, &config.Field{ID: "e", SortOrder: 1}}}, &config.Group{ID: "e", SortOrder: 1}, }}, &config.Section{ID: "b", SortOrder: -10}, &config.Section{ID: "c", SortOrder: 10}, &config.Section{ID: "e", SortOrder: 1}, } ss.SortAll() have := ss.ToJSON() if want != have { t.Errorf("\nWant: %s\nHave: %s\n", want, have) } }
func TestSectionSliceMerge(t *testing.T) { // Got stuck in comparing JSON? // Use a Webservice to compare the JSON output! tests := []struct { have []config.SectionSlice wantErr string want string wantLen int }{ 0: { have: []config.SectionSlice{ nil, { nil, &config.Section{ ID: "a", Groups: config.GroupSlice{ nil, &config.Group{ ID: "b", Fields: config.FieldSlice{ &config.Field{ID: "c", Default: `c`}, }, }, &config.Group{ ID: "b", Fields: config.FieldSlice{ &config.Field{ID: "d", Default: `d`}, }, }, }, }, }, { &config.Section{ID: "a", Label: "LabelA", Groups: nil}, }, }, wantErr: "", want: `[{"ID":"a","Label":"LabelA","Groups":[{"ID":"b","Fields":[{"ID":"c","Default":"c"},{"ID":"d","Default":"d"}]}]}]` + "\n", wantLen: 2, }, 1: { have: []config.SectionSlice{ { &config.Section{ ID: "a", Label: "SectionLabelA", Groups: config.GroupSlice{ &config.Group{ ID: "b", Scope: scope.NewPerm(scope.DefaultID), Fields: config.FieldSlice{ &config.Field{ID: "c", Default: `c`}, }, }, nil, }, }, }, { &config.Section{ ID: "a", Scope: scope.NewPerm(scope.DefaultID, scope.WebsiteID), Groups: config.GroupSlice{ &config.Group{ID: "b", Label: "GroupLabelB1"}, nil, &config.Group{ID: "b", Label: "GroupLabelB2"}, &config.Group{ ID: "b2", Fields: config.FieldSlice{ &config.Field{ID: "d", Default: `d`}, }, }, }, }, }, }, wantErr: "", want: `[{"ID":"a","Label":"SectionLabelA","Scope":["Default","Website"],"Groups":[{"ID":"b","Label":"GroupLabelB2","Scope":["Default"],"Fields":[{"ID":"c","Default":"c"}]},{"ID":"b2","Fields":[{"ID":"d","Default":"d"}]}]}]` + "\n", wantLen: 2, }, 2: { have: []config.SectionSlice{ { &config.Section{ID: "a", Label: "SectionLabelA", SortOrder: 20, Permission: 22}, }, { &config.Section{ID: "a", Scope: scope.NewPerm(scope.DefaultID, scope.WebsiteID), SortOrder: 10, Permission: 3}, }, }, wantErr: "", want: `[{"ID":"a","Label":"SectionLabelA","Scope":["Default","Website"],"SortOrder":10,"Permission":3,"Groups":null}]` + "\n", }, 3: { have: []config.SectionSlice{ { &config.Section{ ID: "a", Label: "SectionLabelA", Groups: config.GroupSlice{ &config.Group{ ID: "b", Label: "SectionAGroupB", Comment: "SectionAGroupBComment", Scope: scope.NewPerm(scope.DefaultID), }, }, }, }, { &config.Section{ ID: "a", SortOrder: 1000, Scope: scope.NewPerm(scope.DefaultID, scope.WebsiteID), Groups: config.GroupSlice{ &config.Group{ID: "b", Label: "GroupLabelB1", Scope: scope.PermAll}, &config.Group{ID: "b", Label: "GroupLabelB2", Comment: "Section2AGroup3BComment", SortOrder: 100}, &config.Group{ID: "b2"}, }, }, }, }, wantErr: "", want: `[{"ID":"a","Label":"SectionLabelA","Scope":["Default","Website"],"SortOrder":1000,"Groups":[{"ID":"b","Label":"GroupLabelB2","Comment":"Section2AGroup3BComment","Scope":["Default","Website","Store"],"SortOrder":100,"Fields":null},{"ID":"b2","Fields":null}]}]` + "\n", }, 4: { have: []config.SectionSlice{ { &config.Section{ ID: "a", Groups: config.GroupSlice{ &config.Group{ ID: "b", Label: "b1", Fields: config.FieldSlice{ &config.Field{ID: "c", Default: `c`, Type: config.TypeMultiselect, SortOrder: 1001}, }, }, &config.Group{ ID: "b", Label: "b2", Fields: config.FieldSlice{ nil, &config.Field{ID: "d", Default: `d`, Comment: "Ring of fire", Type: config.TypeObscure}, &config.Field{ID: "c", Default: `haha`, Type: config.TypeSelect, Scope: scope.NewPerm(scope.DefaultID, scope.WebsiteID)}, }, }, }, }, }, { &config.Section{ ID: "a", Groups: config.GroupSlice{ &config.Group{ ID: "b", Label: "b3", Fields: config.FieldSlice{ &config.Field{ID: "d", Default: `overriddenD`, Label: "Sect2Group2Label4", Comment: "LOTR"}, &config.Field{ID: "c", Default: `overriddenHaha`, Type: config.TypeHidden}, }, }, }, }, }, }, wantErr: "", want: `[{"ID":"a","Groups":[{"ID":"b","Label":"b3","Fields":[{"ID":"c","Type":"hidden","Scope":["Default","Website"],"SortOrder":1001,"Default":"overriddenHaha"},{"ID":"d","Type":"obscure","Label":"Sect2Group2Label4","Comment":"LOTR","Default":"overriddenD"}]}]}]` + "\n", wantLen: 2, }, 5: { have: []config.SectionSlice{ { &config.Section{ ID: "a", Groups: config.GroupSlice{ &config.Group{ ID: "b", Fields: config.FieldSlice{ &config.Field{ ID: "c", Default: `c`, Type: config.TypeMultiselect, }, }, }, }, }, }, { nil, &config.Section{ ID: "a", Groups: config.GroupSlice{ &config.Group{ ID: "b", Fields: config.FieldSlice{ nil, &config.Field{ ID: "c", Default: `overridenC`, Type: config.TypeSelect, Label: "Sect2Group2Label4", Comment: "LOTR", SortOrder: 100, Visible: config.VisibleYes, }, }, }, }, }, }, }, wantErr: "", wantLen: 1, want: `[{"ID":"a","Groups":[{"ID":"b","Fields":[{"ID":"c","Type":"select","Label":"Sect2Group2Label4","Comment":"LOTR","SortOrder":100,"Visible":true,"Default":"overridenC"}]}]}]` + "\n", }, } for i, test := range tests { if len(test.have) == 0 { test.want = "null\n" } var baseSl config.SectionSlice haveErr := baseSl.MergeMultiple(test.have...) if test.wantErr != "" { assert.Len(t, baseSl, 0) assert.Error(t, haveErr) assert.Contains(t, haveErr.Error(), test.wantErr) } else { assert.NoError(t, haveErr) j := baseSl.ToJSON() if j != test.want { t.Errorf("\nIndex: %d\nExpected: %s\nActual: %s\n", i, test.want, j) } } assert.Exactly(t, test.wantLen, baseSl.TotalFields(), "Index %d", i) } }