github.com/cozy/cozy-stack@v0.0.0-20240327093429-939e4a21320e/model/permission/rule_test.go (about)

     1  package permission
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestMergeRulesIdentical(t *testing.T) {
    10  	rule1 := Rule{
    11  		Title:       "myrule1",
    12  		Type:        "io.cozy.files",
    13  		Description: "description of rule1",
    14  		Verbs:       Verbs(GET),
    15  		Values:      []string{},
    16  	}
    17  
    18  	rule2 := Rule{
    19  		Title:       "myrule1",
    20  		Type:        "io.cozy.files",
    21  		Description: "description of rule1",
    22  		Verbs:       Verbs(GET),
    23  		Values:      []string{},
    24  	}
    25  
    26  	newRule, err := rule1.Merge(rule2)
    27  	assert.NoError(t, err)
    28  	assert.Equal(t, &rule2, newRule)
    29  }
    30  
    31  func TestMergeRules(t *testing.T) {
    32  	rule1 := Rule{
    33  		Title:       "myrule1",
    34  		Type:        "io.cozy.files",
    35  		Description: "description of rule1",
    36  		Verbs:       Verbs(GET),
    37  		Values:      []string{},
    38  	}
    39  
    40  	rule2 := Rule{
    41  		Title:       "myrule2",
    42  		Type:        "io.cozy.files",
    43  		Description: "description of rule2",
    44  		Verbs:       Verbs(GET, POST),
    45  		Values:      []string{"io"},
    46  	}
    47  
    48  	expectedRule := &Rule{
    49  		Title:       "myrule1",
    50  		Type:        "io.cozy.files",
    51  		Description: "description of rule1",
    52  		Verbs:       Verbs(GET, POST),
    53  		Values:      []string{"io"},
    54  	}
    55  
    56  	newRule, err := rule1.Merge(rule2)
    57  	assert.NoError(t, err)
    58  	assert.Equal(t, expectedRule, newRule)
    59  }
    60  
    61  func TestMergeRulesBadType(t *testing.T) {
    62  	rule1 := Rule{
    63  		Title:       "myrule1",
    64  		Type:        "io.cozy.files",
    65  		Description: "description of rule1",
    66  		Verbs:       Verbs(GET),
    67  		Values:      []string{},
    68  	}
    69  
    70  	rule2 := Rule{
    71  		Title:       "myrule2",
    72  		Type:        "io.cozy.contacts",
    73  		Description: "description of rule2",
    74  		Verbs:       Verbs(GET, POST),
    75  		Values:      []string{"io"},
    76  	}
    77  
    78  	newRule, err := rule1.Merge(rule2)
    79  	assert.Error(t, err)
    80  	assert.Nil(t, newRule)
    81  	assert.ErrorIs(t, err, ErrImpossibleMerge)
    82  }