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 }