// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. package model import ( "encoding/json" "testing" "github.com/mattermost/focalboard/server/utils" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) type MockResolver struct{} func (r MockResolver) GetUserByID(userID string) (*User, error) { if userID == "user_id_1" { return &User{ ID: "user_id_1", Username: "username_1", }, nil } else if userID == "user_id_2" { return &User{ ID: "user_id_2", Username: "username_2", }, nil } return nil, nil } func Test_parsePropertySchema(t *testing.T) { board := &Board{ ID: utils.NewID(utils.IDTypeBoard), Title: "Test Board", TeamID: utils.NewID(utils.IDTypeTeam), } err := json.Unmarshal([]byte(cardPropertiesExample), &board.CardProperties) require.NoError(t, err) t.Run("parse schema", func(t *testing.T) { schema, err := ParsePropertySchema(board) require.NoError(t, err) assert.Len(t, schema, 6) prop, ok := schema["7c212e78-9345-4c60-81b5-0b0e37ce463f"] require.True(t, ok) assert.Equal(t, "select", prop.Type) assert.Equal(t, "Type", prop.Name) assert.Len(t, prop.Options, 3) prop, ok = schema["a8spou7if43eo1rqzb9qeq488so"] require.True(t, ok) assert.Equal(t, "date", prop.Type) assert.Equal(t, "MyDate", prop.Name) assert.Empty(t, prop.Options) }) } func Test_GetValue(t *testing.T) { resolver := MockResolver{} propDef := PropDef{ Type: "multiPerson", } value, err := propDef.GetValue([]interface{}{"user_id_1", "user_id_2"}, resolver) require.NoError(t, err) require.Equal(t, "username_1, username_2", value) // trying with only user value, err = propDef.GetValue([]interface{}{"user_id_1"}, resolver) require.NoError(t, err) require.Equal(t, "username_1", value) // trying with unknown user value, err = propDef.GetValue([]interface{}{"user_id_1", "user_id_unknown"}, resolver) require.NoError(t, err) require.Equal(t, "username_1, user_id_unknown", value) // trying with multiple unknown users value, err = propDef.GetValue([]interface{}{"michael_scott", "jim_halpert"}, resolver) require.NoError(t, err) require.Equal(t, "michael_scott, jim_halpert", value) } const ( cardPropertiesExample = `[ { "id":"7c212e78-9345-4c60-81b5-0b0e37ce463f", "name":"Type", "options":[ { "color":"propColorYellow", "id":"31da50ca-f1a9-4d21-8636-17dc387c1a23", "value":"Ad Hoc" }, { "color":"propColorBlue", "id":"def6317c-ec11-410d-8a6b-ea461320f392", "value":"Standup" }, { "color":"propColorPurple", "id":"700f83f8-6a41-46cd-87e2-53e0d0b12cc7", "value":"Weekly Sync" } ], "type":"select" }, { "id":"13d2394a-eb5e-4f22-8c22-6515ec41c4a4", "name":"Summary", "options":[], "type":"text" }, { "id":"566cd860-bbae-4bcd-86a8-7df4db2ba15c", "name":"Color", "options":[ { "color":"propColorDefault", "id":"efb0c783-f9ea-4938-8b86-9cf425296cd1", "value":"RED" }, { "color":"propColorDefault", "id":"2f100e13-e7c4-4ab6-81c9-a17baf98b311", "value":"GREEN" }, { "color":"propColorDefault", "id":"a05bdc80-bd90-45b0-8805-a7e77a4884be", "value":"BLUE" } ], "type":"select" }, { "id":"aawg1s8rxq8o1bbksxmsmpsdd3r", "name":"MyTextProp", "options":[], "type":"text" }, { "id":"awdwfigo4kse63bdfp56mzhip6w", "name":"MyCheckBox", "options":[], "type":"checkbox" }, { "id":"a8spou7if43eo1rqzb9qeq488so", "name":"MyDate", "options":[], "type":"date" } ]` )