github.com/erda-project/erda-infra@v1.0.9/providers/component-protocol/protocol/render_parallel_test.go (about)

     1  // Copyright (c) 2021 Terminus, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package protocol
    16  
    17  import (
    18  	"fmt"
    19  	"testing"
    20  
    21  	"github.com/stretchr/testify/assert"
    22  	"gopkg.in/yaml.v3"
    23  
    24  	"github.com/erda-project/erda-infra/providers/component-protocol/cptype"
    25  )
    26  
    27  func Test_doParallelRendering(t *testing.T) {
    28  	py := `
    29  hierarchy:
    30    root: page
    31    structure:
    32      page:
    33        left:
    34         leftContent
    35        right:
    36         rightContent
    37      leftContent:
    38        - head
    39        - workTabs
    40        - workContainer
    41        - messageTabs
    42        - messageContainer
    43      rightContent:
    44        - userProfile
    45      workContainer:
    46        - workCards
    47        - workList
    48      messageContainer:
    49        - messageList
    50      workList:
    51        filter:
    52        - workListFilter
    53    parallel:
    54      page:
    55        - leftContent
    56        - rightContent
    57      leftContent:
    58        - head
    59        - workTabs
    60        - messageTabs
    61      workContainer:
    62        - workCards
    63        - workList
    64      messageContainer:
    65        - messageList
    66  `
    67  	var p cptype.ComponentProtocol
    68  	assert.NoError(t, yaml.Unmarshal([]byte(py), &p))
    69  	orders, err := calculateDefaultRenderOrderByHierarchy(&p)
    70  	assert.NoError(t, err)
    71  	var compRenderings []cptype.RendingItem
    72  	for _, order := range orders {
    73  		compRenderings = append(compRenderings, cptype.RendingItem{Name: order})
    74  	}
    75  	node, err := parseParallelRendering(&p, compRenderings)
    76  	assert.NoError(t, err)
    77  	fmt.Println(node.String())
    78  
    79  	//assert.NoError(t, renderFromNode(context.Background(), nil, nil, node))
    80  }
    81  
    82  func Test_removeOneNode(t *testing.T) {
    83  	nodes := []*Node{{Name: "n1"}, {Name: "n2"}, {Name: "n3"}}
    84  	removeOneNode(&nodes, "n2")
    85  	assert.Equal(t, 2, len(nodes))
    86  }
    87  
    88  func TestNode_calcRenderableNextNodes(t *testing.T) {
    89  	pageNode := &Node{Name: "page", doneNextNodesByName: map[string]*Node{}}
    90  	filterNode := &Node{Name: "filter", doneNextNodesByName: map[string]*Node{}}
    91  	gridNode := &Node{Name: "grid", doneNextNodesByName: map[string]*Node{}}
    92  	chartNode := &Node{Name: "chart", doneNextNodesByName: map[string]*Node{}}
    93  
    94  	pageNode.NextNodes = []*Node{filterNode, gridNode, chartNode}
    95  	filterNode.Parallel = true
    96  	gridNode.Parallel = true
    97  	chartNode.Parallel = false
    98  
    99  	renderableNodes := pageNode.calcRenderableNextNodes()
   100  	assert.Equal(t, 2, len(renderableNodes))
   101  	fmt.Println(renderableNodes)
   102  
   103  	pageNode.doneNextNodesByName = map[string]*Node{filterNode.Name: filterNode, gridNode.Name: gridNode}
   104  	renderableNodes = pageNode.calcRenderableNextNodes()
   105  	assert.Equal(t, 1, len(renderableNodes))
   106  	fmt.Println(renderableNodes)
   107  
   108  	//////
   109  
   110  	pageNode.NextNodes = []*Node{filterNode, gridNode, chartNode}
   111  	pageNode.doneNextNodesByName = map[string]*Node{}
   112  	filterNode.Parallel = true
   113  	gridNode.Parallel = false
   114  	chartNode.Parallel = true
   115  
   116  	renderableNodes = pageNode.calcRenderableNextNodes()
   117  	assert.Equal(t, 1, len(renderableNodes))
   118  	fmt.Println(renderableNodes)
   119  
   120  	pageNode.doneNextNodesByName = map[string]*Node{filterNode.Name: filterNode}
   121  	renderableNodes = pageNode.calcRenderableNextNodes()
   122  	assert.Equal(t, 2, len(renderableNodes))
   123  	fmt.Println(renderableNodes)
   124  }