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

     1  package permission
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestDiffSameSets(t *testing.T) {
    10  	set1 := Set{
    11  		Rule{
    12  			Title:  "rule1",
    13  			Verbs:  Verbs(GET),
    14  			Type:   "io.cozy.files",
    15  			Values: []string{"io.cozy.files.music-dir"},
    16  		},
    17  	}
    18  
    19  	set2 := Set{
    20  		Rule{
    21  			Title:  "rule2",
    22  			Verbs:  Verbs(GET),
    23  			Type:   "io.cozy.files",
    24  			Values: []string{"io.cozy.files.music-dir"},
    25  		},
    26  	}
    27  
    28  	d := Diff(set1, set2)
    29  	assert.True(t, set1.HasSameRules(d))
    30  }
    31  
    32  func TestDiffNotSameSets(t *testing.T) {
    33  	set1 := Set{
    34  		Rule{
    35  			Title:  "rule1",
    36  			Verbs:  Verbs(GET),
    37  			Type:   "io.cozy.files",
    38  			Values: []string{"io.cozy.files.music-dir"},
    39  		},
    40  	}
    41  
    42  	set2 := Set{
    43  		Rule{
    44  			Title:  "rule1",
    45  			Verbs:  Verbs(GET, POST),
    46  			Type:   "io.cozy.files",
    47  			Values: []string{"io.cozy.files.music-dir"},
    48  		},
    49  	}
    50  
    51  	d := Diff(set1, set2)
    52  	assert.False(t, set1.HasSameRules(d))
    53  
    54  	expectedSet := Set{
    55  		Rule{
    56  			Title:  "rule1",
    57  			Verbs:  Verbs(POST), // Only the POST has been added
    58  			Type:   "io.cozy.files",
    59  			Values: []string{}, // No addition has been made
    60  		},
    61  	}
    62  
    63  	assert.Equal(t, expectedSet, d)
    64  }
    65  
    66  func TestDiffMultipleRules(t *testing.T) {
    67  	set1 := Set{
    68  		Rule{
    69  			Title:  "rule1",
    70  			Verbs:  Verbs(GET),
    71  			Type:   "io.cozy.files",
    72  			Values: []string{"io.cozy.files.music-dir"},
    73  		},
    74  		Rule{
    75  			Title:  "rule2",
    76  			Verbs:  Verbs(PATCH, DELETE),
    77  			Type:   "io.cozy.foobar",
    78  			Values: []string{"io.cozy.files.music-dir"},
    79  		},
    80  	}
    81  
    82  	set2 := Set{
    83  		Rule{
    84  			Title:  "rule1",
    85  			Verbs:  Verbs(GET, POST),
    86  			Type:   "io.cozy.files",
    87  			Values: []string{"io.cozy.files.music-dir"},
    88  		},
    89  		Rule{
    90  			Title:  "rule2",
    91  			Verbs:  Verbs(PATCH, DELETE, GET, POST),
    92  			Type:   "io.cozy.foobar",
    93  			Values: []string{"io.cozy.files.music-dir", "io.cozy.files.foobar-dir"},
    94  		},
    95  	}
    96  
    97  	d := Diff(set1, set2)
    98  	assert.False(t, set1.HasSameRules(d))
    99  
   100  	expectedSet := Set{
   101  		Rule{
   102  			Title:  "rule1",
   103  			Verbs:  Verbs(POST), // Only the POST has been added
   104  			Type:   "io.cozy.files",
   105  			Values: []string{}, // No addition has been made
   106  		},
   107  		Rule{
   108  			Title:  "rule2",
   109  			Verbs:  Verbs(GET, POST), // GET & POST has been added
   110  			Type:   "io.cozy.foobar",
   111  			Values: []string{"io.cozy.files.foobar-dir"}, // A new folder was added
   112  		},
   113  	}
   114  	assert.Equal(t, expectedSet, d)
   115  }
   116  
   117  func TestDiffNotSameSetsNewRule(t *testing.T) {
   118  	set1 := Set{
   119  		Rule{
   120  			Title:  "rule1",
   121  			Verbs:  Verbs(GET),
   122  			Type:   "io.cozy.files",
   123  			Values: []string{"io.cozy.files.music-dir"},
   124  		},
   125  	}
   126  
   127  	set2 := Set{
   128  		Rule{
   129  			Title:  "rule1",
   130  			Verbs:  Verbs(GET, POST),
   131  			Type:   "io.cozy.files",
   132  			Values: []string{"io.cozy.files.music-dir"},
   133  		},
   134  		Rule{
   135  			Title: "myNewRule",
   136  			Verbs: Verbs(GET, POST),
   137  			Type:  "io.cozy.ducky",
   138  		},
   139  	}
   140  
   141  	d := Diff(set1, set2)
   142  	assert.False(t, set1.HasSameRules(d))
   143  
   144  	expectedSet := Set{
   145  		Rule{
   146  			Title: "myNewRule",
   147  			Verbs: Verbs(GET, POST),
   148  			Type:  "io.cozy.ducky",
   149  		},
   150  		Rule{
   151  			Title:  "rule1",
   152  			Verbs:  Verbs(POST), // Only the POST has been added
   153  			Type:   "io.cozy.files",
   154  			Values: []string{}, // No addition has been made
   155  		},
   156  	}
   157  
   158  	assert.Equal(t, expectedSet, d)
   159  }